这看起来是个简单的问题,但实际上将其实现为代码给了我很多麻烦。我希望用Python编写一个循环,遍历所有可能的不同路径,路径长度为L
。你知道吗
此路径中的第一个节点必须是0,最后一个节点必须是整数n - 1
。第一个和最后一个节点之间的每个节点都可以是[0 , n-1]
中的任意整数,但必须不同于它前面的一个节点和它后面的一个节点。你知道吗
n
可以是[2, 7]
中的任何整数,L
可以是任何大于等于3的整数。你知道吗
例如,如果n = 4
和L = 3
,循环应该遍历
[ 0, 1, 3]
[ 0, 2, 3]
对于n = 4
和L = 4
,循环应该遍历
[ 0, 1, 0, 3]
[ 0, 1, 2, 3]
[ 0, 2, 0, 3]
[ 0, 2, 1, 3]
[ 0, 3, 0, 3]
[ 0, 3, 1, 3]
[ 0, 3, 2, 3]
我想到的生成这条路径的过程如下。你知道吗
( n - 1)^(L-3)
的所有数字。你知道吗n - 1
L - 3
。你知道吗[0, n-2]
,并将这些数字附加到右边。称之为我们的path_ids
path_id
中的每个数字,但最后一个数字创建一个列表x = range(n)
,从x
中删除路径中的前一个节点,并将x[ digit]
附加到路径中x = range(n)
删除路径中的最后一个节点,并从x
中n-1
将x[ digit]
附加到路径中。你知道吗n-1
附加到路径的末尾。你知道吗对于我的问题来说,这似乎是一个非常复杂的过程,最终可能会使我的代码慢到无法使用的程度。我在找一个简单的方法。这个过程将在所有可能路径长度的迭代中进行,我将迭代生成的每个路径并检查它是否满足某些条件,如果满足,我将存储它。然后,我将遍历所有满足这些条件的路径,并检查其他一些条件是否为最佳条件。可能会有许多“最佳”路径,因此我必须对它们进行排序。正如你所想象的,低效地编写这个函数会大大降低我整个程序的速度。你知道吗
我很抱歉破坏了格式,我已经潜伏了一段时间,但这是我问自己的第一个问题。你知道吗
你想要
itertools.product(range(n-1), repeat=L-2)
。然后计算每个组合模块的累积和(从1开始)。这样就避免了所有的重复,除了在最后,你只是检查之后。你知道吗(当提问者想要不重复的随机数时,我看到了这个建议,但在这里也适用。如果我能再次找到它,我会发布一个链接。)
相关问题 更多 >
编程相关推荐