我希望有人能帮助我回答以下问题。谢谢!
以下是Permute-By-Sorting算法的伪代码:
Permute-By-Sorting (A)
n = A.length
let P[1..n] be a new array
for i = 1 to n
P[i] = Random (1,n^3)
sort A, using P as sort keys
在上述算法中,数组P表示数组A中元素的优先级。第4行选择1到n ^ 3之间的随机数。
问题是P中所有优先级的唯一概率是多少?以及如何获得概率?
答案 0 :(得分:1)
您正在从n
中选择1...n^3
个数字,并询问它们都是唯一的概率。
有(n^3) P n = (n^3)!/(n^3-n)!
种方式可以唯一地选择n个数字,(n^3)^n
种方式可以选择n个数字。
因此,数字唯一的概率只是第一个等式除以第二个等式,得出
n3! -------------- (n3-n)! n3n
答案 1 :(得分:1)
调和已经给出的答案:对于选择i = 0,...,n - 1,假设尚未选择重复项,则有n ^ 3 - i非重复选择n ^ 3总计为第i个值。因此,概率是i = 0,...,n - 1(1-i / n ^ 3)的乘积。
sdcwc正在使用一个绑定来降低此概率的联合1 - O(1 / n)。这个估计基本上是正确的。证明草图是(1-i / n ^ 3)是exp(-i / n ^ 3 + O(i ^ 2 / n ^ 6)),因此乘积是exp(-O(n ^ 2)/ n ^ 3 + O(n ^ -3)),其大于或等于1-O(n ^ 2)/ n ^ 3 + O(n ^ -3)= 1-O(1 / n)。我确信数学上的优秀人员会很乐意做出这样的推导和#34;正确的#34;对你而言。
答案 2 :(得分:1)
其他人已经给你概率计算,但我想你可能会问错误的问题。
我假设您询问优先级唯一的可能性的原因,以及首先选择n ^ 3的原因,是因为您希望它们是唯一的,并选择大范围相对似乎是实现独特性的合理方式。
确保值是唯一的更容易。只需使用数字1 .. n填充优先级数组,然后使用the Fisher-Yates algorithm(也就是计算机编程艺术中的算法P,第2卷,数值算法,Donald Knuth)将它们随机填充。
然后使用已知的唯一优先级值执行排序。
(还有其他方法可以获得随机排列。有可能使用因子数(或因子数系统)生成序列的第n个词典排列,因此生成随机选择的排列值[1 .. n!]。)
答案 3 :(得分:0)
所以排序部分无关紧要
假设“随机”是真实随机的,概率只是
n^3!
----------------
(n^3-n)!n^(3n)
答案 4 :(得分:0)
设A ij 为事件:第i和第j个元素发生碰撞。显然P(A ij )= 1 / n 3 。
最多有n 2 对,因此至少有一次碰撞的概率最多为1 / n。
如果您对确切的事情感兴趣,请参阅BlueRaja的答案,但在随机算法中,通常足以给出这种类型的约束。