在要排序的M个元素的数组aaa中
对于Hibbard增量来说,其增量序列为{1,3,7,15……hn−1,hn}\{1,3,7,15……h_{n-1},h_n\}{1,3,7,15……hn−1,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+1−1)(hi+2−1)=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[λ−X−khi]<a[λ](X+khi<λ<M,k∈N)。
(也就是说对于hih_ihi,a[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β=−4hi−2
由于α,β≥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]∵∀k∈a[λ−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[λ−X−hi]<a[λ−X](希尔排序的性质,λ−X\lambda-Xλ−X的插入排序问题已经被完成了,要不然不会到达λ\lambdaλ位置)
综合推论一和性质二,即可得证。
但是XXX是不是最大的减枝呢?有没有更大的减枝?
先观察XXX,其实X=2hi∗2hi+1X=2h_i *2h_{i+1}X=2hi∗2hi+1
于是可以设出Y=hi∗hi+1=2hi2+hiY=h_i*h_{i+1}=2h_i^2+h_iY=hi∗hi+1=2hi2+hi
可以证明 YYY 同样是一个减枝条件。而YYY 确实看起来比XXX 优秀。