证明最多进行5次比较就足以合并两个长度为2和5的排序序列。
答案 0 :(得分:1)
假设输入数组为[a b c d e]
和[x y]
我们首先尝试将x
插入较大的数组中。我们进行二分搜索,但我们抓住机会:我们不是从中间开始,而是从左到右:我们检查x < b
。
如果我们幸运 x
落在数组的左侧(较小)部分,我们可以比较x < a
以确定是否结果应以x a
或a x
开头。然后我们对y
进行3次比较,这足以进行二分搜索。
如果我们不幸 x
落在数组的右侧(较大)部分。换句话说,x
应该在c d e
中。我们通过检查x < d
继续二进制搜索。
如果我们幸运这是错误的,因为我们知道结果以a b c d
开头,然后我们可以检查x < e
和{ {1}}弄清楚最后三个元素的顺序。
如果是这样,我们会检查y < e
以确定序列应该以{{1}}还是x < c
开头。然后我们进行了2次比较,这足以对a b c x
进行二分搜索,因为我们知道它应该在a b x
的右侧。
这当然只是一个解决方案的大纲,而不是一个正式的证明。但是,它可以使用Hoare逻辑轻松转换为正式证明。它看起来如下:
y