【算法分析】煎饼问题(Pan Cake Problem)

今天继续看《编程之美》的第三个问题。

问题的描述就不多说了,这是一个典型的离散数学问题(这个链接有非常详细的问题描述),喜欢图案的童鞋(比如我),可以参看CMU的一个讲义

从1975年比尔盖茨和他的导师发表的文章:Gates, W. and Papadimitriou, C. "Bounds for Sorting by Prefix Reversal." Discrete Mathematics. 27, 47~57, 1979. 开始,二三十年间不断有人在讨论。现在维基百科中对这个问题有两个词条pancake sortingprefix reversal

书中的初步解析大体思路自然是没有一点问题,只是得出的上界结论有点不正确,这个直接影响了书中递归退出条件:“我们至多需要 2(n-1)次翻转就可以把所有烙饼排好序”。这个数值应该是2n-3,如下推理:我们知道将最大尺寸的放在最下边最多需要2次,此时取这n个中的n-2个(剩下那个最小的和次最小的),将这个n-2个煎饼按由小到大放置好最多需要2(n-2)次,此时还有两个,最多只需要1次就可以完成整个煎饼的排序。所以,上限次数为2(n-2)+1=2n-3。

当然这个是上限,会有更优化的解法,于是书中就给出了一些讨论,说真的我没太看懂,分析相对于冗长的代码实在太少……

这篇论文给了一个所谓断点的思路,个人觉得不错。文中后来提到比尔盖茨的论文使用的演算法,进而引出了DNA序列问题,使得这个游戏一样的问题焕发出了新的光彩。

另外,值得注意的是现在所谓“煎饼数”(书中有定义)的计算已经到了n=19的地步,以下两个独立研究可以作为参考,我对偏向纯数学的就不是很geek,没太研究了。

http://arxiv.org/abs/0901.3119 http://kam.mff.cuni.cz/~cibulka/pancakes/

http://www.springerlink.com/content/l1650023g3443852/

我觉得新版的《编程之美》要是更新这个题的话,可以多参阅这个链接。




本文转自gnuhpc博客园博客,原文链接:http://www.cnblogs.com/gnuhpc/archive/2012/12/21/2828087.html,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值