用于查找在 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

猜你喜欢