Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Перестановки. (Лекция 6)

Содержание

ПерестановкиПерестановкой порядка N называется расположение N различных объектов в ряд в некотором порядке. Например, для трех объектов — а, b и с — существует шесть перестановок: аbс, acb, bac, bса. cab, cba. Для множества из N
Лекция 6 Перестановки ПерестановкиПерестановкой порядка N называется расположение N различных объектов в ряд в некотором Инверсии Пусть даны базовое множество из N элементов 1,2, 3,..., N и Таблицей инверсий перестановки a1,a2, ...,aN называется последовательность чисел b1, b2 …, bN Построение перестановки по таблице инверсий1 способ: проход по таблице инверсий справа налевоСоздается Алгоритм П1:  построение перестановки по таблице инверсий справа налевоВход: 		N > Построение перестановки по таблице инверсий2 способ: проход по таблице инверсий слева направоСоздается Алгоритм П2:  построение перестановки по таблице инверсий слева направоВход: 		N > Инверсионный метод поиска всех перестановок Таблица инверсий однозначно определяет перестановку и каждая Генерация таблиц инверсии000000000111…111…2220000000000000000000000000…111111111……432Шаг 0Шаг 1Шаг 2Шаг 3Шаг 4Шаг 5Шаг 6Шаг 7Шаг 8Шаг 9Шаг 10…Шаг 119 Алгоритм И1:  нахождение следующей таблицы инверсийПусть B = b1, b2, ..., Алгоритм Дейкстры: поиск следующей по алфавиту перестановки Пусть даны две перестановки b Идея алгоритма Дейкстры:определить каким-либо образом функцию, которая по заданной перестановке выдает непосредственно Алгоритм Дейкстры:  генерация следующей по алфавиту перестановкиВход: N > 0 — Пример построения следующей по алфавиту перестановкиДля перестановки							1 4 6 2 9 5 Рекурсивный метод поиска всех перестановок Метод рекурсивного перебора перестановок основан на идее Пример рекурсивного перебора для M= {1,2,3,4}Реr(M)Реrmut (1, M|{1})Реrmut (2, M|{2})Реrmut (3, M|{3})Реrmut На языке Си этот процесс можно описать следующим образом:typedef char string[256]; void Генерация всех перестановок методом КнутаИдея: если построены все перестановки длины N, то Генерация перестановок методом Кнута –  1 способПусть дана перестановка длины N.Дописать Генерация перестановок методом Кнута –  2 способПусть дана перестановка длины N: Задача коммивояжераДано N городов. Необходимо объехать все, побывав в каждом городе
Слайды презентации

Слайд 2 Перестановки
Перестановкой порядка N называется расположение N различных объектов

ПерестановкиПерестановкой порядка N называется расположение N различных объектов в ряд в

в ряд в некотором порядке.
Например, для трех объектов

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

Далее будем рассматривать перестановки элементов множества
{1, 2, 3, … , N}

Слайд 3 Инверсии
Пусть даны базовое множество из N элементов

Инверсии Пусть даны базовое множество из N элементов 1,2, 3,..., N

1,2, 3,..., N и его перестановка

Пара

называется инверсией (инверсионной парой) перестановки ,
если при i < j.
Например, перестановка 4, 1, 3, 2 имеет четыре инверсии:
(4,1), (3,2), (4,3) и (4,2).
Единственной перестановкой, не содержащей инверсий, является упорядоченная перестановка 1, 2, 3, ... , N.

Таким образом, каждая инверсия — это пара элементов
перестановки, нарушающих ее упорядоченность.


Слайд 4 Таблицей инверсий перестановки a1,a2, ...,aN называется последовательность чисел

Таблицей инверсий перестановки a1,a2, ...,aN называется последовательность чисел b1, b2 …,

b1, b2 …, bN , где bj есть число

элементов перестановки, больших j и расположенных левее j
(т. е. количество инверсий вида (x, j), при x > j).
Например,
для перестановки 5 9 1 8 2 6 4 7 3
таблица инверсий: 2 3 6 4 0 2 2 1 0.
Свойство элементов таблицы инверсий:
bN = 0,

0 ≤ bi ≤ N – i ,

0 ≤ b1 ≤ N – 1.

Утверждение
Таблица инверсий единственным образом определяет соответствующую ей перестановку.


Слайд 5 Построение перестановки по таблице инверсий
1 способ: проход по

Построение перестановки по таблице инверсий1 способ: проход по таблице инверсий справа

таблице инверсий справа налево
Создается заготовка перестановки из одного максимального

числа. На каждом шаге в нее вставляется следующий по величине элемент с учетом того, сколько элементов, больших него, должно стоять перед ним.
Пример:
Таблица инверсий: 2 3 6 4 0 2 2 1 0
9
9 8
9 8 7
9 8 6 7
5 9 8 6 7
5 9 8 6 4 7
5 9 8 6 4 7 3
5 9 8 2 6 4 7 3
5 9 1 8 2 6 4 7 3



Слайд 6 Алгоритм П1: построение перестановки по таблице инверсий справа

Алгоритм П1: построение перестановки по таблице инверсий справа налевоВход: 		N >

налево
Вход:
N > 0 - количество элементов перестановки,
b1,

b2 …, bN – таблица инверсий,
0 ≤ bj ≤ N − j.
Р := пустая последовательность;
цикл по j от N вниз до 1
вставить число j в Р после bj элементов;
конец цикла;
Выход:
Р − перестановка, соответствующая данной таблице инверсий


Слайд 7 Построение перестановки по таблице инверсий
2 способ: проход по

Построение перестановки по таблице инверсий2 способ: проход по таблице инверсий слева

таблице инверсий слева направо
Создается заготовка пустой перестановки длины N.


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

Пример:
Таблица инверсий: 2 3 6 4 0 2 2 1 0



Перестановка:











1

2

3

4

5

6

7

8

9


Слайд 8 Алгоритм П2: построение перестановки по таблице инверсий слева

Алгоритм П2: построение перестановки по таблице инверсий слева направоВход: 		N >

направо
Вход:
N > 0 - количество элементов перестановки,
b1,

b2 …, bN – таблица инверсий,
0 ≤ bj ≤ N − j.
Р := последовательность из N пустых элементов;
цикл по i от 1 до N с шагом 1 выполнять
пропустить bi пустых мест в P;
поместить i на следующее пустое место;
конец цикла
Выход:
Р − перестановка, соответствующая данной таблице инверсий


Слайд 9 Инверсионный метод поиска всех перестановок
Таблица инверсий однозначно

Инверсионный метод поиска всех перестановок Таблица инверсий однозначно определяет перестановку и

определяет перестановку и каждая перестановка имеет только одну таблицу

инверсий.

Следовательно, если мы сумеем перебрать все таблицы инверсий, то с помощью алгоритмов П1 или П2 сможем по ним восстановить все перестановки.

Рассмотрим таблицу инверсий как N-значное число в такой необычной «системе счисления»: количество цифр, которое можно использовать в i-м разряде (с конца, начиная с 0) равно i.

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

Слайд 10 Генерация таблиц инверсии
0
0
0
0
0
0
0
0
0
1
1
1

1
1
1

2
2
2
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

1
1
1
1
1
1
1
1
1


4
3
2
Шаг 0
Шаг 1
Шаг 2
Шаг 3
Шаг 4
Шаг

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

5
Шаг 6
Шаг 7
Шаг 8
Шаг 9
Шаг 10

Шаг 119


Слайд 11 Алгоритм И1: нахождение следующей таблицы инверсий
Пусть B =

Алгоритм И1: нахождение следующей таблицы инверсийПусть B = b1, b2, ...,

b1, b2, ..., bN – таблица инверсий, построенная на

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

Слайд 12 Алгоритм Дейкстры: поиск следующей по алфавиту перестановки
Пусть даны

Алгоритм Дейкстры: поиск следующей по алфавиту перестановки Пусть даны две перестановки

две перестановки
b = b1, b2 …, bN и


c = c1, c2 …, cN
набора 1, 2, ..., N.
Говорят, что перестановка b предшествует перестановке с в алфавитном (лексико­графическом) порядке, если для минимального значения k, такого что bk ≠ ck, справедливо bk < сk.

Например, перестановка 1 2 3 4 5 предшествует перестановке 1 2 4 5 3 (здесь k = 3).

Первой перестановкой в алфавитном порядке является
перестановка 1,2,3, ..., N,
а последней — N,N-1,N-2,...,1

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

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

заданной перестановке выдает непосредственно следующую за ней в алфавитном

порядке, и применять ее последовательно к собственным результатам начиная с самой первой перестановки, пока не будет получена последняя.

Например, для перестановки
1 4 6 2 9 5 8 7 3
следующей по алфавиту является перестановка
1 4 6 2 9 7 3 5 8.


Слайд 14 Алгоритм Дейкстры: генерация следующей по алфавиту перестановки
Вход: N

Алгоритм Дейкстры: генерация следующей по алфавиту перестановкиВход: N > 0 —

> 0 — количество элементов;
a1, a2, …, aN-1,

aN – предыдущая перестановка.

Шаг 1. Просматривая перестановку, начиная с последнего элемента, найдем такой номер i, что ai+1 > ... > aN и ai < ai+1.
Если такого i нет, то последовательность упорядочена по убыванию и следующей перестановки нет: конец алгоритма.

Шаг 2. Найти в «хвосте» ai+1, …, aN элемент aj,, такой что i+1 ≤ j ≤ N, aj есть наименьшее значение, удовлетворяющее условию aj > ai. После этого поменять местами ai и aj .

Шаг 3. Упорядочить «хвост» ai+1, …, aN по возрастанию. Для этого достаточно его инвертировать (обернуть в обратном порядке).

Выход: следующая по алфавиту перестановка за данной.

Слайд 15 Пример построения следующей по алфавиту перестановки
Для перестановки
1 4

Пример построения следующей по алфавиту перестановкиДля перестановки							1 4 6 2 9

6 2 9 5 8 7 3
Найти следующую по

алфавиту.

1

6

4

9

2

8

5

7

3

i

j

Шаг 1:

Шаг 2:

Шаг 3:


Поменять местами

Обернуть хвост


Слайд 16 Рекурсивный метод поиска всех перестановок
Метод рекурсивного перебора

Рекурсивный метод поиска всех перестановок Метод рекурсивного перебора перестановок основан на

перестановок основан на идее сведения исходной задачи к аналогичной

задаче на меньшем наборе входных данных.

Система рекуррентных соотношений, определяющих множество Реr(М) всех перестановок базового множества М произвольной природы:

Реr(0) = {""},
Реr(М) = Permut(i, M\{i}),
Permut(i, S) = {"i" + s ⎪ s ∈ Per(S) }.

Первое равенство задает условие обрыва рекурсивного спуска: пустое множество элементов порождает пустую перестановку.
Два последних равенства определяют правила рекурсивного перехода.

Слайд 17 Пример рекурсивного перебора для M= {1,2,3,4}
Реr(M)
Реrmut (1, M|{1})
Реrmut

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

(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, {})


Слайд 18 На языке Си этот процесс можно описать следующим

На языке Си этот процесс можно описать следующим образом:typedef char string[256];

образом:
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 );
}
}
}

Слайд 19 Генерация всех перестановок методом Кнута
Идея:
если построены все

Генерация всех перестановок методом КнутаИдея: если построены все перестановки длины N,

перестановки длины N, то для каждой такой перестановки можно

построить N+1 перестановку длины N+1.
Пример:
Для перестановки 3241 можно построить 5 различных перестановок длины 5:
53241
35241
32541
32451
32415

Слайд 20 Генерация перестановок методом Кнута – 1 способ
Пусть дана

Генерация перестановок методом Кнута – 1 способПусть дана перестановка длины N.Дописать

перестановка длины N.
Дописать в конец перестановки числа (2i+1)/2 (0

≤ i ≤ N).
Перенумеровать элементы полученных перестановок в порядке их возрастания.
Пример: дана перестановка 3241.
3 2 4 1 0.5 → 4 3 5 2 1
3 2 4 1 1.5 → 4 3 5 1 2
3 2 4 1 2.5 → 4 2 5 1 3
3 2 4 1 3.5 → 3 2 5 1 4
3 2 4 1 4.5 → 3 2 4 1 5


Слайд 21 Генерация перестановок методом Кнута – 2 способ
Пусть дана

Генерация перестановок методом Кнута – 2 способПусть дана перестановка длины N:

перестановка длины N: a1 a2 … aN .
Дописать в

конец перестановки числа k
(1 ≤ k ≤ N +1).
Для всех ai ≥ k заменить их на ai + 1.
Пример: дана перестановка 3241.
3 2 4 1 1 → 4 3 5 2 1
3 2 4 1 2 → 4 3 5 1 2
3 2 4 1 3 → 4 2 5 1 3
3 2 4 1 4 → 3 2 5 1 4
3 2 4 1 5 → 3 2 4 1 5

  • Имя файла: perestanovki-lektsiya-6.pptx
  • Количество просмотров: 136
  • Количество скачиваний: 0