Hibbard增量的希尔排序思考——如何证明其减枝条件
2017-11-21 21:23
302 查看
在要排序的M个元素的数组a中
对于Hibbard增量来说,其增量序列为{1,3,7……hn−1,hn},并且hi+1=2hi+1。
当希尔排序运行到hi 时对子数组{……a[λ−2hi],a[λ−hi],a[λ]}进行插入排序
有一个减枝条件:
对于 X=(hi+1−1)(hi+2−1)=8h2i+4hi
恒有a[λ−X−khi]<a[λ](X+khi<λ<M,k∈N)。
(也就是说对于hi,a[1]到a[λ−X]被减枝了)。
下面来证明这个结论
性质一 X必定能表示成X=αhi+1+βhi+2 的形式。其中 α,β∈N。
我们注意到 {X=8h2i+4hiαhi+1+βhi+2=(2α+4β)hi+α+3β
于是有了两种想法
想法(1)
{2α+4β=8hi+4α+3β=0
解得{α=12hi+6β=−4hi−2
由于α,β≥0,明显β 不成立。
或者想法(2)
{2α+4β=8hiα+3β=4hi
解得{α=4hiβ=0
α,β 为非负整数,得证
由此可得推论一 a[λ−X]<a[λ]
证明
∵a[λ−hi+1]<a[λ],a[λ−hi+2]<a[λ] (希尔排序的性质)
∴a[λ−αhi+1−βhi+2]<a[λ]
∴a[λ−X]<a[λ]
性质二 a[λ−X−hi]<a[λ−X](希尔排序的性质)
综合推论一和性质二,即可得证。
但是X是不是最大的减枝呢?有没有更大的减枝?
先观察X,其实X=2hi∗2hi+1
于是可以设出Y=hi∗hi+1=2h2i+hi
可以证明 Y 同样是一个减枝条件。而Y 确实看起来比X 优秀。
对于Hibbard增量来说,其增量序列为{1,3,7……hn−1,hn},并且hi+1=2hi+1。
当希尔排序运行到hi 时对子数组{……a[λ−2hi],a[λ−hi],a[λ]}进行插入排序
有一个减枝条件:
对于 X=(hi+1−1)(hi+2−1)=8h2i+4hi
恒有a[λ−X−khi]<a[λ](X+khi<λ<M,k∈N)。
(也就是说对于hi,a[1]到a[λ−X]被减枝了)。
下面来证明这个结论
性质一 X必定能表示成X=αhi+1+βhi+2 的形式。其中 α,β∈N。
我们注意到 {X=8h2i+4hiαhi+1+βhi+2=(2α+4β)hi+α+3β
于是有了两种想法
想法(1)
{2α+4β=8hi+4α+3β=0
解得{α=12hi+6β=−4hi−2
由于α,β≥0,明显β 不成立。
或者想法(2)
{2α+4β=8hiα+3β=4hi
解得{α=4hiβ=0
α,β 为非负整数,得证
由此可得推论一 a[λ−X]<a[λ]
证明
∵a[λ−hi+1]<a[λ],a[λ−hi+2]<a[λ] (希尔排序的性质)
∴a[λ−αhi+1−βhi+2]<a[λ]
∴a[λ−X]<a[λ]
性质二 a[λ−X−hi]<a[λ−X](希尔排序的性质)
综合推论一和性质二,即可得证。
但是X是不是最大的减枝呢?有没有更大的减枝?
先观察X,其实X=2hi∗2hi+1
于是可以设出Y=hi∗hi+1=2h2i+hi
可以证明 Y 同样是一个减枝条件。而Y 确实看起来比X 优秀。
相关文章推荐
- 从抽火柴的问题思考中去-如何从结论推导条件
- 如何证明数学上的对于任意值满足条件
- 【转】 测试职业思考:如何成为一名优秀的软件测试工程师
- 教你如何以对象的方式思考
- 做互联网的人,通常乐于分享和思考,比较讲道理,传统行业的人则没有这种习惯。如果你不是抱着“救世主”的心态,握有“救世主”的权力,就得认真思考,如何获得传统行业的认同感。(转)
- 双11的凌晨,如何证明你是一只程序猿?
- Mondrian的schema中,如何做到同一纬度的不同level数据作为查询条件来用?
- 通过Struts了解MVC框架,兼说如何在面试中利用Struts证明自己
- Magento在addAttributeToFilter中如何使用条件
- 在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法!
- 在数据库中条件查询很慢的时候,如何优化?
- 从设计模式来说如何思考问题?
- 证明ArrayList线程不安全以及如何安全
- 深思考人工智能杨志明:专用AI芯片+算法如何突进智慧医疗
- 数字家庭的创新思考(如何屏蔽众多互联互通协议(DLNA,IGRS,e家佳,OSGi等)的差异性)
- 如何在面试中面试官的提示下,积极地思考?
- SQL Server中,如何将所有符合条件的结果拼接成一列并用逗号隔开?
- 如何证明神存在
- 如何设置条件断点
- 如何保障传真的证明力