Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Алгоритмы с возвратом

Автор:   •  Июль 11, 2022  •  Контрольная работа  •  749 Слов (3 Страниц)  •  180 Просмотры

Страница 1 из 3

Алгоритмы с возвратом

        Алгоритмы с возвратом (backtrack) / алгоритмы последовательных испытаний используются в задачах, в которых поиск решения не подчиняется твердым правилам, а выполняется путем последовательных испытаний; если испытание не приводит к результату, то «возвращаются назад» для других попыток. Данный подход часто применяют в области искусственного интеллекта.

        Поиск всех возможных решений (схема)

Схема:

procedure Try (i: integer);

{i – глубина рекурсии}

var k: integer;
begin
 for k:=1 to m do {кол-во путей}
   begin

      выбор k-го кандидата;
     if кандидат подходит then  его запись;
       if i<n {решение не полное}

        then Try(i+1)
       else печать решения

      стереть запись  

   end

 end


Поиск первого «хорошего» решения (две схемы + пример)

Схема 1:

procedure Try;
begin
 инициация выбора кандидата;
 repeat
   выбор очередного кандидата;
   if кандидат подходит then
     begin
       его запись;
       if решение не полное then
         begin
           Try;
           if неудача then стирание записи;
         end;
     end;
 until удача or кандидатов больше нет;

end;

  Схема 2:

procedure Try (i: integer);
begin
 k:=0;
 repeat
   k:=k+1; выбор k-го кандидата
   if кандидат подходит then
     begin
       его запись;
       if i < n then
         begin
           Try(i+1);
           if неудача then стирание записи;
         end;
     end;
until удача or (k=m);

end;

Пример:

Дана система двухсторонних дорог. Найти путь от города А в город В.

const maxN=10;
type
 TIndex=1..MaxN;
 TMatr=array[TIndex,TIndex]of boolean;
 TSet=set of TIndex;
 TPath=array[TIndex] of TIndex;
var
 Roads:TMatr;
 A,B: TIndex;
 p:TPath;
 len:integer; //длина пути
 
function FindPath(t:TIndex; var visited:TSet):boolean;
var i:integer;
begin
 if t=B then result:=true
 else
   begin
     i:=1;
     result:=false;
     while (i<=MaxN) and not result do
       if Roads[t,i] and not (i in visited) then
       begin
         len:=len+1;
         P[len]:=i;
         Include(visited,i);
         result:=FindPath(i,visited);
         if not result then
         begin
           Exclude(i,visited);
           len:=len-1;
           i:=i+1;
         end;
       end
       else i:=i+1;  
   end;
end;

//Вызов рекурсии
function MainFind:boolean;
var v:TSet;
begin
 len:=1;
 P[len]:=A;
 v:=[A];
 result:=FindPath(A,v)
end;

Поиск оптимального решения (схема + пример см. Н.Вирт стр. 197)

...

Скачать:   txt (5.3 Kb)   pdf (77.6 Kb)   docx (11.6 Kb)  
Продолжить читать еще 2 страниц(ы) »
Доступно только на Essays.club