我正在研究一个我希望浏览图表的问题。但是我可以看到,当我编写代码时,图形的构建是重要部分。 每个节点都应该有一个固定长度为M的值。图表应该包含基数2的所有组合。因此,例如对于M = 3,我们有:“000”“001”“010”“011”“100”“101” “110”“111”,即2 ^ M = 8种组合。
然后我想以非常具体的方式将节点链接在一起。每个节点都有两个输出边,值为“0”和“1”。例如,“000”将与边缘1连接到“001”,因为如果我删除右边的第一个数字并在末尾添加边缘值,我将以“001”结束。类似地,“111”被边缘“0”连接到“110”。
需要帮助。请注意,节点不一定必须用String表示,但这是我实现的方式,但它似乎运行得太慢。这里重要的是节点连接正确。
我已经通过将节点存储在HashTable中然后循环整个集合以将节点连接到彼此来解决这个问题。
建议赞赏如何使这更聪明。
答案 0 :(得分:2)
更新:
所以你基本上想要一个数字并从中得到两个数字
现在这个号码连接到上述这两个号码。
这是我的理解。
以下是我编写的用于计算此类图表的一些代码:
import pygraphviz as pgv
# length of binary codes
for n in range(3,8):
def b(x):
return str(bin(x))[2:].zfill(n)
G=pgv.AGraph(directed=True)
for i in range(1,2**n):
for j in range(1,2**n):
I = b(i)
J = b(j)
# we make room for another bit (the zero bit)
i1 = i << 1
# we unset the first bit
i1 = i1 & ~(1<<(n+1))
# we copy the previous result
i2 = i1
# we set the last bit
i2 = i2 | 1
if i1 == j :
G.add_edge(I,J,label="0")
elif i2 == j:
G.add_edge(I,J,label="1")
G.layout(prog='dot')
G.draw("graph"+str(n)+".png")
n = 3的
N = 4
N = 5
N = 6
P.S。最初我尝试使用networkx,但很快就意识到pygraphviz更易于使用。
答案 1 :(得分:0)
鉴于您的顶点实际上是数字,为什么不使用邻接矩阵,其中列和行号代表顶点?