グラフの実装方法はhttps://www.python.org/doc/essays/graphs/です。問題は、あるノードへのすべての着信アークをできるだけ速く見つける方法を混乱させることです。この単純なグラフで、あるノードの到来するアーク/エッジをすべて見つける方法を教えてください。
graph = {'A': ['B', 'C'],
'B': ['C', 'D'],
'C': ['D'],
'D': ['C'],
'E': ['F'],
'F': ['C']}
ノードCには、ノードA、B、D、Fからのアークがあることがわかります。問題は、どのようにしてノードA、B、D、Fをキーの辞書の各リストに入れずにチェックして、Cが含まれているかを調べる方法です。これを行う方法や効率的なグラフとメソッドがありますか?誰かが正しい方向に私を向けることができます、事前に感謝します。
問題の正しいデータ構造は、隣接リストではなく、*隣接行列*です。私は有向グラフを「入射行列」といいます。特定のアークをチェックする方が効率的ですが、スペースが効率的ではありません。特にスパースグラフの方が効率的です。 –
@machineyearningあなたは、Pythonの隣接行列を教えるサイトを知っていますか、それを共有できる実装ですか?それは本当に助けになるでしょう、事前に感謝します。また、隣接行列との違いは隣接リストと何が違うのでしょうか? – DST
隣接リストを 'set'データ構造として実装することで、パフォーマンスを向上させることもできます。次に、あなたが '' pointsToTo''のようなset membershipをgraph.items()内のpointsFrom、pointsToのようにチェックすることができます。これは、nをグラフのノード数とすると、order-nのパフォーマンスが得られます。 –