КАТЕГОРИЯ:


Астрономия- (809) Биология- (7483) Биотехнологии- (1457) Военное дело- (14632) Высокие технологии- (1363) География- (913) Геология- (1438) Государство- (451) Демография- (1065) Дом- (47672) Журналистика и СМИ- (912) Изобретательство- (14524) Иностранные языки- (4268) Информатика- (17799) Искусство- (1338) История- (13644) Компьютеры- (11121) Косметика- (55) Кулинария- (373) Культура- (8427) Лингвистика- (374) Литература- (1642) Маркетинг- (23702) Математика- (16968) Машиностроение- (1700) Медицина- (12668) Менеджмент- (24684) Механика- (15423) Науковедение- (506) Образование- (11852) Охрана труда- (3308) Педагогика- (5571) Полиграфия- (1312) Политика- (7869) Право- (5454) Приборостроение- (1369) Программирование- (2801) Производство- (97182) Промышленность- (8706) Психология- (18388) Религия- (3217) Связь- (10668) Сельское хозяйство- (299) Социология- (6455) Спорт- (42831) Строительство- (4793) Торговля- (5050) Транспорт- (2929) Туризм- (1568) Физика- (3942) Философия- (17015) Финансы- (26596) Химия- (22929) Экология- (12095) Экономика- (9961) Электроника- (8441) Электротехника- (4623) Энергетика- (12629) Юриспруденция- (1492) Ядерная техника- (1748) Arhitektura- (3434) Astronomiya- (809) Biologiya- (7483) Biotehnologii- (1457) Военни бизнесмен (14632) Висока technologies- (1363) Geografiya- (913) Geologiya- (1438) на държавата (451) Demografiya- ( 1065) Къща- (47672) журналистика и смирен (912) Izobretatelstvo- (14524) външен >(4268) Informatika- (17799) Iskusstvo- (1338) историята е (13644) Компютри- (11,121) Kosmetika- (55) Kulinariya- (373) културата е (8427) Lingvistika- (374) Literatura- (1642) маркетинг-(23702) математиците на (16968) Механична инженерно (1700) медицина-(12668) Management- (24684) Mehanika- (15423) Naukovedenie- (506) образователна (11852) truda- сигурност (3308) Pedagogika- (5571) Poligrafiya- (1312) Politika- (7869) Лево- (5454) Priborostroenie- (1369) Programmirovanie- (2801) производствено (97 182 ) индустрия- (8706) Psihologiya- (18388) Religiya- (3217) Svyaz (10668) Agriculture- (299) Sotsiologiya- (6455) на (42831) спортист строително (4793) Torgovlya- (5050) транспорт ( 2929) Turizm- (1568) физик (3942) Filosofiya- (17015) Finansy- (26596) химия (22929) Ekologiya- (12095) Ekonomika- (9961) Electronics- (8441) Elektrotehnika- (4623) Мощност инженерно ( 12629) Yurisprudentsiya- (1492) ядрена technics- (1748)

Генериране на пермутации в лексикографски ред

ТЕМА 2. генериращи пермутации

алгоритми комбинаторика

(Лекции 2001 броя)

Санкт Петербург

При решаването на някои проблеми е необходимо да се генерира пермутации на N-ти ред. Най-често, генериране на пермутации, свързани с сортиране задачи, в които това решение представлява пермутация с конкретни желаните свойства. За да намерите нужната пермутация ние обхождане през всички възможни пермутации и се проверява за всеки изпълнение на този конкретен имот. Следващо поколение на пермутации определя множеството от всички пермутации на определен ред, а именно: Нека е и ж пермутация, а след това е <г, ако в това поколение пермутация е ж появява по-рано рокади.

Например, да предположим, ние Рубик демонтирани в отделни части и сглобен един на случаен принцип. След това, ние искаме да се провери дали може да се преобразува по такъв начин, че всички нейни лица са един и същи цвят. Моделиране такава задача на компютър, очевидно ще изисква генериране на пермутации.

От друга страна, обикновено имат добре определени аргументи в полза на избора на конкретен поръчване на пермутации в генерирането на проектното решение. В действителност, тази цел се определя алгоритъм генерира пермутации. Най-често тези алгоритми се основават на схемата, когато всеки следващ пермутация се изчислява като функция на предишния.

Забележка. Интересен въпрос е, какво, за пермутация може да бъде генерирана в разумен срок, на съвременните компютри? Поради факта, че общият брой на пермутации на N-ти ред е равна на N!, Съвременни компютри позволяват да се генерира пермутации на не повече от 16-ти ред (оправдават!).

