Temat: Technika powrotów (ang. backtracking). Schemat algorytmu i

Transkrypt

Temat: Technika powrotów (ang. backtracking). Schemat algorytmu i
Temat: Technika powrotów (ang. backtracking).
Schemat algorytmu i przykłady zastosowania.
Przypomnienie
Porównanie czasów realizacji algorytmu wykładniczego na
dwóch komputerach o ró nej szybko ci wykonania operacji
elementarnej
Rozmiar n 20
Czas
1,04 s
działania
(2
n
/ 10
6
)
Czas
działania
(2
n
/ 10
9
)
0,001 s
50
35,7 lat
100
200
4 ⋅ 1014
wieków
5 ⋅ 10 44
wieków
13 dni
4 ⋅ 1011
5 ⋅ 10 41
wieków
wieków
Problemy łatwo rozwi zalne to takie, dla których mo na
poda algorytm o wielomianowej zło ono ci czasowej, czyli
taki, którego koszt jest O(nk) (dla pewnego stałego k).
Problemy o zło ono ci wy szej ni wielomianowa, czyli
takiej, e nie da si jej ograniczy przez O(nk), dla dowolnego
k, nazywamy trudno rozwi zalnymi.
W ród problemów trudno rozwi zalnych wyró nia si :
• Klas problemów, dla których, mo na udowodni , e
nie istnieje algorytm wielomianowy.
• Klas problemów, dla których, jak do tej pory nie udało si
poda dowodu na brak wielomianowego rozwi zania.
1
Strategia powrotów, to strategia pozwalaj ca na
skonstruowanie
optymalnego
rozwi zania
ponadwielomianowego, w przypadku, gdy nie potrafimy poda
rozwi zania wielomianowego albo wiemy,
e takie
rozwi zanie nie istnieje.
1. Schemat algorytmu typu backtracking
Przyjmijmy, e dana jest przestrze stanów, przy czym stan
jest sytuacj stanowi c rozwi zanie problemu albo mog c
prowadzi do rozwi zania oraz sposób przechodzenia z
jednego stanu w drugi.
Aby rozwi za
taki problem, musimy przeszuka
przestrze stanów, przechodz c z jednego stanu w drugi, a
znajdziemy si w stanie okre laj cym rozwi zanie problemu.
Poniewa
dla ka dego stanu mo e istnie
wiele
dopuszczalnych ruchów, czyli wiele stanów, do których
mo na doj , mo emy wybra złe posuni cie. Je eli
wykonamy zły ruch i znajdziemy si w sytuacji bez wyj cia
(nie osi gaj c poprawnego rozwi zania i nie maj c wi cej
dopuszczalnych posuni
do wykonania), musimy cofn
ostatni ruch i spróbowa zrobi inny. Je eli cofni cie
ostatniego ruchu w dalszym ci gu nie prowadzi do
rozwi zania, to cofamy ruch przedostatni i próbujemy dalej.
Ta metoda nosi nazw metody powrotów.
Metoda powrotów wymaga zapami tania wszystkich
wykonanych ruchów czy te wszystkich odwiedzonych
stanów, aby mo liwe było cofanie przesuni .
Naturaln technik kodowania algorytmów opartych na
strategii powrotów jest rekurencja.
2
Schemat algorytmu z powrotami
Oznaczenia: <x1, ..., xn> - szukane rozwi zanie
Ak - zbiór mo liwych rozszerze rozwi zania
cz ciowego <x1, ..., xk-1>
P – funkcja (algorytm), która dla danego
rozwi zania cz ciowego <x1, ..., xi>
przyjmuje warto 0, gdy ci g <x1, ..., xi>
nie daje si rozszerzy do rozwi zania
całkowitego, a 1 w przeciwnym
przypadku.
k – aktualna długo rozwi zania cz ciowego
BackTracking(k)
for y ∈ Ak
if (P(x1 , x2 ,..., xk −1 , y ) == 1)
{
x k = y;
if „ x1 , x 2 ,..., x k jest rozwi zaniem całkowitym"
"wypisz rozwi zanie x1 , x 2 ,..., x k
else BackTracking(k+1);
Ak = Ak ∪ {y};
}
2. Przykłady zastosowania schematu powrotów
a) Problem znalezienia drogi (cyklu) Hamiltona w grafie
Droga (cykl) Hamiltona w grafie to droga (cykl)
przechodz ca przez wszystkie wierzchołki grafu dokładnie
raz.
3
Nie istnieje jednoznaczne kryterium, które pozwala, tak jak w
przypadku drogi (cyklu) Eulera stwierdzi , czy dany graf ma
drog (cykl) Hamiltona.
Przykład
2
3
1
5
4
Powy szy graf ma wiele cykli Hamiltona, np.: 1-2-3-5-4-1
Algorytm naiwny
Stosujemy pełny przegl d wszystkich mo liwo ci, tj.
generujemy wszystkie mo liwe permutacje zbioru n–1
elementowego, gdzie n jest liczb wierzchołków grafu i
sprawdzamy, czy okre laj one cykl (drog ) Hamiltona.
Koszt algorytmu naiwnego
Zakładaj c, e szukamy wszystkich cykli z ustalonego
wierzchołka startowego, koszt algorytmu naiwnego jest równy
T (n ) = (n − 1)! ⋅ n
4
Rozwi zanie problemu znajdowania
Hamiltona oparte na strategii powrotów
wszystkich
cykli
G – graf o n wierzchołkach ponumerowanych od 1 do n ,
s – wierzchołek startowy
X – tablica z wierzchołkami analizowanego rozwi zania
cz ciowego
DOP – tablica logiczna rejestruj ca mo liwo wykorzystania
wierzchołków w cyklu; DOP[i]=1, gdy wierzchołek
mo e by wykorzystany w aktualnie generowanym
rozwi zaniu cz ciowym, DOP[i]=0, gdy wierzchołek
i został ju wykorzystany w generowanym
cyklu.
k – długo rozwi zania cz ciowego
Hamilton(k)
y=X[k-1];
for (v∈V && (v, y) ∈E)
{
if (k = = n +1 && v == s) “X zawiera cykl Hamiltona”;
else if DOP[v])
{
X[k]=v;
DOP[v]=0;
Hamilton(k +1);
DOP[v]=1;
}
}
Wywołanie funkcji Hamilton
for (i=1; i<=n; i++) do DOP[i]=1;
X[1]=s;
5
DOP[s]=0;
Hamilton(2);
Przykład
2
3
1
5
4
1
2
4
5
3
4
5
5
3
4
4
1
1
4
3
5
3
2
5
5
2
1
3
2
2
3
6
1
Zło ono czasowa algorytmu generowania cykli Hamiltona
Drzewo mo liwych "rozszerze " rozwi zania cz ciowego
jest drzewem wielokierunkowym o wysoko ci równej co
najwy ej n. Je eli za operacj elementarn przyjmiemy ka de
wywołanie rekurencyjne procedury Hamilton, to koszt
algorytmu jest równy liczbie w złów w drzewie. Mo na
pokaza , e liczba ta jest O(2n).
b) Problem ustawienia hetmanów na szachownicy
Problem ten rozwa any był po raz pierwszy przez Gaussa w
1850 roku i polega na znalezieniu takiego ustawienia o miu
hetmanów na szachownicy, aby aden z hetmanów nie
szachował adnego innego (hetman szachuje inne figury w
tym samym wierszu i kolumnie, w której stoi i dodatkowo po
przek tnych). Szachownica w problemie Gaussa miała
wymiary 8x8.
Przykład
Pola szachowane przez figur hetmana. Pole na którym stoi
hetman jest oznaczone liter H, a pola szachowane przez
hetmana s wypełnione liter S.
S
S
S
S S S
S S S H S S S S
S S S
S
S
S
S
S
S
S
S
S
7
Idea algorytmu
Próbujemy umie ci pierwszego hetmana na szachownicy,
potem drugiego, ale tak, by nie mógł zbi pierwszego,
nast pnie trzeciego tak, aby nie był w konflikcie z dwoma ju
postawionymi i tak dalej, dopóki nie umie cimy wszystkich.
Je li na przykład szósty hetman nie mo e by umieszczony na
adnej pozycji nie koliduj cej z wcze niejszymi, to
wykonujemy powrót i wybieramy inn pozycj dla pi tego
hetmana i próbujemy znowu ustawi szóstego. Je li to nie
pomaga, to ponownie przestawiamy pi tego. Je li wszystkie
mo liwo ci dla pi tego hetmana zostały wyczerpane,
przestawiamy czwartego i proces zaczyna si od nowa.
Algorytm szuka wszystkich mo liwych rozwi za . Dla
szachownicy 8 na 8 jest ich a 92.
Przykład
Przykładowe rozwi zanie problemu ustawienia o miu
hetmanów.
8
Pseudokod algorytmu rozwi zuj cego problem ustawienia
hetmanów
n - rozmiar szachownicy; liczba pól w pionie i poziomie i
jednocze nie liczba hetmanów do ustawienia
PutQueen(r)
r – numer wiersza, w którym próbujemy ustawi hetmana
for (c = 0;c< n; c++)
if („pozycja [r, c] nie jest atakowana”)
{
„umie hetmana na pozycji [r, c]”;
if (r < n-1) PutQueen(r+1);
else „wypisz rozwi zanie”;
„usu hetmana z pozycji [r, c]”;
}
Optymalna implementacja powy szego pseudokodu powinna
w krótkim czasie realizowa nast puj ce operacje:
• sprawdzenie, czy pozycja [r, c] nie jest atakowana,
• umie hetmana na pozycji [r, c],
• usu hetmana z pozycji [r, c].
Zauwa my, e:
• Indeksy wszystkich pól na "lewych przek tnych" spełniaj
warunek: r + c = nl, gdzie nl jest numerem lewej
przek tnej. nl przyjmuje warto od 0 do 2n-1.
• Indeksy wszystkich pól na "prawych przek tnych"
spełniaj warunek: r - c = nr, gdzie nr jest numerem prawej
przek tnej. nr przyjmuje warto od -n+1 do n-1.
9
Przykład
Dla uproszczenia przyjrzyjmy si szachownicy 4 na 4.
Wiersze i kolumny szachownicy ponumerujemy liczbami od 0
do 3.
0, 0
0, 1
0, 2
0, 3
1, 0
1, 1
1, 2
1, 3
2, 0
2, 1
2, 2
2, 3
3, 0
3, 1
3, 2
3, 3
• Struktura danych dla wszystkich lewych przek tnych to
jednowymiarowa tablica logiczna LeftDiagonal. Je eli
LeftDiagonal[i]=0, to lewa przek tna o numerze i jest
szachowana.
• Struktura danych dla wszystkich prawych przek tnych to
jednowymiarowa tablica logiczna RightDiagonal. Je eli
RightDiagonal[i]=0, to prawa przek tna o numerze i jest
szachowana.
• Potrzebna b dzie podobna tablica dla kolumn Column.
Je eli Column[i]=0, to kolumna o numerze i jest
szachowana.
Nie jest potrzebna tablica dla wierszy, poniewa i - ty
hetman "w druje" wzdłu wiersza i, a wszystkie hetmany o
numerach mniejszych ni i zostały ju ustawione w wierszach
o numerach mniejszych ni i.
10
• Tablica PositionInRow to tablica jednowymiarowa, która
przechowuje rozwi zania cz ciowe i całkowite problemu.
Je eli PositionInRow[i]=j, to hetman z wiersza i jest
ustawiony w kolumnie o numerze j.
Algorytm rozwi zuj cy problem ustawienia czterech
hetmanów
n – rozmiar szachownicy
LeftDiagonal – tablica logiczna o indeksach od 0 do 2n-2
RightDiagonal - tablica logiczna o indeksach od -n+1 do n-1
Column – tablica logiczna o indeksach od 0 do n-1
PositionInRow – tablica wynikowa
PutQueen(r)
for (c=0; c<n; c++)
if (Column[c] && LeftDiagonal[r+c]
&& RightDiagonal[r-c])
{
PositionInRow[r]=c;
Column[c]=0;
LeftDiagonal[r+c]=0;
RightDiagonal[r-c]=0;
if (r < n-1) PutQueen(r + 1);
else “wypisz wynik –PositionInRow”;
Column[c]=1;
LeftDiagonal[r + c]=1;
RightDiagonal[r - c]=1;
};
11
Kroki prowadz ce do pierwszego udanego ustawienia czterech
hetmanów, wykonywane przez funkcj PutQueen
PutQueen(0)
(0,0)
(0,1)
(1,2)
(1,3)
(1,3)
(2,0)
(2,1)
(3,2)
Zmiany w czterech tablicach wykorzystanych w funkcji
PutQueen
PositionInRow
0
0
0
1
1
2
3
3
2
1
0
3
2
0
0
0
0
Column
1
1
0
0
2
0
1
0
3
1
0
0
0
0
0
1
1
1
1
0
LeftDiagonal
2
1
1
0
3 4 5 6
0 1 1 1
0 0 1 1
1 0 0 1
-3
1
1
1
-2
1
0
0
RightDiagonal
-1 0 1 2 3
0 0 1 1 1
1 0 0 1 1
0 1 0 0 1
c) Problem kolorowania grafu
WP: Graf bez wag G=<V, E> i ustalona liczba barw c.
WK: Odpowied na pytanie: Czy graf G mo na pomalowa c
kolorami?
12
Def.
Graf G mo na pomalowa c kolorami, gdy istnieje
przyporz dkowanie wierzchołkom grafu numerów kolorów od
1 do c takie, aby s siednie (poł czone kraw dzi ) wierzchołki
grafu G nie były pomalowane tym samym kolorem.
Przykład
Algorytm naiwny
Sprawdzamy wszystkie mo liwe przydziały kolorów o numerach od 1
do c wierzchołkom grafu.
Zło ono czasowa algorytmu naiwnego
Liczba mo liwych przydziałów kolorów dla liczby barw równej c
wynosi cn.
Algorytm oparty na strategii powrotów
Kolorowanie(k)
{
for ( i=1; i<=c; i++)
{
if (czy_mozna_pomalowac(k, i))
{
C[k]=i;
13
}
}
if (k==n) „wypisz C”
else Kolorowanie(k+1);
C[1]=1;
Kolorowanie(2);
14

Podobne dokumenty