gpt4 book ai didi

algorithm - 生成从 1 到 n 的随机数字列表的算法的正确性

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:12:01 25 4
gpt4 key购买 nike

给定一个函数 Random(x, y),它返回一个介于 xy(含)之间的随机数。设计一个算法来打印从 1n 的 unique_random_numbers 列表。列表中必须有 n 个数字,每个数字只能出现一次。

例如

PrintRandomList(1, 5) can print -> 2, 5, 1, 4, 3    
PrintRandomList(1, 6) can print -> 4, 1, 6, 3, 2, 5

我已经能够想出一个算法,但无法证明它会生成一个真正的随机列表(假设 Random(x, y) 会生成真正的随机数) .

void PrintRandomList(int a, int b) {
if(a<=b) {
int pivot = Random(a, b);
printf("%d ", pivot);
PrintRandomList(a, pivot-1);
PrintRandomList(pivot+1, b);
}
}

我的问题:算法是否正确?如果是,那么我们可以证明算法的正确性吗?

如果这个算法是正确的,那么我们也可以用它来打乱数组而不是使用 Knuth 打乱算法。

最佳答案

证明此算法是否有效的根本问题的诀窍是,您必须证明每个结果同样可能。正如其他人指出的那样,这里不是这种情况。

如果您能找到任何无法到达或不太可能到达的序列,那么您就知道该算法不“公平”。这个论证的反面证明是的。

关于algorithm - 生成从 1 到 n 的随机数字列表的算法的正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18872237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com