演算法描述:生成前n個整數的隨機置換,如,是合法的,而不合法,因為3沒出現。
1.基本演算法
該演算法效率比較低,o(n*n*logn),主要就是隨機的生成乙個數,然後再一直陣列中去檢測是否存在,如果不存在才插入。從而效率低下
//使用的是思想1(o(n*n*logn))
int* getrandom(int* a, int length);
for(int i=0; i3.使用了逆向思維,為什麼我們不一次性插入所有資料,然後再隨機交換位置,從而達到此效果呢?該演算法就是這樣,複雜度o(n),線性的
//使用思想3(o(n))
int* getrandom3(int* a, const int length)
int findexist(const int* a, int length, int value)
return false;
}//使用的是思想1(o(n*n*logn))
int* getrandom(int* a, int length)else
}a[i] = j;
} return a;
}//使用思想2(o(n*logn))
int* getrandom2(int* a, const int length);
for(int i=0; iused[j] = 1;
a[i] = j;
} return a;
}//使用思想3(o(n))
int* getrandom3(int* a, const int length)
//任意交換位置,打亂次序
for(i=0; ireturn a;
}int main();
srand(time(null));
// int *b = getrandom(a, len);
// int *b = getrandom2(a, len);
int *b = getrandom3(a, len);
for(int i=0; ireturn 0;
}
前N個自然數的隨機置換
來自 資料結構與演算法分析 c語言描述 練習2.7 問題描述 假設需要生成前n個自然數的乙個隨機置換。例如,和 就是合法的置換,但 卻不是,因為數1出現了兩次而數 3 缺沒有。這個程式常常用於模擬一些演算法。我們假設存在乙個隨機數生成器 randint i,j 它以相同的概率生成 i 和 j 之間的...
JS生成隨機整數
用js的隨機數生成函式random 配合其他數學函式可以限制隨機數的取值。math.random 結果為0 1間的乙個隨機數 包括0,不包括1 math.floor num 引數num為乙個數值,函式結果為num的整數部分。math.ceil n 返回大於等於n的最小整數。math.round nu...
js 生成隨機整數
方法 描述ceil x 進行上捨入,即向上取整。floor x 進行下捨入,即向下取整。round x 四捨五入。random 返回 0 1 之間的隨機數,包含 0 不包含 1。math.ceil math.random 10 獲取從 1 到 10 的隨機整數,取 0 的概率極小。math.roun...