-3

数百万のノードを持つことができるグラフを実装したいとしますが、ノード数は0から百万に増加します。百万のマークに達するかどうかは不明です。また、数百万のノードに達する可能性があります。

隣接リストがこれに使用されることは知っていますが、一般的な隣接リストには、リンクリストへのポインタを維持するデータ構造があります。

次に、隣接リストへのポインタを格納するためにどのデータ構造を使用する必要がありますか?

たとえば、Facebookを例にとると、何百万ものユーザーがいます。各ユーザーがノードを表すとします。これで、すべてのユーザーが非常に大きな単一のグラフのノードとして表され、それに対して操作を実行したい場合、どのように保存しますか?

4

1 に答える 1

2

それらの背後にある基本を知っているなら、それはそれほど難しいことではないはずです。

通常、リンクリストを作成するためのオプションのポインタを使用して、キーと値を含む「バケット」と呼ばれる配列を作成します。

キーを使用してハッシュテーブルにアクセスする場合、整数を返すカスタムハッシュ関数を使用してキーを処理します。次に、結果のモジュラスを取得します。これは、配列インデックスまたは「バケット」の場所です。次に、ハッシュされていないキーと保存されているキーを確認し、一致する場合は適切な場所を見つけました。

そうしないと、「衝突」が発生し、リンクリストをクロールして、一致するまでキーを比較する必要があります。(一部の実装では、衝突にリンクリストの代わりにバイナリツリーを使用することに注意してください)。

この高速ハッシュテーブルの実装を確認してください。

http://attractivechaos.awardspace.com/khash.h.html

于 2012-12-15T04:47:26.923 に答える