Fannkuch如何运作?

时间:2010-03-04 04:34:14

标签: algorithm

我无法理解实施Fannkuch的指示。 说明:http://www.haskell.org/haskellwiki/Shootout/Fannkuch

在“计算翻转次数,此处为5”之后,我迷失了。

2 个答案:

答案 0 :(得分:5)

哇,是的,这不是最好的算法描述:)。

我的解释是他们希望你做以下事情:

fannkuch(n) {
 int maxFlips = 0, printCount = 0;
 foreach permutation p of [1..n] {
  maxFlips = max(maxFlips, flipCount(p));
  if (printCount++ < 30) printPermutation(p);
 }
 print(maxFlips);
}

flipCount(p) {
 int count = 0;
 while (p[0] != 1) {
  reverse(p, p + p[0]);
  count++;
 }
 return count;
}

答案 1 :(得分:-2)

请参阅Benchmarks Game - Fannkuch

要求打印前30个排列只是限制可以对算法进行的可接受更改的简单方法。