Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 要存储百万长度的百万密钥,红黑树和基数树哪个更好?_Java_Red Black Tree_Radix Tree - Fatal编程技术网

Java 要存储百万长度的百万密钥,红黑树和基数树哪个更好?

Java 要存储百万长度的百万密钥,红黑树和基数树哪个更好?,java,red-black-tree,radix-tree,Java,Red Black Tree,Radix Tree,我想存储多个长度为百万的键(字符串)及其关联对象。因此,我必须非常频繁地在数据结构(rbtree或基数树)中插入,并且与插入相比,搜索的时间非常少。任何推荐都将不胜感激。多谢各位 既然插入是您最关心的问题,那么您应该使用红黑树,因为它的插入时间复杂度在输入大小上是对数的,即O(k*logn),其中log是以2为底的对数,k是每个输入的大小或长度,n是输入量。基数树的插入在每个输入的大小k和输入的数量n上是线性的,即O(k*n),这比红黑树的插入更差,除非许多字符串键共享足够长的前缀,以便在n的次

我想存储多个长度为百万的键(字符串)及其关联对象。因此,我必须非常频繁地在数据结构(rbtree或基数树)中插入,并且与插入相比,搜索的时间非常少。任何推荐都将不胜感激。多谢各位

既然插入是您最关心的问题,那么您应该使用红黑树,因为它的插入时间复杂度在输入大小上是对数的,即
O(k*logn)
,其中
log
是以2为底的对数,
k
是每个输入的大小或长度,
n
是输入量。基数树的插入在每个输入的大小
k
和输入的数量
n
上是线性的,即
O(k*n)
,这比红黑树的插入更差,除非许多字符串键共享足够长的前缀,以便在
n
的次对数表达式中转换
n

,否则不会出现这种情况,红黑的插入时间将为O(k log n)其中k是每个节点中密钥的长度,平均长度为一百万,基数树的最坏情况为O(k)。@AnuragSingla同样的参数可以用来表示基数树中的复杂性为O(kn),其中n是输入量。这最终取决于询问者的具体情况。还要注意的是,他/她将不得不搜索树,即使它的次数比插入树的次数少。基数树的复杂度将如何为O(kn)。你能再说一遍吗?我已经编辑了这个问题,要插入的密钥现在也以百万计。谢谢。@AnuragSingla假设您有n个字符串要存储在基数树中。基数树(也称为prefix tree/trie)的主要特征是,它使用字符串中的公共前缀(以及通过迭代移除这些前缀获得的子字符串)来执行插入,如果在字符串中找不到公共前缀,则必须执行n次插入。常见的前缀是real和remote中的
re
。现在有更清晰的图片了吗?@AnuragSingla Wikipedia在上有一篇关于基数树的介绍性文章,尽管它在运行时分析和实现细节方面有一些遗漏,但它有一个很好的图片,其中有一个示例,您将认识到常用前缀的重要性。