列表和最大乘积的算法

时间:2015-02-14 18:59:07

标签: c++ algorithm math data-structures discrete-mathematics

a)序列X =(x1,x2,...,xn)为正实数,我们可以找到一个子序列,该子序列中的元素在O(n)中具有最大乘积。 / p>

b)使用O(n)阶的算法,我们可以合并m = sqrt(n)排序的序列,整个我们有n个元素。

为什么我的教授说这两句话是假的?

我读了(a)的O(n)算法: http://www.geeksforgeeks.org/maximum-product-subarray/

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

我不知道第一个陈述,但第二个陈述可以用以下论点说错:

由于存在sqrt(n)序列,每个n个元素,n * sqrt(n)中的元素总数。在最坏的情况下,您需要至少检查一次每个元素以将它们全部合并到一个列表中,这会使时间复杂度至少为n * sqrt(n)。如果每个序列中都有sqrt(n)个元素,请阅读编辑。

我对第一个不太确定,因为你提供的算法是针对整数的,而我们在你的情况下处理实数。

编辑:k个排序数组和n个总元素的合并算法将时间复杂度放在O(n * log(k))。即使每个序列都有sqrt(n)个元素(而不是每个n,如前一段所假设的那样),时间复杂度仍然是O(n *(log(sqrt(n)))。