Я пытаюсь создать граф, у вершины которого есть три атрибута, и если есть совпадение в любом из атрибутов, то между этими двумя вершинами будет добавлено ребро. Код, который я написал здесь, имеет сложность 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', имеющие совпадающее значение панорамирования.