На първо място, ние считаме, алгоритми за генериране на всички пермутации в лексикографски ред. Тази цел е странно подреждане на думи в различни речници, така че често се нарича речника. Тя се характеризира с това, че буквите от азбуката, се считат подреден набор, и думите в речника са подредени започват с по-малките (по-рано, изброени по азбучен на) писма, а след това по-големите. Думи, започващи със същите букви, подредени по реда на втората буква в думата, и така нататък. За пермутации на комплектът {1,2, ..., М} се считат за броя подредени по естествен начин. Формално, ние може да даде следното определение за лексикографски пермутации ред.

Определение. Нека F = <a 1 ,...,a n>, г = <б 1, ..., б н>, ние казваме, че е <г в лексикографски ред, ако има k³1 така, че к <б К и Q = б р за р <к.

Пример. За п = 4 в лексикографски ред пермутации на са разположени както следва:



1. <1, 2, 3, 4> 7. <2, 1, 3, 4> 13. <3, 1, 2, 4> 19. <4, 1, 2, 3>
2. <1, 2, 4, 3> 8. <2, 1, 4, 3> 14. <3, 1, 4, 2> 20. <4, 1, 3, 2>
3. <1, 3, 2, 4> 9. <2, 3, 1, 4> 15. <3, 2, 1, 4> 21. <4, 2, 1, 3>
4. <1, 3, 4, 2> 10. <2, 3, 2, 4> 16. <3, 2, 4, 1> 22. <4, 2, 3, 1>
5. <1, 4, 2, 3> 11. <2, 4, 1, 3> 17. <3, 4, 1, 2> 23. <4, 3, 1, 2>
6. <1, 4, 3, 2> 12. <2, 4, 3, 1> 18. <3, 4, 2, 1> 24. <4, 3, 2, 1>

Лексикографски ред може да се тълкува така. Нека всеки пермутация се тълкува като цяло число, записано в позиционна система п-ри (с цифрите от "0" "" 1 ", ...," N-1 "« 'N'). След това ги генерира в лексикографски ред - списък в реда на нарастване на номера, състоящи се от п различни номера.

Нашата цел е да се изгради един алгоритъм за генериране на всички пермутации в лексикографски ред за произволен п. За да направите това, ще разберем как да се погледнем в следващото поколение пермутация, ако знаем на ток, при условие, че сегашната пермутация не е последният в едно поколение. Нека разгледаме свойствата на лексикографски ред на генериране на пермутации:

A1) В Първообразът на елементите са подредени във възходящ ред, в последния - в низходящ (докаже този имот за всяко п).

А2) Последователността на пермутации може да бъде разделена на блокове с дължина N (N-1)!, Съответните нарастващи стойности на елементите в първото положение. Останалите N-1 блокчета, съдържащи р елемент в първото положение, определящи последователността на пермутации на комплекта {1, ..., N} / {р} в лексикографското ред.

Този имот е лесно илюстрира с примера на поколението на пермутации на 4-ред. Лесно е да се види, че всички пермутации от порядъка на 4-разделени на четири колони, с пермутации в първата колона на първата позиция е елемент 1, втората - точка 2, и така нататък. Освен това, във всяка колонка елементи, подредени в пермутации от 2-ри за 4-то положение, тези елементи формират пермутация в лексикографски ред. За първите колона пермутация елементи 2,3,4; за втората - 1,3,4; трето - 1,2,4; за четвърти 1,2,3. Имайте предвид също, че във всяка колона на елементи, разположени с втората най-четвърта позиция в Първообразът образуват възходяща последователност и последната Първообразът на тези елементи са подредени в низходящ последователност (L1 лексикографски поръчка имот).

По този начин, ако ние считаме пермутация на всяка колона, елементите, намиращи се от 2 до 4 в позицията за пълното прилагане на свойствата на L1 и L2. Това наблюдение води до следното обобщение на характеристиките на А2 за пермутации на произволен ред:

L3) последователност от пермутации може да бъде разделена на N * (N-1) * ... * (N-к + 1) блокове избор на стойности на ± 1, ..., р к елементи, разположени на първите к позиции. По този начин, на блок стр 1, ..., стр к р предхожда Блок 1, ..., р к, ако р е 1, ..., стр к е по-малко от Q 1, ..., р к в лексикографски ред. В допълнение, за всеки такъв пермутация генерализирана блокови елементи, подредени с к + 1 чрез н-та позиция представлява генерираща пермутации на тези елементи в лексикографски ред.

