Algorithm 合适的树数据结构
哪种树数据结构最适合为层次(包含关系)内容建模。我的语言有点不正式,因为我在这些方面没有太多的理论背景Algorithm 合适的树数据结构,algorithm,data-structures,tree,go,binary-tree,Algorithm,Data Structures,Tree,Go,Binary Tree,哪种树数据结构最适合为层次(包含关系)内容建模。我的语言有点不正式,因为我在这些方面没有太多的理论背景 父节点可以有多个子节点 唯一父项 树结构很少改变,操作系统可以重新创建而不是添加/重新排列节点 双向遍历 主要感兴趣的是,查找父节点,查找子节点,查找具有唯一id的节点 每个节点都有一个唯一的id 总共可能只有数百个节点,因此性能可能不会有太大影响 持久性可能很好,但不是必需的,因为我计划在从DB读取数据后在内存中使用它 我选择的语言是go(golang),所以可用的库是有限的。请给出建议,但
请告知所需的任何其他信息。由于只有数百个节点,只需将结构与您描述的相同即可
- 每个节点都有对父节点的唯一引用。
- 每个节点都有一个子节点列表。
- 每个节点都有一个id
- 存在来自id-->节点的(外部)映射。甚至可能没有必要。
如果没有地图,可以通过遍历整个树来查找id。或者,您可以使用地图快速查找节点 添加节点很容易,因为每个节点中都有一个列表。重新排列也很容易,因为您可以自由地从子节点列表中添加/删除并重新分配父节点
我是从语言不可知论的角度来回答这个问题的。这是一个没有任何限制的树结构,所以实现并没有那么流行。我认为B-tree是满足您需求的一种方式。
第1,2,3点:B-树本质上支持这一点。(多个子项,唯一的父项,允许插入/删除元素
第4点,第5点:默认情况下,每个节点的子节点都有指针。此外,您可以为每个节点维护父节点的指针。在这些指针的帮助下,您可以使用BFS/DFS实现搜索/遍历操作
Pomit 6:如果不允许重复记录,则取决于插入方法的实现
Pont 7,8:这不是一个问题,因为您提到您只有数百条记录。尽管B-树对于外部磁盘存储也是相当好的数据结构。
看看GoLLRB(您列出的第一个包).我和其他许多人一样,经常使用它,而且它很好。如果它能处理你需要的一切,那么我认为你应该使用它。