最差合并两个排序阵列的比较数量?

时间:2015-03-13 19:39:45

标签: c++ algorithm sorting data-structures merge

给定两个大小为A, Bn的已排序数组m。我正在寻找合并这两个数组的最差比较数。

1)n + m-1

2)max(n,m)

3)min(m,n)

4)mn

我知道这不是一个好问题,因为合并算法没有提到,但我认为,正常的合并排序算法 - 合并步骤通常应用n + m -1比较,其中一个列表的大小为n,并且其他清单的大小为m。使用此算法是组合两个排序列表的最简单方法。任何专家都可以帮助我,我选择(1)是对的吗?

2 个答案:

答案 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对于最坏的情况是正确的。