用于查找在 Python 中对数组元素进行排序所需的预期 shuffle 次数的程序
假设我们有一组元素nums。我们必须按非递减顺序对它们进行排序。但是排序技术是随机的。我们将检查数组是否已排序,如果没有,则将其随机洗牌并再次检查。直到所有元素都被排序,继续这个过程。在这种情况下,我们必须找到对它们进行排序所需的预期随机数。显示最多6位小数的答案。
所以,如果输入像nums=[5,2,7],那么输出将是6,因为有3种可能的排列,所以概率是1/3
如果我们在i=1次迭代时得到排序数组,那么它将需要1/3
如果我们在i=2次迭代时得到排序数组,那么它将需要(2/3)*(1/3)
如果我们在第i次迭代时得到排序数组,那么它将需要(2/3)^(i-1)*(1/3)
示例
让我们看看以下实现以获得更好的理解-
from math import factorial def solve(nums): if nums == sorted(nums): return 0 else: m={} for i in nums: if i in m: m[i]+=1 else: m[i]=1 num=1 for i in m: num *= factorial(m[i]) den=factorial(len(nums)) return round((den/num),6) nums = [5,2,7] print(solve(nums))
输入
[5,2,7]输出结果
6.0