Новости
Теория
Визуализаторы
Что почитать
Ссылки
О нас
![]() ![]() |
Эта программа демонстрирует два алгоритма перебора перестановок: перебор в лексикографическом порядке и перебор методом рекурсии. С помощью кнопки «Шаг» программа совершает очередной шаг построения следующей перестановки, с помощью кнопки «Перестановка» программа сразу переходит к следующей перестановке. Кнопкой «Авто» программа переключается в автоматический режим. Кнопки «Быстрее» и «Медленнее» позволяют варьировать скорость работы программы в автоматическом режиме. С помощью кнопки «Сброс» алгоритм инициализируется для работы. До того, как совершен хотя бы один шаг можно изменить количество элементов Перебор перестановок в лексикографическом порядкеКаждая следующая перестановка строится следующим образом:
Перебор перестановок методом рекурсииОсновная идея метода состоит в следующем: для того, чтобы построить все перестановки для n элементов, построим все перестановки для n-1 элементов и добавим к каждой из них n-ый элемент всеми возможными n способами. Например к перестановке 2431 элемент 5 добавим следующими способами: 24315, 24351, 24531, 25431, 52431. Можно заметить, что 5 как бы двигается по массиву. Для построения следующей перестановки подвинется 4, после чего снова будет двигаться 5. На протяжении всего процесса хранится информация о том, в каком направлении двигается каждый элемент (показано стрелками над квадратиками с элементами). При построении следующей перестановки на первом шаге рассматривается наибольший элемент (отмечен красным треугольником). Если в направлении его движения еще есть, куда двигаться, передвигаем на одну позицию, это и будет следующей перестановкой. Если двигаться больше некуда (элемент стоит на краю массива и направление его движения — к краю), то меняем его направление движения, после чего «забываем» про этот элемент и строим следующую перестановку для оставшейся части массива, для этого находим в ней наибольший элемент и т.д. (повторяем все снова). Автор визуализатора: Михалев Евгений
Митя
/ 2008-02-21 01:04:09
Изучаю защиту данных, создавал перебор ключей, алгоритм "Перебор перестановок в лексикографическом порядке" подошел супер! Особенно для ситуаций с одинаковыми буквами (нет копий). Большое спасибо за наглядную иллюстрацию, без нее не справился бы так быстро!
Marbo
/ 2008-06-14 13:56:14
Большое спасибо, отличные описание и визуализация.
Alex
/ 2008-06-23 18:14:09
Спасибо за визуализацию, с ней все гораздо понятнее
Дамир
/ 2008-09-27 03:57:42
Первая программа бажная. Случай когда элементов 4. Идут перестановки 1234 1243 1342 а дальше программа глючит и превращает эту перестановку в 1324.
WC
/ 2009-04-13 13:45:52
Спасибо, но есть два вопроса: 1. Будет ли добавлена опция переборов с вырожденными перестановками, когда несколько элементов одинаковы? Нет. Визуализатор разработан только для множеств, а не для мультимножеств. 2. Какой из представленных алгоритмов переборов работает быстрее? См. соответствующие статьи на нашем сайте.
Игорь
/ 2009-09-10 21:26:47
Супер сайт!!!
SL
/ 2010-01-16 23:50:52
Большое спасибо, все просто и понятно. Даже я сразу разобрался.
Виталий (НУ ЛП, UA)
/ 2010-10-23 16:24:08
Спасибо :)
Андрей
/ 2012-11-21 10:59:11
Среди элементов, стоящих справа, нужно выбрать элемент (k), который должен встать на место m-го. Это минимальный элемент среди тех, которые больше m-го (отмечается синим треугольником, потом просто синим цветом). Если элемент(к) не определяется однозначно, то есть несколько равных элементов претендуют на его место, то какой из них следует выбрать? Пример: 123455, какую из 5рок надо поменять с 4кой? См. выше --- реплику на вопрос от 2009-04-13.<>
Андрей
/ 2012-11-22 10:00:17
См. выше --- реплику на вопрос от 2009-04-13. Тот ответ про визуализатор, мой вопрос про был алгоритм. Алгоритм рассчитан на обработку МНОЖЕСТВА (см. описание над окном визуализатора), а не МУЛЬТИМНОЖЕСТВА. Во втором случае необходима некоторая модификация.
Серый
/ 2013-12-29 18:31:44
Спасибо! Кучу сайтов облазил и только тут разобрался. |