我的教授给我们的递归算法如下解释寻找一组数字的排列:怎么我的教授想出这个算法分析递归情况下?
当他(T(M + 1),N -1))这是从哪里来的?为什么是m + 1和n-1?我真的很困惑,如该从何而来。
我的教授给我们的递归算法如下解释寻找一组数字的排列:怎么我的教授想出这个算法分析递归情况下?
当他(T(M + 1),N -1))这是从哪里来的?为什么是m + 1和n-1?我真的很困惑,如该从何而来。
正如他所说的,m
代表P
和n
当前大小代表S
大小,每次递归调用你从S
删除电话号码,并把它添加到P
,这样你的当前排列的大小增加了1 (m+1
)和可供选择的数字增加了置换的数量由1(n-1
)下降
注意,它是由n
如您在S
执行此操作为每个数字乘以。
注意,指出部分:
设
m
是P
和n
长度是S
大小,然后在printperm(P, S)
,你打电话printperm((P,i), S-{i})
。
因此,当递归时,我们将添加一个元素到P
,并从S
删除元素。
因此m
将由一个和n
增加将减少一个,因此我们得到T(m+1, n-1)
我希望帮助。
http://programmers.stackexchange.com/ –
顺便说一句 - 告诉教授认为,该置换生成器是低效的。你可以'T(M,N)=新台币(M + 1,N - 1)'很容易(我有这种发电机的漂浮在这附近有一些变化)。 – Dukeling