在某些情況,希望輸入數據儘量均勻,不追求最好的時間複雜度,同樣也不希望最差的時間複雜度,避免那些極端的情況。
例子 僱用問題(引用自黑書)
你需要僱用一名新的辦公室助理,每天你都會面試一個人,總用有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