КАТЕГОРИИ:


Зарежда се ...

Астрономия- (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) П Arhitektura- (3434) Astronomiya- (809) Biologiya- (7483) Biotehnologii- (1457) Военно дело (14632) Висока технологиите (1363) Geografiya- (913) Geologiya- (1438) на държавата (451) Demografiya- ( 1065) Къщи- (47672) журналистика и SMI- (912) Izobretatelstvo- (14524) на външните >(4268) Informatika- (17799) Iskusstvo- (1338) История- (13644) Компютри- (11121) Kosmetika- (55) Kulinariya- (373) култура (8427) Lingvistika- (374) Literatura- (1642) маркетинг-(23,702) Matematika- (16,968) инженерно (1700) медицина-(12,668) Management- (24,684) Mehanika- (15423) Naukovedenie- (506) образование-(11,852) защита truda- (3308) Pedagogika- (5571) п Политика- (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) oligrafiya- (1312) Politika- (7869) Лево- (5454) Priborostroenie- (1369) Programmirovanie- (2801) производствено (97182) от промишлеността (8706) Psihologiya- (18,388) Religiya- (3217) с комуникацията (10668) Agriculture- (299) Sotsiologiya- (6455) спортно-(42,831) Изграждане, (4793) Torgovlya- (5050) превозът (2929) Turizm- (1568) физик (3942) Filosofiya- (17015) Finansy- (26596 ) химия (22929) Ekologiya- (12095) Ekonomika- (9961) Telephones- (8441) Elektrotehnika- (4623) Мощност инженерно (12629) Yurisprudentsiya- (1492) ядрена technics- (1748)

Търсене път в графиката




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

Пример 59:

Определяне на пътя между върховете на графиката представени по-долу:

A- променлива посочва в началото на пътуването

B- връх, където искате да отидете там

P ациклични път в графиката (Track-ацикличен път не е като повтарящи пикове).


домейни

горната = символ

listtop = горния *

предикати

ръб (горе, горе)

/ * Аргументи представляват имена на върховете * /

път (горе, най-добре, listtop)

/ * Пътят на предикат (отгоре, отгоре, listtop) създава списък на върховете, които изграждат пътя. * /

клаузи

ръб (а, Ь).

ръб (С, б).

край (А, С).

ръб (В, D).

край (D, Е).

път (А, А, [A ]).

път (А, В, [A \ P]): - край (А, N), пътека (N, В, Р).

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

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

Пример 60: напише програма прекосява ограничен насочено графика, представено на фигурата.


домейни

горната = символ

listtop = горния *

предикати

край (горе, отгоре)

свързан (горе, най-добре, listtop, listtop)

свързване (горе, горе)

член (горе, listtop)

клаузи

край (а, Ь).

ръб (В, С).

кант (с, а).

ръб (В, D).

ръб (D, Е).

член (А, [A | T ]): -.

елемент (А, [B | T ]): - член (А, Т).

свързан (А, Б, В, [B | V]): - край (А, В).

свързан (A, B, V, V2): - край (А, N), не (член (N, V)),

V1 = [N | V], свързани (N, В, V1, V2).

свързване (А, В): - свързан (А, В, [А], V), напиши (V).

гол

свързване (а, Ь).

Методът на "форма и да се провери"

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



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

За да напишете елемент от списък на nondeterministic избор програми korretnogo като генератор обикновено се използва предикат член на пример 36, за генериране на набор от решения. Когато се посочва елемент мишена (X, [1,2,3,4]) ще бъде дадено в необходимото разтвори последователност X = 1, х = 2, Х = 3, X = 4.

Пример 61: провери наличието на двата списъка на същия елемент.

домейни

списък = цяло число *

предикати

елемент (число, списъка)

клаузи

член (Head, [Head | _ ]).

член (Head, [_ | Tail ]): - член (главите, опашките).

пресичат (L1, L2): - елемент (X, L1), член (X, L2).

гол

пресичат ([1, 4, 3, 2] [2, 5,6]).

