给定两个大小为A, B
和n
的已排序数组m
。我正在寻找合并这两个数组的最差比较数。
1)n + m-1
2)max(n,m)
3)min(m,n)
4)mn
我知道这不是一个好问题,因为合并算法没有提到,但我认为,正常的合并排序算法 - 合并步骤通常应用n + m -1
比较,其中一个列表的大小为n,并且其他清单的大小为m。使用此算法是组合两个排序列表的最简单方法。任何专家都可以帮助我,我选择(1)是对的吗?
答案 0 :(得分:2)
可以从documentation:
轻松找到复杂性
最多std :: distance(first1,last1)+ std :: distance(first2,last2) - 1次比较。
它是第1号。 (是的,它假设标准委员会的复杂性正确,但这不是一个延伸。)
选项4显然是假的,因为n + m - 1比n * m增长慢,所以我们已经有了更好的估计。
这个反例的选项3是错误的:
[4], [1, 2, 6, 7]
需要至少两次比较。选项2反例:
[1,6], [2,5]
需要进行3次比较:
1 < 2?, 6 < 2?, 6 < 5?
答案 1 :(得分:2)
假设m&lt; n,至少m次比较,最多n + m-1次比较(最差情况)。因此,假设最小列表的所有元素都是第一个,则最小比较数是min(n,m)。假设最简单的意思是最好的情况,那么答案3就是正确的答案。答案1对于最坏的情况是正确的。