1

特定のレベルで最大 1000 個のノードを持つツリー データ構造があります (最大深さは 8 ~ 9 レベル)。

このツリー全体のバージョンを維持する必要があります。バージョンは、何らかの処理が行われた後に作成されます。これらのバージョン間で、ノード内のデータが変更される場合があります (100 程度以下)。

今のところ、新しいバージョンごとにツリー全体のクローンを作成していましたが、いくつかのバージョンを使用すると、スペースの消費量が膨大になります。変更を追跡する必要があるため、以前のバージョンの記録を完全に削除することはできません。

これらのバージョンをデータベースに保存する最適な方法は何ですか? (データベースでない場合は、別の方法があります)。

4

5 に答える 5

3

これはそれほど単純な問題ではありませんが、解決済みの問題です。一般に、履歴を記憶するデータ構造は永続データ構造と呼ばれます。

リンクされたウィキペディアのページには、永続的なツリーの例があります。

パスをコピーする方法は、実装が非常に簡単ですが、パフォーマンスが十分ではありません。

于 2013-11-12T07:00:41.717 に答える
0

ツリーの以前のバージョンが重要であり、スペースが主な関心事であるため、あるバージョンから別のバージョンへのツリーが完全に異なるわけではないと仮定すると、ツリー間の違いのみを保存できます。それを行う方法は完全にあなた次第です:-ツリーのイン/プレ/ポストオーダー解析を実行し(バイナリであると仮定)、他の場所との違いの場所から取得するロジックを考え出すことができます-または使用相違点のみを保存するためのリンクされたリスト + トレを再構築するためのいくつかのロジック

于 2013-11-12T11:41:18.963 に答える