【问题标题】:Count how many different ways we can organize an array数一数我们可以用多少种不同的方式来组织一个数组
【发布时间】:2017-05-23 08:19:10
【问题描述】:

我声明了这些数组

right_opt = [1 for x in range(20)]
down_opt = [0 for y in range(20)]
lst = right_opt + down_opt

lst 等于 ->

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

我如何计算我可以用多少种方式以独特的方式组织这个数组
示例:(小数组)
[0,0,1,1] || [0,1,0,1] || [1,0,0,1]
但是 [0,0,1,1] 不能再次显示(即使我们将第一个 0 的位置与第二个交换)

【问题讨论】:

  • 听起来和二项式系数有关en.wikipedia.org/wiki/Binomial_coefficient
  • 我投票结束这个问题,因为它是一个关于数学的问题。
  • @PetarPetrovic 二项式系数没有考虑唯一性。
  • 这是一个数学算法,但我需要一个代码来解决它
  • 如果你需要一个代码来解决它,你来错地方了。 Stackoverflow 旨在帮助您编写代码。不是为你写代码。

标签: python arrays algorithm math


【解决方案1】:

您不需要一种算法来计算您可以对列表中的元素进行排序的不同方式,一个简单的公式就足够了。

您可以订购 N 个独特元素的不同方式的数量是 N! (这是 N 阶乘)。 如果元素有重复项(如您的情况),则除以可以订购这些重复项的方式数。

因此,对于 20 个 0 和 20 个 1 的示例,答案是 (40!)/(20!*20!) = 137,846,528,820
(这是 1370 亿种订购方式)

【讨论】:

  • 您应该避免回答明显不适合本网站的问题。
  • @RoryDaulton 我明白你的意思,但考虑到 cmets 以及其他答案(我看到的现在已删除),尚不清楚是否存在简单的公式。我本可以在评论中提供解决方案,但我认为我需要写的内容超出评论允许的范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多