說我有一個N整數的數組設置爲值'0',我想選擇一個隨機元素的值爲'0',並將其值'1'算法來隨機填充一個數組而不發生衝突
我該如何有效地做到這一點?
我想出了2個解決方案,但他們看起來相當ineficient
首先解決
int array[N] //init to 0s
int n //number of 1s we want to add to the array
int i = 0
while i < n
int a = random(0, N)
if array[a] == 0
array[a] = 1
i++
end if
end while
這將是非常低效的,因爲碰撞的概率大陣列
第二個涉及列表中包含剩餘的所有0個位置,我們選擇一個介於0和0之間的隨機數來查找列表中對應於數組中索引的值。 這是一個很大比第一個解決方案更加可靠,因爲操作的數量是有界的,但仍然有N²的最壞情況的複雜性,如果我們要填補陣列完全
我認爲這是最有效的方法,因爲我不會對修改它的結果數組執行操作 謝謝 – user3548298