试图理解字符串排列?

时间:2010-10-06 15:47:54

标签: algorithm math

我在这里找到了这个甜蜜的代码: http://geeksforgeeks.org/?p=767 来源链接:http://mathworld.wolfram.com/Permutation.html

好吧我怎么才开始理解这些代码? 我该如何开始编码呢? 我遇到过很多这样的代码......使用动态编程,回溯,分支和绑定...并且理解深蹲。

即使你调试它们......也无法理解太多..单独开始编码就像它们一样。

是否需要某种高级数学知识..?

3 个答案:

答案 0 :(得分:2)

您需要首先了解算法 - 这是困难的部分。一旦理解了算法,那么实际编程语言中的实现就相对简单了。所以 - 暂时忘记代码 - 专注于算法和数据结构。

答案 1 :(得分:2)

这是一个快速解释。

考虑一组X = {x1,x2,...,xn}。 X的排列必须从一些xi开始,然后是X \ {xi}的排列。

狡猾的C实现正是这样做的,利用了下面的不变量:每次调用permute()都会返回不变的数组(基本上它会计算数组的排列,将其打印出来,然后撤消排列)。这就是这些行的作用:

// Permute a[i..n]:
swap((a+i), (a+j));  // Make a[j] the start of this (sub-)permutation starting at i.
permute(a, i+1, n);  // Find the permuations of a[i+1..n] - and undo them.
swap((a+i), (a+j));  // Undo the swap of a[i] and a[j].

答案 2 :(得分:0)

尝试首先了解更高级别pseudocode,而不是所有特定于语言的详细信息。如果你不熟悉你试图传播的代码的计算机语言,它也会使事情变得更加困难。