Сега ние сме готови да се формулира най-важната лексикографски ред на имота, въз основа на които е лесно да конвертирате тока за следващия пермутация. Този имот може да бъде написано като:

A4) Всяко текущата пермутация е на финала за генерализиран блок. Този блок се определя от елементите на текущата пермутация, разположен на позициите в края на пермутации и представляват максималните възможни стойности намаляват пермутация последователност елементи. Валидността на последната забележка следва от свойствата на L1 лексикографски ред.

В бъдеще, възможно най-голяма стойност низходяща последователност пермутация на елементите, намиращи се на позициите в края на пермутация се нарича "опашка" рокади.

Примери. Помислете за генериране на пермутации на ред 4, показани по-горе, след това:

Пренареждане <2,1,4,3> е на финала за блок, състоящ се от пермутации 7. <2,1,3,4> и 8 <2,1,4,3>, елементите 4,3 форма на опашката;

Пренареждане <3,1,2,4> е на финала за блок, състоящ се от една пермутация 13. <3,1,2,4>, опашката му се състои от един-единствен елемент - 4;

Пренареждане <2,4,3,1> е на финала за втората колона на намалено производство на опашката си - 4,3,1;

Пренареждане <4,3,2,1> се затваря за целия поколение на пермутации на ред 4 и опашката му съвпада с целия пермутация.

Как да използвате този имот за преобразуване на тока за следващия пермутация. Това може да стане чрез следния алгоритъм:

1. Изберете опашката текущата пермутация;

2. Ако не е цялата пермутация, след това погледнете в края на опашката на първа пермутация елемент голяма пермутация елемент, разположен точно пред опашката си (ако пермутация съвпада с опашката си, то е окончателно при всички поколение);

3. Swap елемент намерен в предходния параграф, с елемента намира непосредствено преди опашката за преустройство;

4. наше разположение всички елементи, трансформирани в параграф 3 пермутация опашка в обратна (инвертна Първообразът на трансформирания опашката).

Примери. Пренареждане <2,1,4,3> се заменя с по-горе алгоритъм в пермутация <2,3,1,4>, и обмен <3,1,2,4> в <3,1,4,2>. Помислете за пренареждане на реда от 15 <15,2,4,3,1,13,7,10,14,12,11,9,8,6,5>, то се превръща в <15,2,4,3, 1,13,7,11,5,6,8,9,10,12,14>.

Упражнение. Новото разпределение превръща следните пермутации: а) п = 3, <2,3,1>; б) п = 5, <2,5,4,3,1>;

а) N = 7, <4,5,2,3,1,6,7>; ж) п = 8, <2,4,3,6,8,7,5,1>.

Забележка 1. Възможно е да се извърши официално доказателство за факта, че преобразува по този пермутация алгоритъм прави същото с следното след текущата пермутация в лексикографски ред. Въпреки това, ние се пропусне такова доказателство.

Забележка 2. По-горе алгоритъм превръщане на настоящите промени в следното може да бъде официално писмено, както следва:

Нека р = <P 1, ..., стр К, ..., стр J, ..., стр п>, където

1 £ к <п р к <п к 1 и Q: к <р <п бъде п р> п р 1

(Когато р = <N, N-1, ..., 1>, К = 0),

й> к и р к> р к и р: J <р £ п бъде п р <р к;

След това следват пермутация P, когато k¹0, има формата

<P 1, ..., стр К -1, стр J, стр N, P N 1, ..., стр J 1, стр К, стр J-1, ..., стр к 1> ,

Сега ние можем лесно да пиша на Паскал алгоритъм за генериране на всички пермутации в лексикографски ред. Тя се основава на търсенето на к и к в настоящата пермутация, елементи транспониране р к и р й и обръщане ee'hvosta ":

програма LEX;

Конст п = ...; {} Цел на пермутации

Var р: масив [0..n] от 0..n; {Current} пермутация

К: 0..n; J, R, m: 1..N;

<== Предишна лекция | На следващата лекция ==>
| Генериране на пермутации в лексикографски ред

; Дата: 04.01.2014; ; Прегледи: 384; Нарушаването на авторските права? ;


Ние ценим Вашето мнение! Беше ли полезна публикуван материал? Да | не



ТЪРСЕНЕ:


Вижте също:



ailback.ru - Edu Doc (2013 - 2017) на година. Тя не е автор на материали, и дава на студентите с безплатно образование и използва! Най-новото допълнение , Al IP: 11.45.9.26
Page генерирана за: 0.049 сек.