考虑n个整数的数组,1-n。范围(1,n)中的每个数字恰好包括一次。
找到存储的max_int变量的平均编辑数,对于数组的任何排列,就像对数组进行有序遍历一样。
例如: 如果n = 2,则两种可能的排列是[1,2]和[2,1]。 在[1,2]的情况下,对max_int变量进行了两次编辑(一次用于第一个元素,一次用于第二个元素) 在[2,1]的情况下,max_int变量有一个编辑(一次或第一个变量,当你到达第二个变量时,你会发现2> 1并且没有编辑)
所以n = 2的答案是3 / n = 3/2。
类似地,对于n = 3:
[1,2,3]给出3次编辑
[1,3,2]给出2次编辑
[2,1,3]给出2次编辑
[2,3,1]给出2次编辑
[3,1,2]给出1次编辑
[3,2,1]给出1次编辑
总共11个,平均为11/3我正在寻找一个公式,(可能是一个求和?)而不仅仅是让它工作的代码。我已经编写了代码来找到它,但STILL无法抽象出公式。
n = 4的示例: [1,2,3,4]给出4次编辑
[1,2,4,3]给出3次编辑
[1,3,2,4]给出了3次编辑
[1,3,4,2]给出3次编辑
[1,4,2,3]给出2次编辑
[1,4,3,2]给出2次编辑
[2,1,3,4]给出3次编辑
[2,1,4,3]给出2次编辑
[2,3,1,4]给出3次编辑
[2,3,4,1]给出3次编辑
[2,4,1,3]给出2次编辑
[2,4,3,1]给出2次编辑
[3,1,2,4]给出2次编辑
[3,1,4,2]给出2次编辑
[3,2,1,4]给出2次编辑
[3,2,4,1]给出2次编辑
[3,4,1,2]给出2次编辑
[3,4,2,1]给出2次编辑
[4,1,2,3]给出1次编辑
[4,1,3,2]给出1次编辑
[4,2,1,3]给出1次编辑
[4,2,3,1]给出1次编辑
[4,3,1,2]给出1次编辑
[4,3,2,1]给出1次编辑
总数为50
答案 0 :(得分:0)
对于n = 3的情况,你除以3而你应该除以6,因为有3! = 3个对象的6个排列。
如果您可以生成具有如此高精度的随机浮点数,那么您将获得相同的编辑概率 - 关联概率为零 - 每个排列的概率相同。
有了这些数字,很容易看出到目前为止第n个数字最高的概率是1 / n。因此,平均而言,到目前为止,您必须更改最大值的次数是1 + 1/2 + 1/3 + ... 1 / n。所以例如对于n = 4,我们有1 + 1/2 + 1/3 + 1/4 = 25/12,因为有4个!= 24个排列,这与你的50个数相匹配。
看http://en.wikipedia.org/wiki/Harmonic_number我没有看到任何整齐的封闭式公式。