作者yauhh (哟)
看板Visual_Basic
标题Re: [.NET] 如何写 Permutation 函式
时间Fri Jan 22 10:30:47 2010
※ 引述《lancelet (修行非为绝情)》之铭言:
: 虽然是高中的"排列"不过真的把我难倒了
: 望佛心人帮忙,感谢 <(_ _)>
来来来,这问题可以一步一步慢慢想. 先想第一种情况,阵列只有一笔资料:
a[0] = 1
它的排列就是一笔资料,这情况,我们还不知道permu程式是什麽样子.
所以要再想两笔资料的情况
a[0] = 1
a[1] = 2
这就先取两笔资料的任何一个,再把两笔资料的另一部份也求出排列,然後把头接上.
所以permu程式变成:
For I = 0 To 1
Head = a[I] '这是排列的头,可能是1或2
Others = all_but(a, Head) '这是把头摘掉之後其他资料,要用来做後续排列
...
Next
Others会只剩一笔资料. 假定以上程式是permu函数,则permu对包含两笔资料的a阵列,
和只包含一笔资料的Others阵列,处理程式一模一样. 把permu函数的外观补全:
func permu(array a, length n) as array
if (n <= 1) return a
for i = 0 to n
head = a[i]
others = all_but(a, head) 'all_but函数,要另外写
o_permus = permu(others, n-1)
array b = {}
for j = 0 to n-1
b = concat(b, concat(head, o_permus[j])) 'concat函数衔接两阵列为
'一阵列,也要另外写
next
next
return b
end func
这是个简单的递回混合回圈的方法.
如果讨厌递回就要想办法把递回部份展开转化成纯回圈.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.160.212.178
※ 编辑: yauhh 来自: 218.160.212.178 (01/22 10:32)
1F:推 lancelet:感谢 01/23 01:31