繁体   English   中英

快速插入大量节点的最佳自平衡 BST

[英]Best self-balancing BST for quick insertion of a large number of nodes

我已经能够通过几个来源找到关于几个自平衡BST的详细信息,但是我没有找到任何好的描述来详细说明哪个最适合在不同情况下使用(或者如果它真的无关紧要)。

我想要一个最适合存储超过一千万个节点的BST 节点的插入顺序基本上是随机的,我永远不需要删除节点,所以插入时间是唯一需要优化的。

我打算用它来存储以前访问过的益智游戏中的游戏状态,以便我可以快速检查是否已经遇到过以前的配置。

对于大量插入的应用,红黑比 AVL 更好。 如果您预见到相对统一的查找,那么红黑就是要走的路。 如果您预见到相对不平衡的查找,其中最近查看的元素更有可能被再次查看,那么您想要使用splay 树

为什么要使用BST 根据您的描述,字典也能正常工作,甚至更好。

使用BST的唯一原因是如果您想按键顺序列出容器的内容。 听起来您当然不想这样做,在这种情况下,请使用哈希表。 O(1)插入和搜索,不用担心删除,还有什么更好的?

我最熟悉的两个自平衡BST是 red-black 和AVL ,所以我不能肯定地说是否有其他解决方案更好,但我记得,与 red-black 相比,插入速度更快,检索速度更慢到AVL

因此,如果插入的优先级高于检索,则红黑可能是更好的解决方案。

[哈希表有] O(1) 插入和搜索

我认为这是错误的。

首先,如果将键空间限制为有限,则可以将元素存储在数组中并进行 O(1) 线性扫描。 或者您可以对数组进行随机排序,然后在 O(1) 预期时间内进行线性扫描。 当东西是有限的时,东西很容易是 O(1)。

因此,假设您的哈希表将存储任意位串; 没关系,只要有一组无限的键,每个键都是有限的。 然后,您必须读取任何查询和插入输入的所有位,否则我将 y0 插入空散列中并查询 y1,其中 y0 和 y1 在您没有看到的单个位位置不同。

但是假设密钥长度不是参数。 如果您的插入和搜索取O(1),在特定的哈希花费O(1)时间,这意味着,你只能看一个有限的数量从散列函数(从中有可能只是有限的输出输出的,授予)。

这意味着对于有限多个存储桶,必须有一组无限的字符串,它们都具有相同的哈希值。 假设我插入了很多,即 ω(1),然后开始查询。 这意味着您的哈希表必须依靠其他一些 O(1) 插入/搜索机制来回答我的查询。 哪一个,为什么不直接使用它?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM