Лекция 4 Перестановки. Перестановки Перестановкой порядка N называется расположение N различных объектов в ряд в некотором порядке. Например, для трех.

Презентация:



Advertisements
Похожие презентации
Что нужно знать: динамическое программирование – это способ решения сложных задач путем сведения их к более простым задачам того же типа динамическое.
Advertisements

Основы алгебры логики. Лекция 2. Алгоритм построения таблицы истинности 1. Подсчитать количество переменных n в логическом выражении; 2. Определить число.
Логическое программировыание Презентация 5 Списки в Прологе.
Х Рыбалко Т.В. Сведение задачи к подзадачам Понятие рекуррентного соотношения Использование таблиц для запоминания решений подзадачИспользование таблиц.
M-чередующаяся декомпозиция Лекция 10. Нечетная декомпозиция Теорема 9.7 (Lovász [1972] ) Граф является фактор-критическим тогда и только тогда, когда.
Определения Пусть задана строка, состоящая из некоторого количества символов. Проверим, входит ли заданная подстрока в данную строку. Если входит, то.
Поиск информации Задача поиска: где в заданной совокупности данных находится элемент, обладающий заданным свойством? Большинство задач поиска сводится.
О БРАБОТКА МАССИВОВ 1. Включение элемента в заданную позицию массива 2. Удаление элементов массива. Удаление элементов массива. Удаление элементов массива.
Тема занятия: Системы счисления Выполнил: Ученик 11 класса Мовсюмзаде Гадир.
Элементы теории алгоритмов
МЕТОДЫ СОРТИРОВКИ. Сортировка - расположение элементов множества в порядке расположения некоторого ключа. ОГРАНИЧЕНИЯ: 1. Рассматриваются внутренние сортировки.
Задача о максимальном потоке в сети Алгоритм Фалкерсона-Форда.
Сортировка одномерного массива Учитель информатики Александрова Т.П.
1 2. Матрицы. 2.1 Матрицы и их виды. Действия над матрицами. Джеймс Джозеф Сильвестр.
Теория графов Основные определения. Задание графов Графический способ – Привести пример графического задания графа, состоящего из вершин А, В и С, связанных.
Системы счисления, используемые в компьютере. Борисов В.А. КАСК – филиал ФГБОУ ВПО РАНХ и ГС Красноармейск 2011 г.
Сложные высказывания можно записывать в виде формул. Для этого простые логические высказывания нужно обозначить как логические переменные буквами и связать.
1 Массивы 2 Опр. Массивом называется совокупность однотипных данных, связанных общим именем. Основные характеристики массива: 1. Имя массива 2. Тип компонентов.
Арифметические основы компьютера. Системы счисления Системой счисления называется совокупность приемов наименования и записи чисел Система счисления –
Списки в языке Пролог. Определение Список упорядоченное множество объектов одинакового типа. Формально это определение соответствует определению массива.
Транксрипт:

Лекция 4 Перестановки

Перестановки Перестановкой порядка N называется расположение N различных объектов в ряд в некотором порядке. Например, для трех объектов а, b и с существует шесть перестановок: аbс, acb, bac, оса. cab, cba. Для множества из N элементов можно построить N! различных перестановок: первую позицию можно занять N способами, вторую (N – 1) способом, так как один элемент уже занят, и т. д. На последнее место можно поставить только один оставшийся элемент. Следовательно, общее количество вариантов расстановки равно N (N 1) (N 2)... 1 = N! Далее будем рассматривать перестановки элементов множества {1, 2, 3, …, N}

Инверсии Пусть даны базовое множество из N элементов 1,2, 3,..., N и его перестановка Пара называется инверсией (инверсионной парой) перестановки, если при i < j. Например, перестановка 4, 1, 3, 2 имеет четыре инверсии: (4,1), (3,2), (4,3) и (4,2). Единственной перестановкой, не содержащей инверсий, является упорядоченная перестановка 1, 2, 3,..., N. Таким образом, каждая инверсия это пара элементов перестановки, нарушающих ее упорядоченность.

Таблицей инверсий перестановки a 1,a 2,...,a N называется последовательность чисел b 1, b 2 …, b N, где b j есть число элементов перестановки, больших j и расположенных левее j (т. е. количество инверсий вида (x, j), при x > j). Например, для перестановки таблица инверсий: Свойство элементов таблицы инверсий: b N = 0, … 0 b i N – i, … 0 b 1 N – 1. Утверждение Таблица инверсий единственным образом определяет соответствующую ей перестановку.

Построение перестановки по таблице инверсий 1 способ: проход по таблице инверсий справа налево Создается заготовка перестановки из одного максимального числа. На каждом шаге в нее вставляется следующий по величине элемент с учетом того, сколько элементов, больших него, должно стоять перед ним. Пример: Таблица инверсий:

Алгоритм A1: построение перестановки по таблице инверсий справа налево Вход: N > 0 - количество элементов перестановки, b 1, b 2 …, b N – таблица инверсий, 0 b j N j. Р := пустая последовательность; цикл по j от N вниз до 1 вставить число j в Р после b j элементов; конец цикла; Выход: Р перестановка, соответствующая данной таблице инверсий

Построение перестановки по таблице инверсий 2 способ: проход по таблице инверсий слева направо Создается заготовка пустой перестановки длины N. На каждом шаге для каждого элемента перестановки, начиная с 1, отсчитывается в ней столько пустых ячеек, какое число записано в соответствующей позиции в таблице инверсий. В следующее за ними пустое место вставляется этот элемент. Пример: Таблица инверсий: Перестановка:

Алгоритм A2: построение перестановки по таблице инверсий слева направо Вход: N > 0 - количество элементов перестановки, b 1, b 2 …, b N – таблица инверсий, 0 b j N j. Р := последовательность из N пустых элементов ; цикл по i от 1 до N с шагом 1 выполнять пропустить b i пустых мест в P; поместить i на следующее пустое место; конец цикла Выход: Р перестановка, соответствующая данной таблице инверсий

Инверсионный метод поиска всех перестановок Таблица инверсий однозначно определяет перестановку и каждая перестановка имеет только одну таблицу инверсий. Следовательно, если мы сумеем перебрать все таблицы инверсий, то с помощью алгоритмов П1 или П2 сможем по ним восстановить все перестановки. Рассмотрим таблицу инверсий как N-значное число в такой необычной «системе счисления»: количество цифр, которое можно использовать в i-м разряде (с конца, начиная с 0) равно i. Возьмем «минимальную» таблицу и будем последовательно прибавлять к ней, как к числу, единицу, пользуясь, например, алгоритмом сложения с переносом для многоразрядных чисел, модифицированным для нашей «системы счисления».

Генерация таблиц инверсии … 1 11 … … … … 43 2 Шаг 0 Шаг 1 Шаг 2 Шаг 3 Шаг 4 Шаг 5 Шаг 6 Шаг 7 Шаг 8 Шаг 9 Шаг 10 … Шаг 119

Алгоритм A 3 нахождение следующей таблицы инверсий Пусть B = b 1, b 2,..., b N – таблица инверсий, построенная на предыдущем шаге. Тогда следующая таблица инверсий получается из нее прибавлением к ней единицы: i := N; flag := истина; пока flag выполнять x := b i + 1; если x > N – i то начало b i := 0; i := i –1; конец иначе начало b i := x; flag := ложь; конец конец пока

Алгоритм Дейкстры : поиск следующей по алфавиту перестановки Пусть даны две перестановки b = b 1, b 2 …, b N и c = c 1, c 2 …, c N набора 1, 2,..., N. Говорят, что перестановка b предшествует перестановке с в алфавитном (лексико­графическом) порядке, если для минимального значения k, такого что b k c k, справедливо b k < с k. Например, перестановка предшествует перестановке (здесь k = 3). Первой перестановкой в алфавитном порядке является перестановка 1,2,3,..., N, а последней N,N-1,N-2,...,1

Идея алгоритма Дейкстры : определить каким-либо образом функцию, которая по заданной перестановке выдает непосредственно следующую за ней в алфавитном порядке, и применять ее последовательно к собственным результатам начиная с самой первой перестановки, пока не будет получена последняя. Например, для перестановки следующей по алфавиту является перестановка

Алгоритм Дейкстры : генерация следующей по алфавиту перестановки Вход: N > 0 количество элементов; a 1, a 2, …, a N-1, a N – предыдущая перестановка. Шаг 1. Просматривая перестановку, начиная с последнего элемента, найдем такой номер i, что a i+1 >... > a N и a i < a i+1. Если такого i нет, то последовательность упорядочена по убыванию и следующей перестановки нет: конец алгоритма. Шаг 2. Найти в «хвосте» a i+1, …, a N элемент a j,, такой что i+1 j N, a j есть наименьшее значение, удовлетворяющее условию a j > a i. После этого поменять местами a i и a j. Шаг 3. Упорядочить «хвост» a i+1, …, a N по возрастанию. Для этого достаточно его инвертировать (обернуть в обратном порядке). Выход: следующая по алфавиту перестановка за данной.

Пример построения следующей по алфавиту перестановки Для перестановки Найти следующую по алфавиту ij Шаг 1: Шаг 2: Шаг 3: Поменять местами Обернуть хвост

Рекурсивный метод поиска всех перестановок Метод рекурсивного перебора перестановок основан на идее сведения исходной задачи к аналогичной задаче на меньшем наборе входных данных. Система рекуррентных соотношений, определяющих множество Реr(М) всех перестановок базового множества М произвольной природы: Реr(0) = {""}, Реr(М) = Permut(i, M\{i}), Permut(i, S) = {"i" + s s Per(S) }. Первое равенство задает условие обрыва рекурсивного спуска: пустое множество элементов порождает пустую перестановку. Два последних равенства определяют правила рекурсивного перехода.

Пример рекурсивного перебора для M= {1,2,3,4} Реr(M) Реrmut (1, M|{1})Реrmut (2, M|{2})Реrmut (3, M|{3})Реrmut (4, M|{4}) Реrmut (12, {3,4})Реrmut (13, {2,4})Реrmut (14, {2,3}) Реrmut (123, {4})Реrmut (124, {3}) Реrmut (1234, {})Реrmut (1243, {})

На языке Си этот процесс можно описать следующим образом: typedef char string[256]; void permut(string start, string rest) { int lenr = strlen(rest); int lens = strlen(start); int i=0; string sl="; string s2="; if (lenr == 0) Printf(%s\n, start); else { for (i = 0; i < lenr; i++) { /* Добавляем i-ый символ к строке start */ strcpy(sl,start); strncpy(sl+lens,rest+i,1); strncpy(sl+lens+1,"\0",1); /* Удаляем i-ый символ из строки rest */ strncpy(s2,rest,i); strncpy(s2+i,rest+i+l,lenr-i-1); strncpy(s2+lenr-l,"\0", 1); /* Рекурсивный переход */ permut( s1, s2 ); } } }

Генерация всех перестановок методом Кнута Идея : если построены все перестановки длины N, то для каждой такой перестановки можно построить N+1 перестановку длины N+1. Пример: Для перестановки 3241 можно построить 5 различных перестановок длины 5:

Генерация перестановок методом Кнута – 1 способ Пусть дана перестановка длины N. Дописать в конец перестановки числа (2i+1)/2 (0 i N). Перенумеровать элементы полученных перестановок в порядке их возрастания. Пример: дана перестановка

Генерация перестановок методом Кнута – 2 способ Пусть дана перестановка длины N: a 1 a 2 … a N. Дописать в конец перестановки числа k (1 k N +1). Для всех a i k заменить их на a i + 1. Пример: дана перестановка