【发布时间】:2018-03-20 03:30:37
【问题描述】:
这似乎是一个简单的问题,但实际上将其实现到代码中给我带来了很多麻烦。我正在寻找用 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]
我正在考虑生成此路径的过程如下。
- 遍历所有数字 0 到
( n - 1)^(L-3)。 - 将这些数字转换为基数
n - 1 - 将其转换回字符串,在左侧追加 0,直到长度为
L - 3。 - 对于每个数字,遍历所有数字
[0, n-2]并将这些数字附加到右侧。将这些称为我们的path_ids - 从第一个节点 [0] 开始新路径
- 对于
path_id中的每个数字,但最后创建一个列表x = range(n),从x中删除路径中的前一个节点,并将x[ digit]附加到您的路径中 - 对于路径 ID 中的最后一个数字,创建
x = range(n)删除路径中的最后一个节点并从x中删除n-1,将x[ digit]附加到路径中。 - 将
n-1附加到路径的末尾。
对于我的问题来说,这似乎是一个非常复杂的过程,最终可能会使我的代码减慢到无法使用的程度。我正在寻找一种简单的方法来做到这一点。这个过程将在所有可能的路径长度的迭代中,我将迭代生成的每条路径并检查它是否满足某些条件,如果是,我将其存储。然后,我将遍历满足这些条件的每条路径,并检查其他一些条件以获得最佳条件。可能会有很多“最佳”路径,所以我必须对它们进行排序。正如你可以想象的那样,低效地编写这个函数会极大地拖慢我的整个程序。
我为破坏格式而道歉,我已经潜伏了一段时间,但这是我问自己的第一个问题。
【问题讨论】:
-
你试过什么代码?
-
but actually implementing it into code is giving me a lot of trouble你尝试了什么,遇到了什么麻烦?这太笼统了,没人会给你代码。 -
@greenkraken 您能否将您的代码/策略编辑到您的问题中,而不是将其放入 cmets,以便更容易提供帮助?
-
@potential close voters OP 正在询问执行此操作的正确算法。这远非“过于宽泛”。
标签: python loops graph iteration