在整数列表中找到'坑'。快速

时间:2015-03-11 21:57:16

标签: python performance divide-and-conquer

我试图编写一个程序来查找' pits'在列表中 整数。

  

凹坑是任何整数x,其中x小于或等于整数   紧接在它之前和之后。如果整数在开头   或者列表的结尾仅在内侧进行比较。

For example in: 
    [2,1,3] 1 is a pit.
    [1,1,1] all elements are pits.
    [4,3,4,3,4] the elements at 1 and 3 are pits.

我知道如何通过线性方法和行走来解决这个问题 但是我很好奇如何应用分而治之的 相对快速地做到这一点的技巧。我很缺乏经验 我不确定从哪里开始,我觉得类似于二进制文件 树可以应用吗?

如果相关的我在Python 3工作。 谢谢你的时间:)。

1 个答案:

答案 0 :(得分:2)

如果没有关于列表中值分布的任何其他信息,则无法实现小于O(x)的任何算法复杂度,其中x是列表中元素的数量。

逻辑上,如果数据集是随机的,例如布朗噪声,则坑可能发生在任何地方,需要完整的1:1采样频率才能正确找到每个坑。

即使只想找到序列中绝对最低的凹坑,也不可能在亚线性时间内实现,而不会影响结果的正确性。

可以考虑优化,例如仅仅并行化或跳过与坑相邻的值,但整体复杂性将保持不变。