我将10^9
个密钥存储在BST中。
与让我们说有多个大小为10^6
的BST包含更大树的大块相比?搜索所有并行执行的内容。
我说的只是搜索性能,因为处理能力不是瓶颈。
答案 0 :(得分:0)
完全取决于您的密钥架构。
例如,假设你的钥匙是姓氏,平均分布在26个英文字母中。如果您正在寻找Pax Diablo
,则可以立即删除25/26的搜索空间,仅查看D
树(Diablo
)。
使用平衡二叉树,您必须平均遍历4.7
树级别(log226
关于 4.700439718
)。
所以,是的,如果前期操作的复杂性最小,可以更高效。在给定的示例中,基于名称的第一个字符和查找树的数组查找,选择二十六个tress之一为O(1)
。
如果您的注释表明密钥实际上是从零到十亿的数字,您仍然可以具有相同的效率,具体取决于数据分布。如果它们是平均分布的(甚至是接近的),你可以根据数字的前三位数保持一千种不同的树(从你的声明中你想要一百万棵树),并将初始搜索减少一个因子1000(约十个树级)。
当然,分发很重要。如果你的所有数字都少于一百万,那么它们都将在第一棵树中,这个方案将为你节省一切(实际上它会增加一个无用的第一步)。
答案 1 :(得分:0)
考虑使用哈希表。查找这么大的键集应该明显更快。与BST的对数相反,散列映射具有恒定的摊销搜索复杂度。
另外,当你在谈论一棵巨大的树时,也许你应该看看b+ trees。
我怀疑你尝试采取的方法比使用上述建议更有效。二叉树的深度增长非常缓慢(假设它是平衡的)。另一方面,当您生成输出时,您的方法同步将是麻烦的。