哪一个会更快?

时间:2011-01-07 16:58:22

标签: algorithm complexity-theory

假设我有一个数组,大小为40.我想要的元素位于第38位。 有一个简单的循环,它将需要38步? 但是,有2个循环,并行运行,变量,“找到” 设置为false,并在找到元素时更改为true。

第一个循环,将从索引0开始 第二个循环将从索引40开始。

所以基本上只需4步就可以了吗?找到元素。最糟糕的情况是元素是否在数组的中间。正确?

4 个答案:

答案 0 :(得分:2)

这取决于在两个线程之间同步状态所需的工作量。

如果需要0工作,那么这将比直通算法快50%。

另一方面,如果它需要比X更多的工作,它将开始变慢(这很可能是这种情况)。

从算法的角度来看,我认为这不是你想要的。即使是2个线程仍然是O(n)运行时。您可能希望对数据进行排序(n log n),然后执行二进制搜索以获取数据。特别是你可以对它进行一次排序并将其用于许多搜索......

答案 1 :(得分:2)

如果你在谈论算法的复杂性,这仍然是一个线性搜索。仅仅因为你在每次迭代中搜索两个元素并没有改变算法是O(n)的事实。

就您将看到的实际性能而言,此算法可能比使用单个处理器的线性搜索慢。由于搜索中每个元素的工作量非常少,因此算法将受内存限制,因此使用多个处理器没有任何好处。此外,由于您在两个位置进行搜索,因此该算法不会像缓存一样高效。然后,正如bwawok指出的那样,在同步中会有很多时间丢失。

答案 2 :(得分:0)

当您并行运行时,您将CPU功率分成两个+创建一些开销。如果你的意思是你正在运行搜索,多核机器,使用你提出的算法,那么更糟糕的情况是20步。你没有在复杂性类中做任何改变。那么你提到的那4个步骤来自哪里?

答案 3 :(得分:0)

平均而言在运行时没有什么不同。

例如,如果您正在搜索10中的项目。
原始算法将按以下搜索顺序处理:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10

最糟糕的情况是最后一项(采取10个步骤)。

第二种算法将按以下搜索顺序处理:

 1, 3, 5, 7, 9, 10, 8, 6, 4, 2

在这种情况下最糟糕的情况是第6项(采取10个步骤)。

在某些情况下,算法1更快 在某些情况下,算法2更快。

两者同时花费平均 - O(n)。


在旁注中,将它与二进制搜索顺序(在排序数组上)进行比较是很有趣的。

4, 3, 2, 3, 1, 4, 3, 2, 4, 3

最多需要4个步骤才能完成。