Реализация последовательности Лэнгфорда Haskell или C

В комбинаторной математике спаривание Лэнгфорда , также называемое последовательностью Лэнгфорда, представляет собой перестановку последовательность 2n чисел 1, 1, 2, 2, ..., n, n, в котором две единицы находятся на расстоянии одной единицы, две двойки находятся на расстоянии двух единиц, и в более общем случае две копии каждого числа k находятся на расстоянии k единиц.

Например:

Спаривание Лэнгфорда для n = 3 задается последовательностью 2,3,1,2,1,3.

  • Какой хороший способ решить эту проблему в haskell или ] C
  • Можете ли вы предложить алгоритм для ее решения (не хотите использовать грубую силу)?

------------------------ --EDIT ----------------------
Как мы могли определить математические правила для помещения кода @ Rafe в haskell

11
задан cMinor 12 May 2011 в 04:42
поделиться