Algorithm 我如何用数学归纳法证明合并是有效的?

Algorithm 我如何用数学归纳法证明合并是有效的?,algorithm,math,Algorithm,Math,这是我的网站的链接 我只是想帮助合并的第一个问题,并将自己做第二部分。我理解归纳法的第一部分是证明算法在最小情况下是正确的,即如果X为空,另一部分是如果Y为空,但我不完全理解如何证明归纳法的第二步:显示合并在输入大小为k+1的情况下是正确的 我以前对方程做过归纳,从来没有对算法做过归纳 谢谢 第一个假设:您使用的合并例程将两个排序数组合并为一个排序数组。 第二个假设:合并例程终止 基本情况:n=1,1个元素的数组总是排序的 诱导性低血压:合并排序适用于n=1,2,…,k 感应阶跃:n=k+1 现

这是我的网站的链接

我只是想帮助合并的第一个问题,并将自己做第二部分。我理解归纳法的第一部分是证明算法在最小情况下是正确的,即如果X为空,另一部分是如果Y为空,但我不完全理解如何证明归纳法的第二步:显示合并在输入大小为k+1的情况下是正确的

我以前对方程做过归纳,从来没有对算法做过归纳


谢谢

第一个假设:您使用的合并例程将两个排序数组合并为一个排序数组。 第二个假设:合并例程终止

基本情况:n=1,1个元素的数组总是排序的 诱导性低血压:合并排序适用于n=1,2,…,k 感应阶跃:n=k+1 现在我们需要证明归纳步骤是正确的

合并排序将数组拆分为两个子数组L=[1,n/2]和R=[n/2+1,n]。根据以上事实,可以看到ceiln/2小于k。根据我们的归纳假设,L和R的合并排序结果都正确排序,因为它们在[1,k]范围内。此外,根据我们的假设,merge例程将它们合并到一个包含所有元素的排序数组中,因为sizeL+sizeR=n,这意味着它正确地排序了一个大小为n=k+1的数组

@编辑:对不起,读错了。对于合并部分:

这里我们将有一个多维归纳

假设:输入数组X,Y已经排序

基本情况:sizeX==0&&sizeY>=0=>返回Y | | sizeY==0&&sizeX>=0=>X,这是正确的,因为X和Y都已排序,并且将排序的数组与空数组合并会产生相同的非空数组 X上的归纳假设:merge适用于mergen,sizeY,其中n=1,2,3,…,k&&sizeY>=0 Y上的归纳假设:merge适用于mergesizeX,m,其中m=1,2,3,…,l&&sizeX>=0 感应跨步X:n=k+1 感应跨步Y:m=l+1 对于X上的第一个诱导步骤,除基本情况外,我们有2种情况:

X[1]X[1]⊕ mergetailX,Y=>这是正确的,因为mergek,sizeY是正确的,根据我们对X的假设,我们把较小的元素放在前面,所以我们保持顺序 X[1]>=Y[1]=>Y[1]⊕ mergeX,tailY=>这里我们有两个选项: SizeTaly=0=>我们遇到了一个基本情况,因此这个情况被证明是正确的 sizetailY>0=>我们进一步递归,最终到达基本情况或mergetailX,子数组,其中sizetailX=k=>由我们的归纳假设证明 类似地,对于Y上的感应步骤:

X[1]>=Y[1]=>Y[1]⊕ mergeX,tailY=>根据我们的假设,这是正确的mergesizex,l`是正确的,我们把较小的元素放在前面 X[1]X[1]⊕ mergetailX,Y=>这里我们有两个选项: sizetailX=0=>我们遇到了一个基本情况,因此这个情况被证明是正确的 sizetailX>0=>我们进一步递归,最终到达基本情况或合并子阵列,其中sizetailY=l=>由我们的归纳假设证明
算法在每一步都会终止,因为我们将其中一个数组缩小1个元素,因此其中一个数组最终会达到我们的基本情况第一个假设:您使用的合并例程将两个排序数组合并为一个排序数组。 第二个假设:合并例程终止

基本情况:n=1,1个元素的数组总是排序的 诱导性低血压:合并排序适用于n=1,2,…,k 感应阶跃:n=k+1 现在我们需要证明归纳步骤是正确的

合并排序将数组拆分为两个子数组L=[1,n/2]和R=[n/2+1,n]。根据以上事实,可以看到ceiln/2小于k。根据我们的归纳假设,L和R的合并排序结果都正确排序,因为它们在[1,k]范围内。此外,根据我们的假设,merge例程将它们合并到一个包含所有元素的排序数组中,因为sizeL+sizeR=n,这意味着它正确地排序了一个大小为n=k+1的数组

@编辑:对不起,读错了。对于合并部分:

这里我们将有一个多维归纳

假设:输入数组X,Y已经排序

基本情况:sizeX==0&&sizeY>=0=>返回Y | | sizeY==0&&sizeX>=0=>X,这是正确的,因为X和Y都已排序,并且将排序的数组与空数组合并会产生相同的非空数组 X上的归纳假设:merge适用于mergen,sizeY,其中n=1,2,3,…,k&&sizeY>=0 Y上的归纳假设:merge适用于mergesizeX,m,其中m=1,2,3,…,l&&sizeX>=0 感应跨步X:n=k+1 感应跨步Y:m=l+1 对于X上的第一个诱导步骤,除基本情况外,我们有2种情况:

X[1]X[1]⊕ mergetailX,Y=>这是正确的,因为mergek,sizeY是正确的,根据我们对X的假设,我们把较小的元素放在前面,所以我们保持顺序 X[1]>=Y[1]=>Y[1]⊕ mergeX,tailY=>这里我们有两个选项: sizetaly=0=>我们就这样碰到了一个基本情况 这个案例被证明是正确的 sizetailY>0=>我们进一步递归,最终到达基本情况或mergetailX,子数组,其中sizetailX=k=>由我们的归纳假设证明 类似地,对于Y上的感应步骤:

X[1]>=Y[1]=>Y[1]⊕ mergeX,tailY=>根据我们的假设,这是正确的mergesizex,l`是正确的,我们把较小的元素放在前面 X[1]X[1]⊕ mergetailX,Y=>这里我们有两个选项: sizetailX=0=>我们遇到了一个基本情况,因此这个情况被证明是正确的 sizetailX>0=>我们进一步递归,最终到达基本情况或合并子阵列,其中sizetailY=l=>由我们的归纳假设证明
算法在每一步都会终止,因为我们将其中一个数组变小1个元素,因此其中一个数组最终会达到我们的基本情况

我理解您对实际合并排序算法的回答,但我作业中的合并算法不是实际的,并且以不同的方式工作。答案不是L和R,而是它们在[1,k]的范围内,因为每次迭代都会将一个数组的尾部与另一个数组合并?@Ugluk抱歉,在第一次能量饮料之前发布是不好的。现在呢?我真的没有读你的答案,但我很感谢你的努力,发布了这样一个格式良好的答案:D做得好;我理解你对实际合并排序算法的回答,但我作业中的合并算法不是实际的,并且以不同的方式工作。答案不是L和R,而是它们在[1,k]的范围内,因为每次迭代都会将一个数组的尾部与另一个数组合并?@Ugluk抱歉,在第一次能量饮料之前发布是不好的。现在呢?我真的没有读你的答案,但我很感谢你的努力,发布了这样一个格式良好的答案:D做得好;你的家庭作业链接不再有效。你能把问题贴在这里吗?你的家庭作业链接不再起作用了。你能把问题贴在这里吗?