作者EdisonX (闭上眼的鱼)
站内Prob_Solve
标题Re: [问题] 环状排列演算法
时间Tue Jan 24 09:23:01 2012
※ 引述《EdisonX (闭上眼的鱼)》之铭言:
: 目的是要穷举所有可能之环状排列,
: 一般排列 P(n,m),可用递回或旋转法完成,
: 但若只需环状排列时,个数是 P(n,m)/n,
: 目前小弟之作法为过程中先纪录结果至一集合
: 再针对产生之排列去检查集合是否重覆,
: 如此不但速度慢,又吃记忆体,
: 不知这问题目前是否已有演算法可产生所有环状排列之可能?
: 感谢各位!
谢谢 LPH66 与 yauhh 大之指导,目前环状排列应无大碍,
以 LPH66 之演算法有个细节确认一下
假设 CirclePermutation(arr, n=7,m=3),其中 arr 已事先由小至大排序过,
以 LPH66 之方式 (先固定最小元素,再对其它 n-1 个元素做 Permutation 即可)
应只需选到 arr 前 m-1 小的,做 Permutation 即可?
----
另想进一步请教以下问题是否为「无解」问题?
(有点无厘头的问法,因只要知道结果是否无解,或解法,不重证明 XD)
若将 1 2 3 4 视为一环状排列,( 2 3 4 1 / 3 4 1 2 / 4 1 2 3 为同组),
是否有另一演算法,除了环状排列外,也将 (顺时针/逆时针) 也视为同一组?
即
1 1
2 4 (逆时针) 4 2 (顺时针)
3 3
也视为同一组,如此一来穷举次数便从 P(n,m)/n 又降为了 P(n,m)/(2n),
但不确定目前此法是否只剩笔对一法?
目前看来,似乎和「反序」有点渊源,
1
2 5
(1 2 3 4 5/2 3 4 5 1/3 4 5 1 2/4 5 1 2 3/ 5 1 2 3 4)
3 4
---> 固定 1 对其它四个元素做 反序 得
1
5 2
(1 5 4 3 2/5 4 3 2 1/4 3 2 1 5/3 2 1 5 4/2 1 5 4 3)
4 3
再次感谢各位不吝赐教!小弟感激不尽!!
--
If there is no tomorrow,
I want to see u last time.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 180.177.69.239