算法--生成隨機數組

在某些情況,希望輸入數據儘量均勻,不追求最好的時間複雜度,同樣也不希望最差的時間複雜度,避免那些極端的情況。

例子   僱用問題(引用自黑書)

你需要僱用一名新的辦公室助理,每天你都會面試一個人,總用有n個面試者,如果面試者比當前的助理好,那麼就僱傭這個人,但你需要消耗C費用,不僱傭就不會產生任何費用。在最差情況下,應聘者的能力是遞增的,那麼費用爲nc.我們的目標就是避免這種極端情況。


       在確定輸入的情況,我們可以隨機生成一個數組來爲每個面試者都設置一個優先級,然後對數組排序。


/*隨機產生一個,數值在1到n3的數組*/
#include<cstdio>
#include<cstdlib>
void RandomArray(int array[],int length ){
	int n=length*length*length;//n3
	for(int i=0;i<length;i++)
		array[i]=rand()%n+1;
}
int main(){
	const int n=10;
	int array[n];
	RandomArray(array,n);
	for(int i=0;i<n;i++)
		printf("%d ",array[i]);
}


爲什麼生成數組的數值範圍要在1到n3之間呢,因爲那樣可以儘量避免數值的重複。數值不重複的概率至少1-1/n.


轉載請標明出處,原文http://blog.csdn.net/ccy0815ccy

發佈了37 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章