Първият предиката в пресичат член под-цел генерира елементи от първия списък, и от втори под-член се проверява, дали тези елементи са във втората списъка. Описването на програмата като не-детерминирана, можем да кажем, че първата цел е осъществяването на предположението, че X, се съдържа в списъка L1 и втората проверки голови дали елемент от списъка на L2 X.

Следващият член определение сказуемото с помощта на предикат Добавяне на:

член (X, Л): - добавяне (L1, [X | L2], L) по себе си е по същество една програма, която прилага принципа на "формата и провери." Въпреки това, в този случай, две стъпки на метода се обединяват в едно в процеса на обединение. Използвайки Добавяне на списък предикат се прави разделяне и веднага се извършва тест дали X е първият елемент от втория списък.

Друг пример за ползите от съединението дава програма поколение и проверка за решаването на проблема с N царици: трябва да го разположите N царици на размера NxN квадратен борда, така че всяка хоризонтална, вертикална или диагонална линия не е повече от една фигура. В първоначалната формулировка на това е да се поставят 8 царици на шахматната дъска, така че те не заплашват помежду си. От това идва името на проблема Куинс.

Този проблем е добре проучена в областта на математиката. За N = 2 и N = 3, разтворът не съществува; две симетрични разтвори когато N = 4 са показани на фиг. За N = 8, има 88 (и включително симетричен - 92) решение на този проблем.

Q
Q
Q
Q

Q
Q
Q
Q

Таблицата в Пример 62 програма е решение на проблема с N дами. Решение на проблема е представен като пермутация на списъка от 1 до N. Серийният номер на елемента в списъка определя вертикална броя и самия елемент - хоризонтална стая, на кръстовището на която стои царицата. Така разтвор [2, 4, 1 3] на проблема с четири цариците съответства на първото решение, показано на фигурата, разтвор [3, 1, 4, 2] - второто решение. Такова описание на решенията и тяхното поколение програма имплицитно се предположи, че който и да е решение на проблема на кралицата на всеки ред и всяка вертикална ще бъде една кралица.

Пример 62: програма за решаването на проблема на N дами.

домейни

списък = цяло число *

предикати

спектър (число, число, списък)

/ * Предикатна генерира списък, съдържащ броя на предварително определен обхват * /

дами (число, списък, списък, списък)

/ * Предикатна образува разтвор на цариците N в списък с решения, с първия списък - списък на текущата vapiant поставяне кралици, втория списък временно решение, за третия списък - ruzultaty * /

избере (число, списък, списък)

/ * Премахва от списъка предикат една поява на елемент * /

attack1 (число, списък)

/ * Предикат превръща атаката, да се въведе при първоначалното възлагане на разликата в броя на хоризонтали, това е направено поради ограниченията езикови Turbo Prolog * /

атака (число, число, списък)

/ * Предикат проверява състоянието на други атаки царица дами от списъка, две дами са на една и съща диагонала, на разстояние от М вертикали един от друг, ако броят на хоризонтално една дама с М-голямо от или по-малко от броя М от друга хоризонтално Queen * /

fqueens (число, списък)

клаузи

спектър (М, М, [М | T]): - М <N, М1 = М + 1, гама (M1, N, Т ).

спектър (N, N [N ]): -.

изберете (X, [X | Т1 ], Т1).

изберете (X, [Y | Т1 ], [Y | Т2]): - изберете (X, Т1, Т2).

attack1 (X, L): - атака (X, 1 L).

атака (X, N, [Y | Т2]): - N = XY; N = YX.

атака (X, М, [Y | Т2]): - N1 = N + 1, атака (X, N1, Т2 ).

дами (N, L1, L2, L3): - изберете (X, L1, L11),

не (attack1 (X, L2) ),

дами (N, L11, [X | L2], L3).

дами (N, [], L , L).

fqueens (N, L): - спектър ( 1 N, L1),

дами (N, L1, [] , L).

гол

fqueens (4, L), пишат (L) .

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

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