免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2228 | 回复: 5
打印 上一主题 下一主题

[算法] 求教个算法Stooge排序算法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-09 11:16 |只看该作者 |倒序浏览
程序是用伪码写的,A代表数组,i,j都代表下标。
想请问到底是怎么做到排序的
exchange 代表交换
STOOGE-SORT(A, i, j)
if  A[i] > A[j]
     then exchange A[i]<--->A[j]
if i+1 >= j
   then return  k = (j - i  + 1)/3
STOOGE-SORT(A, i, j-k)
STOOGE-SORT(A, i+k, j)
STOOGE-SORT(A, i, j-k)

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2009-12-09 13:05 |只看该作者
网络上搜索下都有解释
Howard、Fine等教授提出了下面的“漂亮的”排序算法。

STOOGE-SORT(A, i, j)
1 if A>A[j]
2     then exchange A<->A[j]
3 if i+1>=j
4     then return
5 k<-(j-i+1)/3
6 STOOGE-SORT(A, i, j-k)
7 STOOGE-SORT(A, i+k, j)
8 STOOGE-SORT(A, i, j-k)

a) 证明:如果n=Length[A],那么STOOGE-SORT(A, 1, Length[A])能正确地对输入数组A[1..n]进行排序。

循环不变式:过程STOOGE-SORT(A, i, j)被调用后,数组A中[i, j]区间内的元素是有序的。
初始化:i+1>=j时,[i, j]区间中只有一个或者两个元素,唯一的操作就是 if A>A[j] then exchange A<->A[j],显然循环不变式是成立的。
保持:每一次STOOGE-SORT(A, i, j)被调用时,假设循环不变式成立。则调用STOOG-SORT(A, i, j-k)使得区间[i, j-k]有序,调用STOOG-SORT(A, i+k, j)使得区间[i+k, j]有序。因为k=(j-i+1)/3,所以区间[i, j-k]和区间[i+k, j]的重叠部分区间[i+k, j-k]的元素个数为[i, j]中元素个数的1/3,也为k个。因调用STOOG-SORT(A, i, j-k)后区间[i, j-k]有序,所以区间[i+k, j-k]中的元素应该是区间[i, j-k]中最大的k个元素,于是调用STOOG-SORT(A, i+k, j)后可以保证区间[j-k+1, j]中包含区间[i, j]中最大的k个元素并且是有序的。因此可保证在第二次调用STOOG-SORT(A, i, j-k)后区间[i, j]有序。
终止:STOOGE-SORT(A, i, Length[A])调用结束后,根据循环不变式,数组A中的元素是有序的。

b) 给出一个表达STOOGE-SORT最坏情况的运行时间的递归式,以及关于最坏情况运行时间的一个紧确的渐进(Θ记号)界。

T(n)=3T(2n/3)+Θ(1)

根据主定理:

a=3    b=3/2    f(n)=Θ(1)

故有 f(n)=O(n^log(3/2, 3-ε))  (ε>0)

所以 T(n)=Θ(n^log(3/2, 3))>Θ(n^2)

论坛徽章:
0
3 [报告]
发表于 2009-12-09 13:52 |只看该作者
原帖由 hellioncu 于 2009-12-9 13:05 发表
网络上搜索下都有解释
Howard、Fine等教授提出了下面的“漂亮的”排序算法。


俺也上网看了解释,不过不明白为什么这么划分。
尤其是2/3的调用,
为什么不1/3 地调用
说实话,没看懂阿

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2009-12-09 13:56 |只看该作者
原帖由 bill2012 于 2009-12-9 13:52 发表


俺也上网看了解释,不过不明白为什么这么划分。
尤其是2/3的调用,
为什么不1/3 地调用
说实话,没看懂阿


我也不懂,反正就知道是递归 ,管他呢,反正又不用这个算法

论坛徽章:
0
5 [报告]
发表于 2009-12-09 14:14 |只看该作者
原帖由 hellioncu 于 2009-12-9 13:56 发表


我也不懂,反正就知道是递归 ,管他呢,反正又不用这个算法

这是算法导论上的一道题目。
最近在看算法导论,感觉自己数学基础太差了。
而本书到处都是数学推论。
看来编程的基础还是数学阿

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
6 [报告]
发表于 2009-12-09 15:20 |只看该作者
原帖由 bill2012 于 2009-12-9 14:14 发表

这是算法导论上的一道题目。
最近在看算法导论,感觉自己数学基础太差了。
而本书到处都是数学推论。
看来编程的基础还是数学阿


实际工作中很少用到什么高深的算法,不看也罢。还在读书的另说。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP