这不就是微软的翻饼问题么
基本就动态规划、贪心、分支限界法几种
你这个算法如果能剪枝的话会稍快一点
贪心的话可以O(N)的完成,虽然不是最优,但是工程上应该可以用了
其他的方法已经忘差不多了
【 在 SHENOK (石室食士) 的大作中提到: 】
: 标 题: 求一个题目的非暴力算法
: 发信站: 水木社区 (Tue Jan 26 00:56:11 2021), 站内
:
: 题目: 给定前N个自然数的一个乱序排列, 比如 3 1 2, 求能让其顺序排列的最小操作次数。其“操作”只有一种,即对任何一个子序列反序。 所以,312,需要操作两次 312-》321-》123。输出2.
:
: 输入4321 ,输出1.
:
:
: 目前只想到一个比较费时间, 特别费空间的算法:
:
: 原始输入序列压入队列,同时记录操作次数为0。
: while (队列非空):
: 弹出队列头和当前操作次数。
: 两重循环遍历该当前序列的所有子序列:
: 反序该子序列
: if(顺序了):
: 返回当前操作次数 + 1
: 结束
: else:
: 把(得到的新序列,当年操作次数+1)压入队列
:
: 有没有经济一点的办法?
: --
:
: ※ 来源:·水木社区
http://www.newsmth.net·[FROM: 81.157.216.*]
--
FROM 111.206.214.*