【发布时间】:2015-02-18 20:29:31
【问题描述】:
将数组 a 从 a[0] 填充到 a[n-1]:生成随机数,直到得到一个不在先前索引中的数字。
这是我的实现:
public static int[] first(int n) {
int[] a = new int[n];
int count = 0;
while (count != n) {
boolean isSame = false;
int rand = r.nextInt(n) + 1;
for (int i = 0; i < n; i++) {
if(a[i] == rand) isSame = true;
}
if (isSame == false){
a[count] = rand;
count++;
}
}
return a;
}
我以为是 N^2,但显然是 N^2logN,我不确定何时考虑 log 函数。
【问题讨论】:
-
在我看来它没有时间复杂度的上限。您可能会一直无法生成唯一编号。你能给出一个参考,它说这是 O(n^2 log n) 吗?
-
我们说的是平均时间吗?
-
不能说我对分析一个可怕的算法的 big-O 非常感兴趣,因为它存在一个微不足道的 O(n) 替换。
-
这是一个教科书式的概率算法,你不会真正实现它
-
@rpattiso 如果您选择随机数的范围大大超出了您愿意创建的列表的大小,该怎么办?
标签: java algorithm big-o permutation