わかりました、この質問はあなたの側で少し読む必要があります. これを短くシンプルにしようと思います。
各ノードに関連付けられたデータを持つツリー (バイナリ ツリーではなく、単なるツリー) があります (バイナリ データ、それらが何であるかわからない、そしてそれらがどれくらいの長さかわかりません)
ツリーの各ノードには、ツリーでの表示方法とは関係のないインデックスもあります。短くするために、次のようになります。
インデックス番号は、ユーザーがナビゲートするツリーの順序を表し、複製することはできません。
この構造をディスク上のファイルに保存する必要があります。
私の問題は、ツリーのロードと作業をできるだけ簡単にする柔軟なディスク格納フォーマットをどのように設計するかです。
実際、ユーザーは許可されるべきです
- 要素に子ブロックを作成します (これは簡単なはずです。インデックスの重複を避けるように注意してファイルにデータを追加するだけで十分です)。
- 子を削除します (ユーザーに「このノードのすべての子も削除しますか? または、その子を親に追加する必要がありますか?」というプロンプトを表示する必要があります)。これに関するトリッキーな部分は、ノードを削除するとインデックスも解放される可能性があり、別のノードを追加するときにユーザーにそのインデックスを再度使用させることはできません (または、ユーザーが設定した順序が台無しになる可能性があります)。更新する必要があります。木全体!
- インデックスを別のものと交換する
私は C++ と Qt を使用していますが、今ではこのような多くのフィールドを持つ多くの構造を考えています
struct dataToBeStoredInTheFile
{
long data_size;
byte *data; //... the data here
int index;
int number_of_children;
int *children_indices; // ... array of integers
}
これには、各ノードをそれぞれのインデックスで識別するという利点がありますが、2 つのノード間でインデックスを交換したり、ノードを削除して他のノードのインデックスを更新したりする場合は、すべてのノードとそのすべての「children_indices」配列をトラバースする必要があるため、非常に遅くなります。
各ノードを識別するために「ハッシュ」のようなものを使用すると、より柔軟になりますか? ツリー内の位置用とユーザーのインデックス用の 2 つのインデックスを使用する必要がありますか? データを保存するためのより良いアイデアがあれば、大歓迎です