警告:
要看懂本文所讲述的内容,必须建立在仔细阅读原文的基础上。原文有些代码的说明并不是很明确,笔者在本文中,只是针对自己开始不理解的地方经过思考和查阅其他资料后给出了自己的理解。其次,本文没有给出完整代码,完整代码有些长,需要查阅的朋友可以看编程之美1.3节。
原文描述:
假设有n块大小不一的烙饼,那最少要翻几次,才能达到大小有序的结果?
你能否写出一个程序,对于n块大小不一的烙饼,输出最优化的翻饼过程呢?
首先要清楚的是,烧饼问题不是要我们去设计一种排序算法,而是要我们设计一种自适应的,能根据不同的输入从而求得翻转次数最少的排序方式。也就是说,对于不同的输入,翻转烧饼的方法也是不同的,并不是我在数据结构这样的书籍中所看到的一种适通用的排序算法。简而言之,该问题的本质是求一个最小值,即在这样的输入的情况下,翻转的次数最少。其数学模型为:
可以发现,这明显是一个最优化问题。
假设F(n)是我们设计的算法,输入一个烧饼序列n后,输出翻转的最优(最小)次数与翻转策略。对于最优化问题ÿ