【发布时间】:2016-09-14 03:12:18
【问题描述】:
让A 是一个由n 整数组成的数组,这些整数已经按升序排序。
设B 为未排序的m 整数数组。
我们知道A 中的整数集与B 中的整数集不相交。描述一种生成数组的算法,其中所有n + m 整数都按升序排序。您的算法应在O(n + m log m) 时间终止。
我知道这应该类似于合并排序,但 O(n+mlogm) 中的 n+m 让我失望。谁能解释一下?
【问题讨论】:
让A 是一个由n 整数组成的数组,这些整数已经按升序排序。
设B 为未排序的m 整数数组。
我们知道A 中的整数集与B 中的整数集不相交。描述一种生成数组的算法,其中所有n + m 整数都按升序排序。您的算法应在O(n + m log m) 时间终止。
我知道这应该类似于合并排序,但 O(n+mlogm) 中的 n+m 让我失望。谁能解释一下?
【问题讨论】:
我认为你应该先对 B 数组进行排序:O(mlogm)
之后你有两个排序的数组,你需要合并它们,这将需要:O(n+m)
现在整个过程是O(mlogm + (n+m) ),等于O(mlogm)。
【讨论】:
n和m之间的关系,那么我猜总复杂度实际上应该是O(mlogm+n)。