如何证明Hibbard增量的希尔排序的减枝条件

本文深入探讨了希尔排序中的减枝条件,并通过数学证明解释了这些条件的有效性。特别地,文章比较了两个减枝条件X和Y,揭示了它们在希尔排序中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在要排序的M个元素的数组aaa
对于Hibbard增量来说,其增量序列为{1,3,7,15……hn−1,hn}\{1,3,7,15……h_{n-1},h_n\}{1,3,7,15hn1,hn},并且hi+1=2hi+1h_{i+1}=2h_i+1hi+1=2hi+1

当希尔排序运行到hih_ihi
接下来应对子数组{……a[λ−2hi],a[λ−hi],a[λ]}\{……a[\lambda-2h_i],a[\lambda-h_i],a[\lambda]\}{a[λ2hi],a[λhi],a[λ]}进行插入排序
有一个减枝条件:
对于 X=(hi+1−1)(hi+2−1)=8hi2+4hiX=(h_{i+1}-1)(h_{i+2}-1)=8h_i^2+4h_iX=(hi+11)(hi+21)=8hi2+4hi
恒有a[λ−X−khi]<a[λ](X+khi<λ<M,k∈N)a{[\lambda-X-kh_i]}<a{[\lambda]} \quad (X+kh_i<\lambda<M,k\in N)a[λXkhi]<a[λ](X+khi<λ<M,kN)
(也就是说对于hih_ihia[1]a[1]a[1]a[λ−X]a[\lambda-X]a[λX]被减枝了)。

下面来证明这个结论

性质一 XXX必定能表示成X=αhi+1+βhi+2X=\alpha h_{i+1}+\beta h_{i+2}X=αhi+1+βhi+2 的形式。其中 α,β∈N\alpha ,\beta \in Nα,βN

我们注意到 {X=8hi2+4hiαhi+1+βhi+2=(2α+4β)hi+α+3β\begin{cases} X=8h_i^2+4h_i \\ \alpha h_{i+1}+\beta h_{i+2}=(2\alpha+4\beta)h_i+\alpha+3\beta \end{cases}{X=8hi2+4hiαhi+1+βhi+2=(2α+4β)hi+α+3β

于是有了两种想法
想法(1)
{2α+4β=8hi+4α+3β=0解得{α=12hi+6β=−4hi−2\begin{cases} 2\alpha+4\beta=8h_i+4 \\ \alpha+3\beta=0 \end{cases} 解得\begin{cases} \alpha=12h_i+6 \quad \\ \beta=-4h_i-2 \end{cases}{2α+4β=8hi+4α+3β=0{α=12hi+6β=4hi2
由于α,β≥0\alpha,\beta \ge 0α,β0,明显β\betaβ 不成立。

或者想法(2)
{2α+4β=8hiα+3β=4hi解得{α=4hiβ=0\begin{cases} 2\alpha+4\beta=8h_i \\ \alpha+3\beta=4h_i \end{cases} 解得\begin{cases} \alpha=4h_i \quad \\ \beta=0 \end{cases}{2α+4β=8hiα+3β=4hi{α=4hiβ=0
α,β\alpha,\betaα,β 为非负整数,得证

由此可得推论一 a[λ−X]<a[λ]a[\lambda-X]<a[\lambda]a[λX]<a[λ]
证明
∵∀k∈a[λ−khi+1]<a[λ],a[λ−khi+2]<a[λ]\because \forall k \in a[\lambda-kh_{i+1}]<a[\lambda],a[\lambda-kh_{i+2}]<a[\lambda]ka[λkhi+1]<a[λ],a[λkhi+2]<a[λ] (希尔排序的性质,比hih_ihi更大的hhh的流程必然是完成了,不然不会轮到hih_ihi)
∴a[λ−αhi+1−βhi+2]<a[λ]\therefore a[\lambda-\alpha h_{i+1}-\beta h_{i+2}]<a[\lambda]a[λαhi+1βhi+2]<a[λ]
∴a[λ−X]<a[λ]\therefore a[\lambda-X]<a[\lambda]a[λX]<a[λ]

性质二 a[λ−X−hi]<a[λ−X]a[\lambda-X-h_i]<a[\lambda-X]a[λXhi]<a[λX](希尔排序的性质,λ−X\lambda-XλX的插入排序问题已经被完成了,要不然不会到达λ\lambdaλ位置)

综合推论一和性质二,即可得证。

但是XXX是不是最大的减枝呢?有没有更大的减枝?
先观察XXX,其实X=2hi∗2hi+1X=2h_i *2h_{i+1}X=2hi2hi+1
于是可以设出Y=hi∗hi+1=2hi2+hiY=h_i*h_{i+1}=2h_i^2+h_iY=hihi+1=2hi2+hi
可以证明 YYY 同样是一个减枝条件。而YYY 确实看起来比XXX 优秀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值