生成具有给定起点和终点的所有路径

2024-04-19 07:19:11 发布

您现在位置:Python中文网/ 问答频道 /正文

这看起来是个简单的问题,但实际上将其实现为代码给了我很多麻烦。我希望用Python编写一个循环,遍历所有可能的不同路径,路径长度为L。你知道吗

此路径中的第一个节点必须是0,最后一个节点必须是整数n - 1。第一个和最后一个节点之间的每个节点都可以是[0 , n-1]中的任意整数,但必须不同于它前面的一个节点和它后面的一个节点。你知道吗

n可以是[2, 7]中的任何整数,L可以是任何大于等于3的整数。你知道吗

例如,如果n = 4L = 3,循环应该遍历

[ 0, 1, 3]
[ 0, 2, 3]

对于n = 4L = 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]

我想到的生成这条路径的过程如下。你知道吗

  1. 遍历从0到( n - 1)^(L-3)的所有数字。你知道吗
  2. 把这些数字转换成基数n - 1
  3. 将其转换回字符串,在左边追加0,直到其长度L - 3。你知道吗
  4. 对于这些数字中的每一个,遍历所有数字[0, n-2],并将这些数字附加到右边。称之为我们的path_ids
  5. 使用第一个节点[0]启动新路径
  6. 对于path_id中的每个数字,但最后一个数字创建一个列表x = range(n),从x中删除路径中的前一个节点,并将x[ digit]附加到路径中
  7. 对于路径id create中的最后一个数字x = range(n)删除路径中的最后一个节点,并从xn-1x[ digit]附加到路径中。你知道吗
  8. n-1附加到路径的末尾。你知道吗

对于我的问题来说,这似乎是一个非常复杂的过程,最终可能会使我的代码慢到无法使用的程度。我在找一个简单的方法。这个过程将在所有可能路径长度的迭代中进行,我将迭代生成的每个路径并检查它是否满足某些条件,如果满足,我将存储它。然后,我将遍历所有满足这些条件的路径,并检查其他一些条件是否为最佳条件。可能会有许多“最佳”路径,因此我必须对它们进行排序。正如你所想象的,低效地编写这个函数会大大降低我整个程序的速度。你知道吗

我很抱歉破坏了格式,我已经潜伏了一段时间,但这是我问自己的第一个问题。你知道吗


Tags: path字符串代码路径idids列表节点
1条回答
网友
1楼 · 发布于 2024-04-19 07:19:11

你想要itertools.product(range(n-1), repeat=L-2)。然后计算每个组合模块的累积和(从1开始)。这样就避免了所有的重复,除了在最后,你只是检查之后。你知道吗

(当提问者想要不重复的随机数时,我看到了这个建议,但在这里也适用。如果我能再次找到它,我会发布一个链接。)

相关问题 更多 >