Algorithm 有序节点树上的搜索代价

Algorithm 有序节点树上的搜索代价,algorithm,sorting,Algorithm,Sorting,上下文:我正在构建一个FoundationDB,我正在考虑先使用哪个键 假设我们有一组元素: {AP,AQ,AR,BP,BQ,BR} 我们想用它建一棵树。一种方法是先按第一个字符进行分组,然后按第二个字符进行分组 root +-----+------+ + + A B +----+----+ +----+----+ | | | | | | + + + +

上下文:我正在构建一个FoundationDB,我正在考虑先使用哪个键

假设我们有一组元素:

{AP,AQ,AR,BP,BQ,BR}
我们想用它建一棵树。一种方法是先按第一个字符进行分组,然后按第二个字符进行分组

          root
     +-----+------+
     +            +
     A            B
+----+----+  +----+----+
|    |    |  |    |    |
+    +    +  +    +    +
P    Q    R  P    Q    R
另一种可能的方法是先按第二个字符分组,然后按第一个字符分组,获得:

           root
   +--------+--------+
   +        +        +
   P        Q        R
+--+-+   +--+--+   +-+--+
+    +   +     +   +    +
A    B   A     B   A    B

假设字符串的概率分布是一致的,哪一个导致搜索时间最快?一般来说,最好在顶层或树上或底层有大量分支?

第一种解决方案将导致从2个选项中选择一个,然后从3个选项中选择一个,而第二种解决方案将首先从三个选项中选择一个,然后从两个选项中选择一个。理论上两者应该大致相同


编辑:根据您的评论。如果你有两个层次,其中选择的数量明显不同,比如30和1000000,我建议你将30个选项放在较高的层次上,然后将1000000个选项放在较低的层次上。我相信在类似的情况下,缓存会加快较低级别的速度

我也这么认为,但因为在我的例子中,数据空间会更大,第一个键有30种可能性,第二个键大约有100万种可能性,这大概会有所不同:)这就是为什么我想得到一些他们相等的证明behavior@kaharas如果两套的尺寸相差太大,我建议您先使用较小的一套(即有30种可能性的一套)。不同之处在于,如果第二层上的1000000个可能性是连续的,那么缓存将更有效。