ファイルへのトライの永続化 - C
-
24-09-2019 - |
質問
私は持っています trie
これを文字列処理に使用しています。以下を生成する単純なコンパイラがあります。 trie
あるデータから。生成されると、私の trie
実行時には変わりません。
トライをファイルに保存し、効果的にロードできるアプローチを探しています。見てきました sqllite
彼らがどのように持続しているかを理解する b-tree
ただし、ファイル形式は少し高度なようで、すべてが必要なわけではないかもしれません。
誰かが持続して読むためのアイデアを提供してくれると助かります。 trie
. 。Cを使ってプログラミングをしています。
他のヒント
は、メモリにあなたの全体のデータ構造の適合を想定すると、再帰的なシリアル化のアプローチが最も簡単です。それは彼らの方法をコピーしようとする行き過ぎおそらくあるので、メモリ内に収まらないデータ構造とSqllite作品ます。
ここでノードを読出し/書込みするための例の擬似コードです。これは、再帰的に/読書子ノードを書き込むことによって動作します。それは何もトライ固有を持っており、同様に他のツリーデータ構造のために働く必要があります。
void writeNode(Node *node)
write node data to file
write node.numOfChildren to file
for each child:
writeNode(child)
Node *readNode()
Node *node = allocateNewNode()
read node data from file
read node.numOfChildren from file
for (i=0; i<node.numOfChildren; i++)
Node *child = readNode()
node.addChild(child)
そして、あなたは自分のノード(root = 0)
を列挙し、そのインデックスのファイルにそれらのそれぞれを書き込むことができます。それらを書いている間、あなたはしかし、それらのノードのインデックスに他のノードへの参照を変更する必要があります。あなたは、おそらくもNULL
値が必要になります。あなたは-1
を使用することができます。また、(root = 1)
とを使用することができます(NULL = 0).
あなたはおそらくも小さいタイプであることを彼らのポインタフィールドを変更することで多少これらのノードを圧縮することができるようになります。
あなたのノードのサイズが異なる場合は、は、それはより複雑だ。