пытаясь понять перестановки строк? - PullRequest
2 голосов
/ 06 октября 2010

Я нашел этот приятный код здесь: http://geeksforgeeks.org/?p=767 ссылка на источник: http://mathworld.wolfram.com/Permutation.html

хорошо, как мне вообще начать понимать эти коды?Как мне начать кодирование, как это?Я сталкивался со многими такими кодами ... используя динамическое программирование, обратное отслеживание, ветвление и связывание ... и понял приседания.

, даже если вы отлаживаете их ... вы не можете понять многое ... сами начинаете кодировать, как они.

требуется какое-то продвинутое знание математики ..?

Ответы [ 3 ]

2 голосов
/ 07 октября 2010

Вот краткое объяснение.

Рассмотрим множество 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 голосов
/ 06 октября 2010

Сначала нужно понять алгоритм - это самая сложная часть. Как только вы поймете алгоритм, реализация на реальном языке программирования будет относительно простой. Так что - забудьте о коде сейчас - сосредоточьтесь на алгоритмах и структурах данных.

0 голосов
/ 06 октября 2010

Попробуйте сначала понять более высокий уровень псевдокод вместо всех специфических для языка деталей. Если вы недостаточно хорошо разбираетесь в языке программирования кода, который вы пытаетесь разобрать, это также усложнит ситуацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...