python - 网格遍历的嵌套for循环

标签 python for-loop optimization range time-complexity

我有一个 n*n 网格网络,其中每个节点的值为 (0,0),(0,1)...(n-1,n-1)。我需要添加一条边,以便网络的平均路径长度 (APL) 减少。为此,我必须选择每个节点,为每个其他节点画一条边并检查 APL。

所以我为此做了一个嵌套的for循环:

for x,y in itertools.product(range(n), range(n)):
    for i,j in itertools.product(range(x,n), range(n)):

此处外部 for 循环选择第一个节点,内部 for 循环选择第二个节点。 range(x,n) 稍微减少了迭代次数,类似地,有没有办法将内部 for 循环中的 range(n) 更改为其他内容,例如可以减少迭代次数吗?

我尝试使用 range((y+1)%n,n) 但它不起作用,因为假设第一个节点是 (0,n-1),然后在选择第二个节点之后节点为(0,n),它不会选择(1,0)。那么有没有办法优化这个呢?

最佳答案

如果我理解正确,只需在索引和循环上使用模数即可。
循环遍历相同的索引两次,然后在相同的索引上继续,例如:

for x, y in itertools.product(range(n), repeat=2):
    for i, j in itertools.product(range(n), repeat=2):
        if (x, y) == (i, j):
            continue
        add_edge((x, y), ((x+i)%n, (y+j)%n))
        ...

关于python - 网格遍历的嵌套for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50718293/

相关文章:

python - 在 for 循环中将列表附加到新列表

matlab - 如何在 Matlab 中用窗口循环矩阵

vb.net - 在优化的编译代码中诊断 AccessViolationException

c# - 如何测试哪种方法实现运行得更快

python - Django + Testypie 问题 : AppRegistryNotReadyException

python subprocess.Popen 错误在 linux

python - Jupyter笔记本 'greedy completer'配置

python - Web 服务器中的 Airflow Dag 状态不一致

java - 嵌套的 for 循环没有完成我要打印的序列

检查函数内部与外部的值?