2010-10-06 2 views
2

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

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

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

- это какое-то передовое математическое знание. ..?

ответ

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

U можете прочитать о теории обратного отслеживания на wiki..не очень много информации о том, как на самом деле реализовать образец кода. – bakra

0

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

Смежные вопросы