アプリケーションのユーザー別に分類された項目 (下の青いノード) のリストがあります。カテゴリ自体をグループ化して分類することができます。
結果の構造は有向非巡回グラフ (DAG)として表すことができます。項目はグラフのトポロジの下部にあるシンクであり、上部のカテゴリはソースです。一部のカテゴリは適切に定義されている可能性がありますが、多くはユーザー定義であり、非常に厄介な場合があることに注意してください。
例:
(出典: theuprightape.net )
その構造で、次の操作を実行したいと思います。
- 特定のノードの下にあるすべてのアイテム (シンク) を見つける (ヨーロッパのすべてのアイテム)
- n 個のノードのセット (example.com から SMTP 経由で送信されたすべてのアイテム) のすべてを通過するすべてのパス (存在する場合) を検索します。
- 一連のノードのすべての下にあるすべてのノードを見つけます (交差: 茶色い食べ物)
1 つ目は非常に簡単に見えます。ノードから開始し、考えられるすべてのパスをたどって最下部にアイテムを集めます。しかし、より速いアプローチはありますか?すでに通過したノードを覚えておくと、おそらく不要な繰り返しを避けるのに役立ちますが、さらに最適化はありますか?
2つ目はどうすればいいですか?最初のステップは、セット内の各ノードの高さを決定し、開始するノードを決定してから、セットの残りを含むその下のすべてのパスを見つけることです。しかし、これは最善の (または良い) アプローチですか?
ウィキペディアにリストされているグラフ トラバーサル アルゴリズムはすべて、特定のノードを見つけること、または 2 つのノード間の最短または最も効果的なルートを見つけることに関係しているようです。どちらも私が望んでいるものではないと思いますか、それともこれが私の問題にどのように適用されるかわかりませんでしたか? 他にどこを読むべきですか?