Merge 合并两个小序列-算法
证明最多进行5次比较就足以合并长度为2和5的两个排序序列。假设输入数组是Merge 合并两个小序列-算法,merge,proof,array-algorithms,Merge,Proof,Array Algorithms,证明最多进行5次比较就足以合并长度为2和5的两个排序序列。假设输入数组是[a b c d e]和[x y] 我们首先尝试将x插入到较大的数组中。我们进行二进制搜索,但我们有一个机会:我们不是从中间开始而是稍微向左:我们检查 x< b>代码> < /p> 如果幸运的话,x落在数组的左侧(较小)部分,我们可以比较x
[a b c d e]
和[x y]
我们首先尝试将x
插入到较大的数组中。我们进行二进制搜索,但我们有一个机会:我们不是从中间开始而是稍微向左:我们检查<代码> x< b>代码> < /p>
- 如果幸运的话,
落在数组的左侧(较小)部分,我们可以比较x
来确定结果应该以x
还是xa
开始。然后,我们为ax
剩下3个比较,这足以进行二进制搜索y
- 如果我们运气不好,
将落在数组的右侧(较大)部分。换句话说,x
应该在x
中。我们通过检查cde
继续二进制搜索x
- 如果幸运的话,这是错误的,因为我们知道结果以
开始,然后我们可以检查abcd
和x
来计算最后三个元素的顺序y
- 如果这是真的,我们检查
以确定序列是否应该以x
或abcx
开头。然后我们剩下2个比较,这足以对abx
进行二进制搜索,因为我们知道它应该在y
的右侧x
- 如果幸运的话,这是错误的,因为我们知道结果以
{ a ≤ b ≤ c ≤ d ≤ e ∧ x ≤ y }
if (x < b) {
{ a ≤ b ≤ c ≤ d ≤ e ∧ x ≤ y ∧ x < b }
if (x < a) {
...
} else {
...
}
} else {
{ a ≤ b ≤ c ≤ d ≤ e ∧ x ≤ y ∧ b ≤ x }
if (x < d) {
...
} else {
...
}
}
{a≤ B≤ C≤ D≤ E∧ x≤ y}
if(x
谢谢。我的一位朋友(一位来自阿根廷的博士生)提出了完全相同的解决方案。不客气。一位来自瑞典的(前)博士生向他致意;-)Offtop:这是一个来自v的BSc级真实考试任务。我的国家有一所很好的大学。我想知道他们是如何在90分钟内解决像这样的5项任务的。老实说,我认为它不太适合考试。我讨厌有谜语/谜语类问题的考试。