线性地层是最好的分拣生产吗?

时间:2014-02-24 14:36:05

标签: sorting

通常考虑一种排序方法产品线性排序的产品(例如“1,7,8,13,109 ......”),它会消耗O(N)进行查询。

为什么不按非线性顺序排序,使用O(logN)或其他东西通过迭代或牛顿方法等来查找元素?制作如此高阶排序的结构是否很昂贵?

简而言之,通过查找ax^2 + bx + c = 0的根来排序允许访问的结果是否可能? (相比之下,通常它会找到ax + c = 0的根。)例如,我们将x1 = 1, x2 = 2作为二次方程的根,只需插入xi(s)。然后可以使用更智能的方式进行查询。


我认为这些方面可能遇到困难:

  1. 预测数据可能相当困难。因此,我们不能构造一个通用公式来很好地描述以下数字(可能是哈希值)。

  2. 由于第一个难度,超出一定范围的数字可能会发散。谷歌的例子:the graph.从[-1,3]中得出的值非常大,以及执行原始公式的难度快速增加。

  3. 实际上相当于hash ,它会创建一个包含值的表。生产规则是一个公式。

  4. 由于算法本身的复杂性,执行“更智能”的查询可能会很昂贵

1 个答案:

答案 0 :(得分:0)

利用已知统计分布的智能方案通常更快一些常数。但是,它仍将它们保持在O(log N),这与普通的二进制搜索相同。原因在于,在每个步骤中,它们通常缩小元素的范围以通过因子R> 1来搜​​索。 2,对于简单的二进制搜索,只是R = 2。但是您需要使用log(N)/ log(R)步骤将其缩小到恰好一个元素。

现在这是否是净胜利取决于log(R)与每一步所需的工作。简单的比较(二进制搜索)需要几个周期。一旦你需要比+ - * /(比如explog)更复杂的东西来预测下一个元素的位置,那么需要更少步骤的利润就会消失。

总而言之:使用二进制搜索是因为对于许多现实世界的发行版而言,每一步都是有效的。