搜索未排序数组中元素的最快方法

Aja*_*jai 17 algorithm visual-c++

我今天刚刚提出了这个问题,并且正在尝试一种比O(N)更好的解决方案,但却找不到一个.

通过SO搜索但无法找到这个问题.

有没有比O(n)更好的解决方案,还是一个无法解决的问题呢?

我最初的想法是二进制搜索,但是你需要再次对它进行排序> n.我还考虑过将quicksort应用于搜索元素可能属于的数组的一半,但我们再次进行n次比较,之后才丢弃另一半.我是正确的还是我在错误的方向上看待解决方案?

我正在尝试用c ++解决方案而没有javascript的IndexOf()或C#Array.find()或LINQ.

Muh*_*han 14

让它平行.将数组划分为块并并行搜索.复杂性将是O(n),但运行时间会少得多.实际上它与否成正比.你有的处理器.

您可以在C++中使用Parallel Patterns Library


Kei*_*all 6

你是对的,最快的方法是简单地遍历数组并寻找它.没有进一步的信息,你无能为力.

除非你有量子计算机,否则就是这样.

  • 我希望你不会用 C++ 编写量子计算机 (4认同)
  • 有时我想知道是否有人真正关注“O”的实际含义。-_- (2认同)

小智 5

如果您只搜索一个元素,只需遍历它即可。没有办法让它更快。

如果您要搜索多次,则值得对其进行索引(或排序,如果您愿意)并快速进行以下搜索 (log(n))。

  • 不可能。并非不可能,如“你不可能在空中跳 3 米”,因为这可能会在大量类固醇和弹性地板的情况下发生,但不可能,如 1 + 1 不能等于 3。 (2认同)