2

ツリーをリストに視覚的にマッピングする「TreeView」を実装したいと思います。リストのインデントは、マッピングされたノードの深さによって提供されます。私の具体的な問題は、2レベルの深さのツリーで、最初のレベルに100 000ノードがあり、各ノードには20ノードが含まれています(つまり、100 000フォルダー、それぞれに20ファイルが含まれています)。現在、ツリーからのマッピングをで維持していますstd::map。これは、完全に拡張されたツリー("TreeView"で2000 000の潜在的に表示されるアイテム)の場合、次のようになります。

key  value
0    pointer to parent node 0
20   pointer to parent node 1
40   pointer to parent node 2
...

これは、リストアイテム[0、19]が親ノード0によってカバーされ、[20、39]が親ノード1によってカバーされることを意味します...ノード0を折りたたむ場合、マッピングを更新する必要があります。

key  value
0    pointer to parent node 0
1    pointer to parent node 1
21   pointer to parent node 2
...

ここで、リスト項目0は親ノード0でカバーされ、リスト項目[1、20]は親ノード1でカバーされます...つまり、std::mapノード0を折りたたむときに99000値のキーを更新する必要があります。これは99000を意味します。他の方法ではキーを更新できないため、マップへの削除と挿入。どのデータ構造やコンテナを使用すると、マッピングツリー->リストをより少ない労力で更新できますか?

4

1 に答える 1

2

これは、拡張ツリーを使用できるもののように見えます。これらのキーの更新には対数時間がかかり、キーによるルックアップも対数時間になります。

残念ながら、ここで完全な答えを書くことはできませんが、この記事がお役に立てば幸いです:http: //je4d.blogspot.co.uk/2013/01/boostintrusive-annotated-trees-part -1.html

于 2013-03-27T08:49:12.153 に答える