作者DJWS (...)
看板Prob_Solve
标题Re: [问题] 有关排列组合的问题
时间Thu Jan 5 14:51:43 2012
※ 引述《linkone (小豆豆)》之铭言:
: 假设有数字 1 2 3 排列组合为 213, 312, 123 .....
: 若单纯要求出排列组合, 有一段演算法可以求出来,
: 但是 他求出来的顺序 123,132,213,231,312,321
: 但是我想要的是 132 123 213 231 321 312
: 也就是 这一次得到的组合为上一个组合的两个元素交换所形成
: ex ; 第一次求出来的组合为 132, 第二次的组合为 123
: 其中123是由132的2跟3 交换而成.
: 不晓得有没有演算法可以达成我的目标的呢?? 麻烦各位大大了
1.
Steinhaus-Johnson-Trotter algorithm
http://en.wikipedia.org/wiki/Steinhaus%E2%80%93Johnson%E2%80%93Trotter_algorithm
2.
permute(i)
if i == N output A[N]
else
for j = i to N do
swap(A[i], A[j])
permute(i+1)
swap(A[i], A[j])
3.
next permuatation
http://en.wikipedia.org/wiki/Permutation#Algorithms_to_generate_permutations
不知道这些是不是你需要的?
--
不负责任猜测:
如果用bitwise operation
感觉上一个for回圈就可以写完的样子
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.122.156
※ 编辑: DJWS 来自: 61.230.122.156 (01/05 14:55)