整數的隨機置換

2021-09-01 07:48:22 字數 1045 閱讀 1358

演算法描述:生成前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...