【问题标题】:I have 10 variables and I have to fill them with either 1 or -1 , how do I list out all the possible cases?我有 10 个变量,我必须用 1 或 -1 填充它们,我如何列出所有可能的情况?
【发布时间】:2020-02-02 12:46:27
【问题描述】:

我正在研究一个数学问题,涉及男性和女性的安排。有 5 对 情侣 , 我们 知道 每 对 情侣 坐 相邻 , 每个 男性 都 坐在 一个 女性 对面 .如果我要用 +1 或 -1 代表男性或女性,并想找到所有可能结果的列表并打印出来,我该怎么做?

我必须使用 10 个 FOR 循环吗?有没有更简单的方法可以将结果存储在数组中?

附:数学问题不限于我在这里写的,我想自己解决(对不起)但我想了解我上面强调的问题。如果可能的话,给我看一个小 sn-p 来给我指明正确的方向。

【问题讨论】:

  • 你应该把代码发在这里,这个问题不属于stackoverflow,你应该把它作为数学问题发到stackexchange中
  • 我知道,但我对数学部分不感兴趣,我问的唯一问题是如何有效地列出可以将 1 或 -1 存储在 10 个变量中的所有情况然后打印出来,afaik 这不是一道数学题。如果您可以帮助我解决使用 10 个 FOR 循环以外的解决方案,请这样做。
  • 你可以递归地解决它而无需任何循环
  • 您想使用哪种语言?解决问题的“高效”和“简单”方法取决于语言。

标签: arrays loops for-loop recursion math


【解决方案1】:

最“有效”或“简单”的方式来生成所有方式来获得包含1-1 的10 个数字取决于语言。 Python有一个非常简单快捷的方法。这是一个创建执行此操作的生成器的表达式。先执行命令

import itertools

要将你需要的东西放入你的命名空间,那么表达式是

itertools.product((1, -1), repeat=10)

例如,要处理所有 10 个数字的元组,您可以这样做:

import intertools

for mytuple in itertools.product((1, -1), repeat=10):
    # Process mytuple

如果你不熟悉 Python,为一个循环创建的每个“元组”基本上都相当于一个数组。

【讨论】:

    【解决方案2】:

    如果顺序无关紧要,则有十一种解决方案:输出列表中每个可能的 -1 数量一个。要列出这些,从 0 到 10(包括)循环,然后从 1 到 10(包括)循环,首先打印一个等于外部计数器值的数字 -1,然后打印 1 直到内部循环结束。

    如果顺序很重要,一个简单的递归解决方案是从一个空缓冲区开始,位置为零。然后,在每个级别,依次将 -1 和 1 添加到当前位置,通过在每次调用中递增位置来递归地填充缓冲区的剩余部分。当位置等于缓冲区长度时(因此缓冲区已满),您可以打印缓冲区的内容并终止递归。这是 O(n2^n) 时间和 O(n) 空间,其中 n 是缓冲区长度。如果堆栈溢出成为一个问题,请考虑使用迭代和堆栈重写它以自己显式管理调用堆栈。

    【讨论】:

      【解决方案3】:

      查看the Power Set 以生成集合的所有可能子集。

      有很多方法可以生成这个,但你说你想弄清楚。

      This link from math.stackexchange.com seems relevant

      【讨论】:

      • 我了解幂集的概念,但我如何生成所有可能的 1024 个案例。我想先生成所有可能的情况,然后从那里开始
      猜你喜欢
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      相关资源
      最近更新 更多