私は、C ++でかなり大きく、まばらで、無向のグラフ構造を表現することを計画しています。これは10,000以上の頂点のオーダーであり、各頂点の次数は約10です。
グラフを隣接行列またはリストとして表現するための背景をいくつか読んだことがありますが、そのうちの8つは私がやりたいことに適しているようです。私のシナリオでは:
- グラフの各エッジには、いくつかのプロパティ(数値)が付加されます
- 最初のグラフ作成後、エッジは削除できますが、作成されることはありません
- 頂点が作成または削除されることはありません
- グラフの主なクエリ操作は、エッジEを検索し、他のどのエッジがそれに接続されているかを調べます。これは、Eの両端の頂点に接続されているエッジを見つけることと同じです。
隣接行列が不適切に見えるのは、この最後のポイントです。私が見る限り、各クエリには2 * Nの操作が必要です。ここで、Nはグラフ内のノードの数です。
隣接リストは必要な操作を減らすと思いますが、各エッジに含まれているパラメーターのため、つまり隣接リストがそれぞれを格納しているため、不適切と思われます。
これらのクエリ操作がより速くなり、各エッジをそのパラメーターとともに保存できるように、データを保存するためのより良い方法はありますか?私はそれを行うための正しい方法ではない何かを実装し始めたくありません。