Подключите вершину, если какие-либо атрибуты узлов совпадают с использованием networkx - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь создать граф, у вершины которого есть три атрибута, и если есть совпадение в любом из атрибутов, то между этими двумя вершинами будет добавлено ребро. Код, который я написал здесь, имеет сложность O (n ^ 2). Я хотел уменьшить его, так как мне нужно ускорить выполнение на реальной аналогичной графической задаче с 1 кр. вершина.

import networkx as nx

G = nx.Graph()
G.add_nodes_from([('a', {'cluster': 4, 'mobile': 1, 'pan': 1})])
G.add_nodes_from([('b', {'cluster': 6, 'mobile': 3, 'pan': 1})])
G.add_nodes_from([('c', {'cluster': 2, 'mobile': 2, 'pan': 3})])

for node_r, attributes_r in G.nodes(data=True):
    for node, attributes in G.nodes(data=True):
        if node != node_r:
            if attributes_r["mobile"] == attributes["mobile"] or \
                attributes_r["pan"] == attributes["pan"] or \
                attributes_r["cluster"] == attributes["cluster"]:
                G.add_edges_from([(node_r, node)])

здесь результат будет ('a', 'b') и ('c') два разных подграфа или кластера. как 'a' и 'b', имеющие совпадающее значение панорамирования.

...