我有trie
我正在使用它来进行字符串处理。我有一个简单的编译器,它从一些数据生成trie
。生成后,我的trie
在运行时不会更改。
我正在寻找一种方法,我可以将trie保存在文件中并有效加载它。我查看了sqllite
以了解它们是如何持久化b-tree
但是它们的文件格式看起来有点先进,我可能不需要所有这些。
如果有人可以提供一些想法来坚持并阅读trie
,那将会很有帮助。我正在使用C编程。
答案 0 :(得分:11)
我做了一些研究,并在网上发现了以下小宝石:
答案 1 :(得分:4)
假设您的整个数据结构适合内存,则递归序列化方法最简单。 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)
答案 2 :(得分:1)
如果所有节点的大小相同,那么您只需枚举节点(root = 0)
并将其中的每个节点写入其索引处的文件中。在编写它们时,您必须将对其他节点的引用更改为这些节点的索引。您可能还需要NULL
值。您可以使用-1
,也可以使用(root = 1)
和(NULL = 0).
您可能还可以通过将其指针字段更改为较小的类型来稍微压缩这些节点。
如果您的节点大小不同,则会更复杂。