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/
任何人都可以帮助我吗?
答案 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)))。