假设有n块大小不一的烙饼 那最少要翻几次 才能达到最后大小有序的结果?
为了把最大的烙饼摆在最下面 先把最上面的烙饼和最大的烙饼之间的烙饼翻转 这样最大的烙饼就在最上面了 接着 把所有烙饼翻转 最大的烙饼就摆在了最下面
之后我们队上面n-1、n-2个饼重复这个过程
两次翻转就可以把最大的烙饼翻转到最下面 最多需要把上面的n-1个烙饼一次翻转两次 因此 最多需要2(n-1)次翻转就可以把所有烙饼排序好 !当倒数第2块小的饼翻转好 最小的一块就已经放在最上面了 因此是2(n-1)次
如何通过一个程序搜索到一个最优的方案?
首先 通过每次找出最大的烙饼进行翻转 这是一个可行的解决方法
假如这堆烙饼中有好几个不同的部分相对有序 凭直觉 可以先把小一些的烙饼进行翻转让其有序 这样会比每次翻转最大的烙饼要快
还有其他的方案?比如 每次翻转时候 将两个本应该相邻的烙饼尽可能的换到一起 这样 当所有的烙饼都换到一起之后 实际上就是完成排序了
再次基础上 本能想到的方法就是穷举法 只要穷举出所有可能的交换方案就一定能够找到一个最优的方案
顺着这个思路 可以使用动态规划或者递归的方法进行实现 可以从不同的翻转策略开始 比如说使用先翻转最小的 然后递归把所有的可能全部翻转一遍
这样最终可以找到一个解
但是 递归推出的条件?第一个推出的条件肯定是所有烙饼已经排好顺序。其它的?
最多翻转次数为2(n-1) 当翻转次数超过 2(n-1) 应当放弃这个翻转算法 这样就能减少翻转的次数
从另一方面 既然这是一个排序问题 应当利用排序的信息来进行处理 同样翻转过程中 可以看看当前的老兵数组的排序情况如何 然后利用这些信息帮助减少翻转次数的判断

本文探讨了如何通过程序实现烙饼排序的最佳策略,包括寻找最优方案的方法、使用动态规划或递归进行实现的步骤,以及如何通过穷举法找到最优解。同时,文章提出了一种改进策略,即在每次翻转时尝试将相邻的烙饼尽可能地换到一起,以加速排序过程。
1767

被折叠的 条评论
为什么被折叠?



