• Nie Znaleziono Wyników

rekurencja poszukiwanie z nawrotami

N/A
N/A
Protected

Academic year: 2021

Share "rekurencja poszukiwanie z nawrotami"

Copied!
115
0
0

Pełen tekst

(1)

szachownica

Backtracking zaj ˛ecia 4.

(2)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Algorytm rekurencyjny:

rozwi ˛azuje problem przez rozwi ˛azanie pewnej liczby prostszych przypadków tego samego problemu

zapisujemy za pomoc ˛a funkcji rekurencyjnej, czyli

wywołuj ˛acej sam ˛a siebie

przykładem mo˙ze by´c omówione wcze´sniej sortowanie przez scalanie

(3)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Algorytm rekurencyjny:

rozwi ˛azuje problem przez rozwi ˛azanie pewnej liczby prostszych przypadków tego samego problemu zapisujemy za pomoc ˛a funkcji rekurencyjnej, czyli wywołuj ˛acej sam ˛a siebie

przykładem mo˙ze by´c omówione wcze´sniej sortowanie przez scalanie

(4)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Algorytm rekurencyjny:

rozwi ˛azuje problem przez rozwi ˛azanie pewnej liczby prostszych przypadków tego samego problemu zapisujemy za pomoc ˛a funkcji rekurencyjnej, czyli wywołuj ˛acej sam ˛a siebie

przykładem mo˙ze by´c omówione wcze´sniej sortowanie przez scalanie

(5)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Fn— n-ta liczba Fibonacciego

F0=F1=1

Fn=Fn−1+Fn−2dla n > 1

n 0 1 2 3 4 5 6 7

Fn 1 1 2 3 5 8 13 21

zwi ˛azek z królikami

Obliczanie Fn— 1. podej´scie int fib(int n){

if(n <= 1) return 1; return fib(n-1)+fib(n-2); }

(6)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Fn— n-ta liczba Fibonacciego

F0=F1=1

Fn=Fn−1+Fn−2dla n > 1

n 0 1 2 3 4 5 6 7

Fn 1 1 2 3 5 8 13 21

zwi ˛azek z królikami

Obliczanie Fn— 1. podej´scie int fib(int n){

if(n <= 1) return 1; return fib(n-1)+fib(n-2); }

(7)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Fn— n-ta liczba Fibonacciego

F0=F1=1

Fn=Fn−1+Fn−2dla n > 1

n 0 1 2 3 4 5 6 7 Fn 1 1 2 3 5 8 13 21

zwi ˛azek z królikami

Obliczanie Fn— 1. podej´scie int fib(int n){

if(n <= 1) return 1; return fib(n-1)+fib(n-2); }

(8)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Fn— n-ta liczba Fibonacciego

F0=F1=1

Fn=Fn−1+Fn−2dla n > 1

n 0 1 2 3 4 5 6 7 Fn 1 1 2 3 5 8 13 21

zwi ˛azek z królikami

Obliczanie Fn— 1. podej´scie int fib(int n){

if(n <= 1) return 1; return fib(n-1)+fib(n-2); }

(9)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Fn— n-ta liczba Fibonacciego

F0=F1=1

Fn=Fn−1+Fn−2dla n > 1

n 0 1 2 3 4 5 6 7 Fn 1 1 2 3 5 8 13 21

zwi ˛azek z królikami

Obliczanie Fn— 1. podej´scie int fib(int n){

if(n <= 1) return 1; return fib(n-1)+fib(n-2); }

(10)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Fn— n-ta liczba Fibonacciego

F0=F1=1

Fn=Fn−1+Fn−2dla n > 1

n 0 1 2 3 4 5 6 7 Fn 1 1 2 3 5 8 13 21

zwi ˛azek z królikami

Obliczanie Fn— 1. podej´scie

int fib(int n){

if(n <= 1) return 1; return fib(n-1)+fib(n-2); }

(11)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Analiza zło˙zono´sci

policzmy ile razy wywołamy fib(0) lub fib(1) licz ˛ac fib(n)

licz ˛ac fib(0) lub fib(1) zrobimy jedno wywołanie

licz ˛ac fib(2) zrobimy 2 wywołania

licz ˛ac fib(3) zrobimy 3 wywołania

licz ˛ac fib(4) zrobimy 5 wywoła ´n . . . licz ˛ac fib(n) zrobimy Fnwywoła ´n

(12)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Analiza zło˙zono´sci

policzmy ile razy wywołamy fib(0) lub fib(1) licz ˛ac fib(n)

licz ˛ac fib(0) lub fib(1) zrobimy jedno wywołanie

licz ˛ac fib(2) zrobimy 2 wywołania

licz ˛ac fib(3) zrobimy 3 wywołania

licz ˛ac fib(4) zrobimy 5 wywoła ´n . . . licz ˛ac fib(n) zrobimy Fnwywoła ´n

(13)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Analiza zło˙zono´sci

policzmy ile razy wywołamy fib(0) lub fib(1) licz ˛ac fib(n)

licz ˛ac fib(0) lub fib(1) zrobimy jedno wywołanie licz ˛ac fib(2) zrobimy 2 wywołania

licz ˛ac fib(3) zrobimy 3 wywołania

licz ˛ac fib(4) zrobimy 5 wywoła ´n . . . licz ˛ac fib(n) zrobimy Fnwywoła ´n

(14)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Analiza zło˙zono´sci

policzmy ile razy wywołamy fib(0) lub fib(1) licz ˛ac fib(n)

licz ˛ac fib(0) lub fib(1) zrobimy jedno wywołanie licz ˛ac fib(2) zrobimy 2 wywołania

licz ˛ac fib(3) zrobimy 3 wywołania

licz ˛ac fib(4) zrobimy 5 wywoła ´n . . . licz ˛ac fib(n) zrobimy Fnwywoła ´n

(15)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Analiza zło˙zono´sci

policzmy ile razy wywołamy fib(0) lub fib(1) licz ˛ac fib(n)

licz ˛ac fib(0) lub fib(1) zrobimy jedno wywołanie licz ˛ac fib(2) zrobimy 2 wywołania

licz ˛ac fib(3) zrobimy 3 wywołania licz ˛ac fib(4) zrobimy 5 wywoła ´n . . .

licz ˛ac fib(n) zrobimy Fnwywoła ´n

(16)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Analiza zło˙zono´sci

policzmy ile razy wywołamy fib(0) lub fib(1) licz ˛ac fib(n)

licz ˛ac fib(0) lub fib(1) zrobimy jedno wywołanie licz ˛ac fib(2) zrobimy 2 wywołania

licz ˛ac fib(3) zrobimy 3 wywołania licz ˛ac fib(4) zrobimy 5 wywoła ´n . . . licz ˛ac fib(n) zrobimy Fnwywoła ´n

(17)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Analiza zło˙zono´sci

policzmy ile razy wywołamy fib(0) lub fib(1) licz ˛ac fib(n)

licz ˛ac fib(0) lub fib(1) zrobimy jedno wywołanie licz ˛ac fib(2) zrobimy 2 wywołania

licz ˛ac fib(3) zrobimy 3 wywołania licz ˛ac fib(4) zrobimy 5 wywoła ´n . . . licz ˛ac fib(n) zrobimy Fnwywoła ´n

(18)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Jak szybko rosn ˛a?

Liczby Fibonacciego rosn ˛a wykładniczo. Dowód:

1 Fn+1 >Fn 2 F

n+2 =Fn+1+Fn=2Fn+Fn−1 ­ 2Fn 3 F

2n+2 ­ F2n+1­ 2nF1=2n (czyli Fnrosn ˛a co najmniej

wykładniczo)

4 F

n+1 ¬ 2Fn, wi ˛ec Fn¬ 2n(czyli Fnrosn ˛a co najwy˙zej

(19)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Jak szybko rosn ˛a?

Liczby Fibonacciego rosn ˛a wykładniczo. Dowód:

1 Fn+1 >Fn 2 F

n+2 =Fn+1+Fn=2Fn+Fn−1 ­ 2Fn 3 F

2n+2 ­ F2n+1­ 2nF1=2n (czyli Fnrosn ˛a co najmniej

wykładniczo)

4 F

n+1 ¬ 2Fn, wi ˛ec Fn¬ 2n(czyli Fnrosn ˛a co najwy˙zej

(20)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Jak szybko rosn ˛a?

Liczby Fibonacciego rosn ˛a wykładniczo. Dowód:

1 Fn+1 >Fn 2 F

n+2 =Fn+1+Fn=2Fn+Fn−1 ­ 2Fn 3 F

2n+2 ­ F2n+1­ 2nF1=2n (czyli Fnrosn ˛a co najmniej

wykładniczo)

4 F

n+1 ¬ 2Fn, wi ˛ec Fn¬ 2n(czyli Fnrosn ˛a co najwy˙zej

(21)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Jak szybko rosn ˛a?

Liczby Fibonacciego rosn ˛a wykładniczo. Dowód:

1 Fn+1 >Fn 2 F

n+2 =Fn+1+Fn=2Fn+Fn−1 ­ 2Fn 3 F

2n+2 ­ F2n+1­ 2nF1=2n (czyli Fnrosn ˛a co najmniej

wykładniczo)

4 F

n+1 ¬ 2Fn, wi ˛ec Fn¬ 2n(czyli Fnrosn ˛a co najwy˙zej

(22)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Jak szybko rosn ˛a?

Liczby Fibonacciego rosn ˛a wykładniczo. Dowód:

1 Fn+1 >Fn 2 F

n+2 =Fn+1+Fn=2Fn+Fn−1 ­ 2Fn 3 F

2n+2 ­ F2n+1­ 2nF1=2n (czyli Fnrosn ˛a co najmniej

wykładniczo)

4 F

n+1 ¬ 2Fn, wi ˛ec Fn¬ 2n(czyli Fnrosn ˛a co najwy˙zej

(23)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Jak to poprawi´c?

nie trzeba liczy´c tych samych warto´sci wielokrotnie

mo˙zemy zapisywa´c ju˙z policzone warto´sci w tablicy

Obliczanie Fn— 2. podej´scie int fib[MAXN+1]; fib[0]=fib[1]=1; for(int n=2;n<=MAXN;n++) fib[n]=fib[n-1]+fib[n-2]; Zło˙zono´s´c: O(n)

(24)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Jak to poprawi´c?

nie trzeba liczy´c tych samych warto´sci wielokrotnie mo˙zemy zapisywa´c ju˙z policzone warto´sci w tablicy

Obliczanie Fn— 2. podej´scie int fib[MAXN+1]; fib[0]=fib[1]=1; for(int n=2;n<=MAXN;n++) fib[n]=fib[n-1]+fib[n-2]; Zło˙zono´s´c: O(n)

(25)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Jak to poprawi´c?

nie trzeba liczy´c tych samych warto´sci wielokrotnie mo˙zemy zapisywa´c ju˙z policzone warto´sci w tablicy

Obliczanie Fn— 2. podej´scie int fib[MAXN+1]; fib[0]=fib[1]=1; for(int n=2;n<=MAXN;n++) fib[n]=fib[n-1]+fib[n-2]; Zło˙zono´s´c: O(n)

(26)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Jak to poprawi´c?

nie trzeba liczy´c tych samych warto´sci wielokrotnie mo˙zemy zapisywa´c ju˙z policzone warto´sci w tablicy

Obliczanie Fn— 2. podej´scie int fib[MAXN+1]; fib[0]=fib[1]=1; for(int n=2;n<=MAXN;n++) fib[n]=fib[n-1]+fib[n-2]; Zło˙zono´s´c: O(n)

(27)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Jak to poprawi´c?

nie trzeba liczy´c tych samych warto´sci wielokrotnie mo˙zemy zapisywa´c ju˙z policzone warto´sci w tablicy

Obliczanie Fn— 2. podej´scie int fib[MAXN+1]; fib[0]=fib[1]=1; for(int n=2;n<=MAXN;n++) fib[n]=fib[n-1]+fib[n-2]; Zło˙zono´s´c: O(n)

(28)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Najwi ˛ekszy wspólny dzielnik

Najwi ˛ekszym Wspólnym Dzielnikiem (NWD) dwóch liczb naturalnych a i b nazywamy najwi ˛eksz ˛a liczb ˛e naturaln ˛a dziel ˛ac ˛a zarówno a jak i b.

przykładowo NWD(35, 20) = 5 jak policzy´c NWD(a, b)?

mo˙zna sprawdzi´c wszystkie liczby 1, 2, . . . , min(a, b) — zło˙zono´s´c O(min(a, b))

(29)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Najwi ˛ekszy wspólny dzielnik

Najwi ˛ekszym Wspólnym Dzielnikiem (NWD) dwóch liczb naturalnych a i b nazywamy najwi ˛eksz ˛a liczb ˛e naturaln ˛a dziel ˛ac ˛a zarówno a jak i b.

przykładowo NWD(35, 20) = 5

jak policzy´c NWD(a, b)?

mo˙zna sprawdzi´c wszystkie liczby 1, 2, . . . , min(a, b) — zło˙zono´s´c O(min(a, b))

(30)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Najwi ˛ekszy wspólny dzielnik

Najwi ˛ekszym Wspólnym Dzielnikiem (NWD) dwóch liczb naturalnych a i b nazywamy najwi ˛eksz ˛a liczb ˛e naturaln ˛a dziel ˛ac ˛a zarówno a jak i b.

przykładowo NWD(35, 20) = 5 jak policzy´c NWD(a, b)?

mo˙zna sprawdzi´c wszystkie liczby 1, 2, . . . , min(a, b) — zło˙zono´s´c O(min(a, b))

(31)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Najwi ˛ekszy wspólny dzielnik

Najwi ˛ekszym Wspólnym Dzielnikiem (NWD) dwóch liczb naturalnych a i b nazywamy najwi ˛eksz ˛a liczb ˛e naturaln ˛a dziel ˛ac ˛a zarówno a jak i b.

przykładowo NWD(35, 20) = 5 jak policzy´c NWD(a, b)?

mo˙zna sprawdzi´c wszystkie liczby 1, 2, . . . , min(a, b) — zło˙zono´s´c O(min(a, b))

(32)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Algorytm Euklidesa

int nwd(int a,int b){ if(b == 0) return a; return nwd(b, a%b); } Przykład działania nwd(20,35) =nwd(35,20) =nwd(20,15) =nwd(15,5) =nwd(5,0) =5

(33)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Algorytm Euklidesa

int nwd(int a,int b){ if(b == 0) return a; return nwd(b, a%b); } Przykład działania nwd(20,35)=nwd(35,20) =nwd(20,15) =nwd(15,5) =nwd(5,0) =5

(34)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Algorytm Euklidesa

int nwd(int a,int b){ if(b == 0) return a; return nwd(b, a%b); } Przykład działania nwd(20,35) =nwd(35,20)=nwd(20,15) =nwd(15,5) =nwd(5,0) =5

(35)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Algorytm Euklidesa

int nwd(int a,int b){ if(b == 0) return a; return nwd(b, a%b); } Przykład działania nwd(20,35) =nwd(35,20) =nwd(20,15)=nwd(15,5) =nwd(5,0) =5

(36)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Algorytm Euklidesa

int nwd(int a,int b){ if(b == 0) return a; return nwd(b, a%b); } Przykład działania nwd(20,35) =nwd(35,20) =nwd(20,15) =nwd(15,5) =nwd(5,0) =5

(37)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Algorytm Euklidesa

int nwd(int a,int b){ if(b == 0) return a; return nwd(b, a%b); } Przykład działania nwd(20,35) =nwd(35,20) =nwd(20,15) =nwd(15,5) =nwd(5,0)=5

(38)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Algorytm Euklidesa

int nwd(int a,int b){ if(b == 0) return a; return nwd(b, a%b); } Przykład działania nwd(20,35) =nwd(35,20) =nwd(20,15) =nwd(15,5) =nwd(5,0) =5

(39)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking if(b == 0) return a; return nwd(b, a%b); } Dlaczego to działa?

nie licz ˛ac pierwszego wywołania zachodzi b < a wówczas warto´s´c b maleje przy ka˙zdym wywołaniu, wi ˛ec algorytm si ˛e zatrzymuje

zachodzi NWD(a, b) = NWD(b, a mod b); dowód:

1 niech a = b · n + m, gdzie m < b

2 chcemy wykaza´c, ˙ze NWD(b · n + m, b) = NWD(b, m) 3 wspólne dzielniki b · n + m i b dziel ˛a te˙z m

(40)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking if(b == 0) return a; return nwd(b, a%b); } Dlaczego to działa?

nie licz ˛ac pierwszego wywołania zachodzi b < a

wówczas warto´s´c b maleje przy ka˙zdym wywołaniu, wi ˛ec algorytm si ˛e zatrzymuje

zachodzi NWD(a, b) = NWD(b, a mod b); dowód:

1 niech a = b · n + m, gdzie m < b

2 chcemy wykaza´c, ˙ze NWD(b · n + m, b) = NWD(b, m) 3 wspólne dzielniki b · n + m i b dziel ˛a te˙z m

(41)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking if(b == 0) return a; return nwd(b, a%b); } Dlaczego to działa?

nie licz ˛ac pierwszego wywołania zachodzi b < a wówczas warto´s´c b maleje przy ka˙zdym wywołaniu, wi ˛ec algorytm si ˛e zatrzymuje

zachodzi NWD(a, b) = NWD(b, a mod b); dowód:

1 niech a = b · n + m, gdzie m < b

2 chcemy wykaza´c, ˙ze NWD(b · n + m, b) = NWD(b, m) 3 wspólne dzielniki b · n + m i b dziel ˛a te˙z m

(42)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking if(b == 0) return a; return nwd(b, a%b); } Dlaczego to działa?

nie licz ˛ac pierwszego wywołania zachodzi b < a wówczas warto´s´c b maleje przy ka˙zdym wywołaniu, wi ˛ec algorytm si ˛e zatrzymuje

zachodzi NWD(a, b) = NWD(b, a mod b); dowód:

1 niech a = b · n + m, gdzie m < b

2 chcemy wykaza´c, ˙ze NWD(b · n + m, b) = NWD(b, m) 3 wspólne dzielniki b · n + m i b dziel ˛a te˙z m

(43)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking if(b == 0) return a; return nwd(b, a%b); } Dlaczego to działa?

nie licz ˛ac pierwszego wywołania zachodzi b < a wówczas warto´s´c b maleje przy ka˙zdym wywołaniu, wi ˛ec algorytm si ˛e zatrzymuje

zachodzi NWD(a, b) = NWD(b, a mod b); dowód:

1 niech a = b · n + m, gdzie m < b

2 chcemy wykaza´c, ˙ze NWD(b · n + m, b) = NWD(b, m) 3 wspólne dzielniki b · n + m i b dziel ˛a te˙z m

(44)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking if(b == 0) return a; return nwd(b, a%b); } Dlaczego to działa?

nie licz ˛ac pierwszego wywołania zachodzi b < a wówczas warto´s´c b maleje przy ka˙zdym wywołaniu, wi ˛ec algorytm si ˛e zatrzymuje

zachodzi NWD(a, b) = NWD(b, a mod b); dowód:

1 niech a = b · n + m, gdzie m < b

2 chcemy wykaza´c, ˙ze NWD(b · n + m, b) = NWD(b, m) 3 wspólne dzielniki b · n + m i b dziel ˛a te˙z m

(45)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking if(b == 0) return a; return nwd(b, a%b); } Dlaczego to działa?

nie licz ˛ac pierwszego wywołania zachodzi b < a wówczas warto´s´c b maleje przy ka˙zdym wywołaniu, wi ˛ec algorytm si ˛e zatrzymuje

zachodzi NWD(a, b) = NWD(b, a mod b); dowód:

1 niech a = b · n + m, gdzie m < b

2 chcemy wykaza´c, ˙ze NWD(b · n + m, b) = NWD(b, m) 3 wspólne dzielniki b · n + m i b dziel ˛a te˙z m

(46)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking if(b == 0) return a; return nwd(b, a%b); } Dlaczego to działa?

nie licz ˛ac pierwszego wywołania zachodzi b < a wówczas warto´s´c b maleje przy ka˙zdym wywołaniu, wi ˛ec algorytm si ˛e zatrzymuje

zachodzi NWD(a, b) = NWD(b, a mod b); dowód:

1 niech a = b · n + m, gdzie m < b

2 chcemy wykaza´c, ˙ze NWD(b · n + m, b) = NWD(b, m) 3 wspólne dzielniki b · n + m i b dziel ˛a te˙z m

(47)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Zło˙zono´s´c

Algorytm Euklidesa działa w czasie O(log min(a, b)). Dowód pomijamy.

(48)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Problem

mamy 3 kołki i n kr ˛a˙zków ró˙znej ´srednicy

sytuacj ˛e pocz ˛atkow ˛a przedstawia rysunek

zadanie pole na przeło˙zeniu wszystkich kr ˛a˙zków na

prawy kołek

mo˙zna przeło˙zy´c tylko jeden kr ˛a˙zek na raz nie mo˙zna kła´s´c kr ˛a˙zka wi ˛ekszego na mniejszy oznaczmy kr ˛a˙zki 1, 2, . . . n; 1 — najmniejszy

(49)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Problem

mamy 3 kołki i n kr ˛a˙zków ró˙znej ´srednicy sytuacj ˛e pocz ˛atkow ˛a przedstawia rysunek

zadanie pole na przeło˙zeniu wszystkich kr ˛a˙zków na

prawy kołek

mo˙zna przeło˙zy´c tylko jeden kr ˛a˙zek na raz nie mo˙zna kła´s´c kr ˛a˙zka wi ˛ekszego na mniejszy oznaczmy kr ˛a˙zki 1, 2, . . . n; 1 — najmniejszy

(50)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Problem

mamy 3 kołki i n kr ˛a˙zków ró˙znej ´srednicy sytuacj ˛e pocz ˛atkow ˛a przedstawia rysunek

zadanie pole na przeło˙zeniu wszystkich kr ˛a˙zków na prawy kołek

mo˙zna przeło˙zy´c tylko jeden kr ˛a˙zek na raz nie mo˙zna kła´s´c kr ˛a˙zka wi ˛ekszego na mniejszy oznaczmy kr ˛a˙zki 1, 2, . . . n; 1 — najmniejszy

(51)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Problem

mamy 3 kołki i n kr ˛a˙zków ró˙znej ´srednicy sytuacj ˛e pocz ˛atkow ˛a przedstawia rysunek

zadanie pole na przeło˙zeniu wszystkich kr ˛a˙zków na prawy kołek

mo˙zna przeło˙zy´c tylko jeden kr ˛a˙zek na raz

nie mo˙zna kła´s´c kr ˛a˙zka wi ˛ekszego na mniejszy oznaczmy kr ˛a˙zki 1, 2, . . . n; 1 — najmniejszy

(52)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Problem

mamy 3 kołki i n kr ˛a˙zków ró˙znej ´srednicy sytuacj ˛e pocz ˛atkow ˛a przedstawia rysunek

zadanie pole na przeło˙zeniu wszystkich kr ˛a˙zków na prawy kołek

mo˙zna przeło˙zy´c tylko jeden kr ˛a˙zek na raz nie mo˙zna kła´s´c kr ˛a˙zka wi ˛ekszego na mniejszy

(53)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Problem

mamy 3 kołki i n kr ˛a˙zków ró˙znej ´srednicy sytuacj ˛e pocz ˛atkow ˛a przedstawia rysunek

zadanie pole na przeło˙zeniu wszystkich kr ˛a˙zków na prawy kołek

mo˙zna przeło˙zy´c tylko jeden kr ˛a˙zek na raz nie mo˙zna kła´s´c kr ˛a˙zka wi ˛ekszego na mniejszy oznaczmy kr ˛a˙zki 1, 2, . . . n; 1 — najmniejszy

(54)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie

1mo˙zemy przemieszcza´c bez problemu

aby przesun ˛a´c 12 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 1 na 2. kołek 2 przesun ˛a´c 2 na 3. kołek 3 przesun ˛a´c 1 na 3. kołek

aby przesun ˛a´c 123 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 12 na 2. kołek (rekurencyjnie) 2 przesun ˛a´c 3 na 3. kołek

(55)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie

1mo˙zemy przemieszcza´c bez problemu

aby przesun ˛a´c 12 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 1 na 2. kołek 2 przesun ˛a´c 2 na 3. kołek 3 przesun ˛a´c 1 na 3. kołek

aby przesun ˛a´c 123 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 12 na 2. kołek (rekurencyjnie) 2 przesun ˛a´c 3 na 3. kołek

(56)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie

1mo˙zemy przemieszcza´c bez problemu aby przesun ˛a´c 12 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 1 na 2. kołek 2 przesun ˛a´c 2 na 3. kołek 3 przesun ˛a´c 1 na 3. kołek

aby przesun ˛a´c 123 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 12 na 2. kołek (rekurencyjnie) 2 przesun ˛a´c 3 na 3. kołek

(57)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie

1mo˙zemy przemieszcza´c bez problemu aby przesun ˛a´c 12 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 1 na 2. kołek 2 przesun ˛a´c 2 na 3. kołek 3 przesun ˛a´c 1 na 3. kołek

aby przesun ˛a´c 123 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 12 na 2. kołek (rekurencyjnie) 2 przesun ˛a´c 3 na 3. kołek

(58)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie

1mo˙zemy przemieszcza´c bez problemu aby przesun ˛a´c 12 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 1 na 2. kołek 2 przesun ˛a´c 2 na 3. kołek 3 przesun ˛a´c 1 na 3. kołek

aby przesun ˛a´c 123 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 12 na 2. kołek (rekurencyjnie) 2 przesun ˛a´c 3 na 3. kołek

(59)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie

1mo˙zemy przemieszcza´c bez problemu aby przesun ˛a´c 12 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 1 na 2. kołek 2 przesun ˛a´c 2 na 3. kołek 3 przesun ˛a´c 1 na 3. kołek

aby przesun ˛a´c 123 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 12 na 2. kołek (rekurencyjnie) 2 przesun ˛a´c 3 na 3. kołek

(60)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie

1mo˙zemy przemieszcza´c bez problemu aby przesun ˛a´c 12 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 1 na 2. kołek 2 przesun ˛a´c 2 na 3. kołek 3 przesun ˛a´c 1 na 3. kołek

aby przesun ˛a´c 123 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 12 na 2. kołek (rekurencyjnie) 2 przesun ˛a´c 3 na 3. kołek

(61)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie

1mo˙zemy przemieszcza´c bez problemu aby przesun ˛a´c 12 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 1 na 2. kołek 2 przesun ˛a´c 2 na 3. kołek 3 przesun ˛a´c 1 na 3. kołek

aby przesun ˛a´c 123 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 12 na 2. kołek (rekurencyjnie) 2 przesun ˛a´c 3 na 3. kołek

(62)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie

1mo˙zemy przemieszcza´c bez problemu aby przesun ˛a´c 12 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 1 na 2. kołek 2 przesun ˛a´c 2 na 3. kołek 3 przesun ˛a´c 1 na 3. kołek

aby przesun ˛a´c 123 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 12 na 2. kołek (rekurencyjnie) 2 przesun ˛a´c 3 na 3. kołek

(63)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie

1mo˙zemy przemieszcza´c bez problemu aby przesun ˛a´c 12 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 1 na 2. kołek 2 przesun ˛a´c 2 na 3. kołek 3 przesun ˛a´c 1 na 3. kołek

aby przesun ˛a´c 123 na 3. kołek, mo˙zemy:

1 przesun ˛a´c 12 na 2. kołek (rekurencyjnie) 2 przesun ˛a´c 3 na 3. kołek

(64)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie rekurencyjne:

hanoi(m,k)— przeniesienie 12...m w kierunku k ,

gdzie k = 1 oznacza przesuni ˛ecie na prawo a k = −1 na lewo od obecnej pozycji (cyklicznie)

chcemy wykona´c hanoi(n,-1) hanoi(m,k):

1 je´sli m = 1, to przesu ´n 1 i sko ´ncz 2 hanoi(m-1,-k)

3 przesu ´n m w kierunku k 4 hanoi(m-1,-k)

(65)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie rekurencyjne:

hanoi(m,k)— przeniesienie 12...m w kierunku k , gdzie k = 1 oznacza przesuni ˛ecie na prawo a k = −1 na lewo od obecnej pozycji (cyklicznie)

chcemy wykona´c hanoi(n,-1) hanoi(m,k):

1 je´sli m = 1, to przesu ´n 1 i sko ´ncz 2 hanoi(m-1,-k)

3 przesu ´n m w kierunku k 4 hanoi(m-1,-k)

(66)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie rekurencyjne:

hanoi(m,k)— przeniesienie 12...m w kierunku k , gdzie k = 1 oznacza przesuni ˛ecie na prawo a k = −1 na lewo od obecnej pozycji (cyklicznie)

chcemy wykona´c hanoi(n,-1)

hanoi(m,k):

1 je´sli m = 1, to przesu ´n 1 i sko ´ncz 2 hanoi(m-1,-k)

3 przesu ´n m w kierunku k 4 hanoi(m-1,-k)

(67)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie rekurencyjne:

hanoi(m,k)— przeniesienie 12...m w kierunku k , gdzie k = 1 oznacza przesuni ˛ecie na prawo a k = −1 na lewo od obecnej pozycji (cyklicznie)

chcemy wykona´c hanoi(n,-1) hanoi(m,k):

1 je´sli m = 1, to przesu ´n 1 i sko ´ncz

2 hanoi(m-1,-k)

3 przesu ´n m w kierunku k

(68)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie rekurencyjne:

hanoi(m,k)— przeniesienie 12...m w kierunku k , gdzie k = 1 oznacza przesuni ˛ecie na prawo a k = −1 na lewo od obecnej pozycji (cyklicznie)

chcemy wykona´c hanoi(n,-1) hanoi(m,k):

1 je´sli m = 1, to przesu ´n 1 i sko ´ncz

2 hanoi(m-1,-k)

3 przesu ´n m w kierunku k

(69)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie rekurencyjne:

hanoi(m,k)— przeniesienie 12...m w kierunku k , gdzie k = 1 oznacza przesuni ˛ecie na prawo a k = −1 na lewo od obecnej pozycji (cyklicznie)

chcemy wykona´c hanoi(n,-1) hanoi(m,k):

1 je´sli m = 1, to przesu ´n 1 i sko ´ncz 2 hanoi(m-1,-k)

3 przesu ´n m w kierunku k

(70)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie rekurencyjne:

hanoi(m,k)— przeniesienie 12...m w kierunku k , gdzie k = 1 oznacza przesuni ˛ecie na prawo a k = −1 na lewo od obecnej pozycji (cyklicznie)

chcemy wykona´c hanoi(n,-1) hanoi(m,k):

1 je´sli m = 1, to przesu ´n 1 i sko ´ncz 2 hanoi(m-1,-k)

3 przesu ´n m w kierunku k

(71)

Rekurencja

Liczby Fibonacciego NWD

Wie˙ze Hanoi

szachownica

Backtracking Rozwi ˛azanie rekurencyjne:

hanoi(m,k)— przeniesienie 12...m w kierunku k , gdzie k = 1 oznacza przesuni ˛ecie na prawo a k = −1 na lewo od obecnej pozycji (cyklicznie)

chcemy wykona´c hanoi(n,-1) hanoi(m,k):

1 je´sli m = 1, to przesu ´n 1 i sko ´ncz 2 hanoi(m-1,-k)

3 przesu ´n m w kierunku k 4 hanoi(m-1,-k)

(72)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Tn— liczba ruchów które wykonujemy przy

przenoszeniu 12...n T1=1 Tn=2 · Tn− 1 + 1 dla n > 1 n 1 2 3 4 5 Tn 1 3 7 15 31 teza: Tn=2n− 1

dowód przez indukcj ˛e:

baza: T1=1 = 21− 1

krok indukcyjny:

(73)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Tn— liczba ruchów które wykonujemy przy

przenoszeniu 12...n T1=1 Tn=2 · Tn− 1 + 1 dla n > 1 n 1 2 3 4 5 Tn 1 3 7 15 31 teza: Tn=2n− 1

dowód przez indukcj ˛e:

baza: T1=1 = 21− 1

krok indukcyjny:

(74)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Tn— liczba ruchów które wykonujemy przy

przenoszeniu 12...n T1=1 Tn=2 · Tn− 1 + 1 dla n > 1 n 1 2 3 4 5 Tn 1 3 7 15 31 teza: Tn=2n− 1

dowód przez indukcj ˛e:

baza: T1=1 = 21− 1

krok indukcyjny:

(75)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Tn— liczba ruchów które wykonujemy przy

przenoszeniu 12...n T1=1 Tn=2 · Tn− 1 + 1 dla n > 1 n 1 2 3 4 5 Tn 1 3 7 15 31 teza: Tn=2n− 1

dowód przez indukcj ˛e:

baza: T1=1 = 21− 1

krok indukcyjny:

(76)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Tn— liczba ruchów które wykonujemy przy

przenoszeniu 12...n T1=1 Tn=2 · Tn− 1 + 1 dla n > 1 n 1 2 3 4 5 Tn 1 3 7 15 31 teza: Tn=2n− 1

dowód przez indukcj ˛e:

baza: T1=1 = 21− 1

krok indukcyjny:

(77)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Tn— liczba ruchów które wykonujemy przy

przenoszeniu 12...n T1=1 Tn=2 · Tn− 1 + 1 dla n > 1 n 1 2 3 4 5 Tn 1 3 7 15 31 teza: Tn=2n− 1

dowód przez indukcj ˛e:

baza: T1=1 = 21− 1

krok indukcyjny:

(78)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Tn— liczba ruchów które wykonujemy przy

przenoszeniu 12...n T1=1 Tn=2 · Tn− 1 + 1 dla n > 1 n 1 2 3 4 5 Tn 1 3 7 15 31 teza: Tn=2n− 1

dowód przez indukcj ˛e:

baza: T1=1 = 21− 1 krok indukcyjny:

(79)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Tn— liczba ruchów które wykonujemy przy

przenoszeniu 12...n T1=1 Tn=2 · Tn− 1 + 1 dla n > 1 n 1 2 3 4 5 Tn 1 3 7 15 31 teza: Tn=2n− 1

dowód przez indukcj ˛e:

baza: T1=1 = 21− 1

krok indukcyjny:

(80)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Z szachownicy 2 x2 wyci ˛eto jedno pole. Jak za pomoc ˛a klocków w kształcie litery L (zajmuj ˛acych 3 pola) pokry´c tak ˛a szachownic ˛e?

Rozwi ˛azanie

1 je´sli n = 1, to zadanie jest łatwe

2 je´sli n > 1, to podzielmy nasz ˛a szachownic ˛e na cztery szachownice 2n−1x2n−1(pozioma i pionowa linia przechodz ˛aca przez ´srodek planszy)

3 w ´srodkowym kwadracie 2x2 układamy L w taki sposób, aby w ka˙zdej mniejszej szachownicy dokładnie jedno pole było zaj ˛ete (licz ˛ac to wyci ˛ete na wst ˛epie)

(81)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Z szachownicy 2 x2 wyci ˛eto jedno pole. Jak za pomoc ˛a klocków w kształcie litery L (zajmuj ˛acych 3 pola) pokry´c tak ˛a szachownic ˛e?

Rozwi ˛azanie

1 je´sli n = 1, to zadanie jest łatwe

2 je´sli n > 1, to podzielmy nasz ˛a szachownic ˛e na cztery

szachownice 2n−1x2n−1(pozioma i pionowa linia

przechodz ˛aca przez ´srodek planszy)

3 w ´srodkowym kwadracie 2x2 układamy L w taki sposób,

aby w ka˙zdej mniejszej szachownicy dokładnie jedno pole było zaj ˛ete (licz ˛ac to wyci ˛ete na wst ˛epie)

(82)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Z szachownicy 2 x2 wyci ˛eto jedno pole. Jak za pomoc ˛a klocków w kształcie litery L (zajmuj ˛acych 3 pola) pokry´c tak ˛a szachownic ˛e?

Rozwi ˛azanie

1 je´sli n = 1, to zadanie jest łatwe

2 je´sli n > 1, to podzielmy nasz ˛a szachownic ˛e na cztery

szachownice 2n−1x2n−1(pozioma i pionowa linia przechodz ˛aca przez ´srodek planszy)

3 w ´srodkowym kwadracie 2x2 układamy L w taki sposób,

aby w ka˙zdej mniejszej szachownicy dokładnie jedno pole było zaj ˛ete (licz ˛ac to wyci ˛ete na wst ˛epie)

(83)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Z szachownicy 2 x2 wyci ˛eto jedno pole. Jak za pomoc ˛a klocków w kształcie litery L (zajmuj ˛acych 3 pola) pokry´c tak ˛a szachownic ˛e?

Rozwi ˛azanie

1 je´sli n = 1, to zadanie jest łatwe

2 je´sli n > 1, to podzielmy nasz ˛a szachownic ˛e na cztery

szachownice 2n−1x2n−1(pozioma i pionowa linia przechodz ˛aca przez ´srodek planszy)

3 w ´srodkowym kwadracie 2x2 układamy L w taki sposób,

aby w ka˙zdej mniejszej szachownicy dokładnie jedno pole było zaj ˛ete (licz ˛ac to wyci ˛ete na wst ˛epie)

(84)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Z szachownicy 2 x2 wyci ˛eto jedno pole. Jak za pomoc ˛a klocków w kształcie litery L (zajmuj ˛acych 3 pola) pokry´c tak ˛a szachownic ˛e?

Rozwi ˛azanie

1 je´sli n = 1, to zadanie jest łatwe

2 je´sli n > 1, to podzielmy nasz ˛a szachownic ˛e na cztery

szachownice 2n−1x2n−1(pozioma i pionowa linia przechodz ˛aca przez ´srodek planszy)

3 w ´srodkowym kwadracie 2x2 układamy L w taki sposób,

aby w ka˙zdej mniejszej szachownicy dokładnie jedno pole było zaj ˛ete (licz ˛ac to wyci ˛ete na wst ˛epie)

(85)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Czy da si ˛e ustawi´c na szachownicy 8 hetmanów, tak aby nie atakowały si ˛e wzajemnie? Hetman atakuje wszystkie pola le˙z ˛ace w tym samym wierszu, kolumnie lub na tej samej przek ˛atnej.

Zbiór rozwi ˛aza ´n

Jest to typowy problem w którym mamy pewien zbiór mo˙zliwych rozwi ˛aza ´n — zbiór ustawie ´n 8 hetmanów na szachownicy i szukamy jednego lub wszystkich rozwi ˛aza ´n, które spełniaj ˛a jaki´s warunek — w tym przypadku hetmany si ˛e nie atakuj ˛a.

(86)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Czy da si ˛e ustawi´c na szachownicy 8 hetmanów, tak aby nie atakowały si ˛e wzajemnie? Hetman atakuje wszystkie pola le˙z ˛ace w tym samym wierszu, kolumnie lub na tej samej przek ˛atnej.

Zbiór rozwi ˛aza ´n

Jest to typowy problem w którym mamy pewien zbiór mo˙zliwych rozwi ˛aza ´n — zbiór ustawie ´n 8 hetmanów na szachownicy i szukamy jednego lub wszystkich rozwi ˛aza ´n, które spełniaj ˛a jaki´s warunek — w tym przypadku hetmany si ˛e nie atakuj ˛a.

(87)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Rozwi ˛azanie

najprostszym rozwi ˛azaniem jest sprawdzenie wszystkich mo˙zliwych rozstawie ´n hetmanów

zauwa˙zmy jednak, ˙ze je´sli pierwsze dwa postawione hetmany si ˛e atakuj ˛a, to nie ma sensu próbowa´c rozstawi´c pozostałych 6, gdy˙z taki układ nigdy nie spełni naszych warunków

mo˙zemy konstruowa´c rozwi ˛azanie, zaczynaj ˛ac od

pustej planszy i rozbudowuj ˛ac je o kolejne hetmany

kiedy jednak dwa ju˙z postawione hetmany b ˛ed ˛a si ˛e biły to mo˙zemy pomin ˛a´c tak ˛a konfiguracj ˛e

(88)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Rozwi ˛azanie

najprostszym rozwi ˛azaniem jest sprawdzenie wszystkich mo˙zliwych rozstawie ´n hetmanów

zauwa˙zmy jednak, ˙ze je´sli pierwsze dwa postawione hetmany si ˛e atakuj ˛a, to nie ma sensu próbowa´c rozstawi´c pozostałych 6, gdy˙z taki układ nigdy nie spełni naszych warunków

mo˙zemy konstruowa´c rozwi ˛azanie, zaczynaj ˛ac od

pustej planszy i rozbudowuj ˛ac je o kolejne hetmany

kiedy jednak dwa ju˙z postawione hetmany b ˛ed ˛a si ˛e biły to mo˙zemy pomin ˛a´c tak ˛a konfiguracj ˛e

(89)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Rozwi ˛azanie

najprostszym rozwi ˛azaniem jest sprawdzenie wszystkich mo˙zliwych rozstawie ´n hetmanów

zauwa˙zmy jednak, ˙ze je´sli pierwsze dwa postawione hetmany si ˛e atakuj ˛a, to nie ma sensu próbowa´c rozstawi´c pozostałych 6, gdy˙z taki układ nigdy nie spełni naszych warunków

mo˙zemy konstruowa´c rozwi ˛azanie, zaczynaj ˛ac od pustej planszy i rozbudowuj ˛ac je o kolejne hetmany

kiedy jednak dwa ju˙z postawione hetmany b ˛ed ˛a si ˛e biły to mo˙zemy pomin ˛a´c tak ˛a konfiguracj ˛e

(90)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Rozwi ˛azanie

najprostszym rozwi ˛azaniem jest sprawdzenie wszystkich mo˙zliwych rozstawie ´n hetmanów

zauwa˙zmy jednak, ˙ze je´sli pierwsze dwa postawione hetmany si ˛e atakuj ˛a, to nie ma sensu próbowa´c rozstawi´c pozostałych 6, gdy˙z taki układ nigdy nie spełni naszych warunków

mo˙zemy konstruowa´c rozwi ˛azanie, zaczynaj ˛ac od pustej planszy i rozbudowuj ˛ac je o kolejne hetmany kiedy jednak dwa ju˙z postawione hetmany b ˛ed ˛a si ˛e biły to mo˙zemy pomin ˛a´c tak ˛a konfiguracj ˛e

(91)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

rozwi ˛azania i szuka´c tych, które spełniaj ˛a pewne warunki

polega ona na stopniowym rozbudowywaniu rozwi ˛azania (dodawanie hetmanów)

je´sli jednak aktualne rozwi ˛azanie nie mo˙ze by´c rozbudowane (2 hetmany si ˛e szachuj ˛a), to nast ˛epuje powrót do poprzedniego kroku, gdzie podejmowana jest próba znalezienia innej mo˙zliwo´sci

proces ten mo˙zna zapisa´c rekurencyjnie — aby przetworzy´c rozwi ˛azanie x :

1 je´sli x jest dobrym rozwi ˛azaniem to je wypisz 2 je´sli x nie mo˙ze by´c rozbudowane to sko ´ncz 3 spróbuj wszystkich mo˙zliwo´sci rozbudowania x i

(92)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

rozwi ˛azania i szuka´c tych, które spełniaj ˛a pewne warunki

polega ona na stopniowym rozbudowywaniu rozwi ˛azania (dodawanie hetmanów)

je´sli jednak aktualne rozwi ˛azanie nie mo˙ze by´c rozbudowane (2 hetmany si ˛e szachuj ˛a), to nast ˛epuje powrót do poprzedniego kroku, gdzie podejmowana jest próba znalezienia innej mo˙zliwo´sci

proces ten mo˙zna zapisa´c rekurencyjnie — aby przetworzy´c rozwi ˛azanie x :

1 je´sli x jest dobrym rozwi ˛azaniem to je wypisz 2 je´sli x nie mo˙ze by´c rozbudowane to sko ´ncz 3 spróbuj wszystkich mo˙zliwo´sci rozbudowania x i

(93)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

rozwi ˛azania i szuka´c tych, które spełniaj ˛a pewne warunki

polega ona na stopniowym rozbudowywaniu rozwi ˛azania (dodawanie hetmanów)

je´sli jednak aktualne rozwi ˛azanie nie mo˙ze by´c rozbudowane (2 hetmany si ˛e szachuj ˛a), to nast ˛epuje powrót do poprzedniego kroku, gdzie podejmowana jest próba znalezienia innej mo˙zliwo´sci

proces ten mo˙zna zapisa´c rekurencyjnie — aby przetworzy´c rozwi ˛azanie x :

1 je´sli x jest dobrym rozwi ˛azaniem to je wypisz 2 je´sli x nie mo˙ze by´c rozbudowane to sko ´ncz 3 spróbuj wszystkich mo˙zliwo´sci rozbudowania x i

(94)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

rozwi ˛azania i szuka´c tych, które spełniaj ˛a pewne warunki

polega ona na stopniowym rozbudowywaniu rozwi ˛azania (dodawanie hetmanów)

je´sli jednak aktualne rozwi ˛azanie nie mo˙ze by´c rozbudowane (2 hetmany si ˛e szachuj ˛a), to nast ˛epuje powrót do poprzedniego kroku, gdzie podejmowana jest próba znalezienia innej mo˙zliwo´sci

proces ten mo˙zna zapisa´c rekurencyjnie — aby przetworzy´c rozwi ˛azanie x :

1 je´sli x jest dobrym rozwi ˛azaniem to je wypisz 2 je´sli x nie mo˙ze by´c rozbudowane to sko ´ncz 3 spróbuj wszystkich mo˙zliwo´sci rozbudowania x i

(95)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

rozwi ˛azania i szuka´c tych, które spełniaj ˛a pewne warunki

polega ona na stopniowym rozbudowywaniu rozwi ˛azania (dodawanie hetmanów)

je´sli jednak aktualne rozwi ˛azanie nie mo˙ze by´c rozbudowane (2 hetmany si ˛e szachuj ˛a), to nast ˛epuje powrót do poprzedniego kroku, gdzie podejmowana jest próba znalezienia innej mo˙zliwo´sci

proces ten mo˙zna zapisa´c rekurencyjnie — aby przetworzy´c rozwi ˛azanie x :

1 je´sli x jest dobrym rozwi ˛azaniem to je wypisz 2 je´sli x nie mo˙ze by´c rozbudowane to sko ´ncz 3 spróbuj wszystkich mo˙zliwo´sci rozbudowania x i

(96)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

rozwi ˛azania i szuka´c tych, które spełniaj ˛a pewne warunki

polega ona na stopniowym rozbudowywaniu rozwi ˛azania (dodawanie hetmanów)

je´sli jednak aktualne rozwi ˛azanie nie mo˙ze by´c rozbudowane (2 hetmany si ˛e szachuj ˛a), to nast ˛epuje powrót do poprzedniego kroku, gdzie podejmowana jest próba znalezienia innej mo˙zliwo´sci

proces ten mo˙zna zapisa´c rekurencyjnie — aby przetworzy´c rozwi ˛azanie x :

1 je´sli x jest dobrym rozwi ˛azaniem to je wypisz 2 je´sli x nie mo˙ze by´c rozbudowane to sko ´ncz 3 spróbuj wszystkich mo˙zliwo´sci rozbudowania x i

(97)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

rozwi ˛azania i szuka´c tych, które spełniaj ˛a pewne warunki

polega ona na stopniowym rozbudowywaniu rozwi ˛azania (dodawanie hetmanów)

je´sli jednak aktualne rozwi ˛azanie nie mo˙ze by´c rozbudowane (2 hetmany si ˛e szachuj ˛a), to nast ˛epuje powrót do poprzedniego kroku, gdzie podejmowana jest próba znalezienia innej mo˙zliwo´sci

proces ten mo˙zna zapisa´c rekurencyjnie — aby przetworzy´c rozwi ˛azanie x :

1 je´sli x jest dobrym rozwi ˛azaniem to je wypisz 2 je´sli x nie mo˙ze by´c rozbudowane to sko ´ncz 3 spróbuj wszystkich mo˙zliwo´sci rozbudowania x i

(98)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Szczegóły implementacyjne

w ka˙zdym wierszu mo˙ze sta´c co najwy˙zej jeden hetman

aktualne rozwi ˛azanie mo˙zemy trzyma´c jako tablic ˛e 8 liczb; het[i] oznacza poło˙zenie hetmana w i-tym wierszu

b ˛edziemy dostawia´c kolejne hetmany w kolejnych wierszach, dzi ˛eki czemu ka˙zde rozstawienie hetmanów b ˛edziemy mogli otrzyma´c tylko na jeden sposób

(99)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Szczegóły implementacyjne

w ka˙zdym wierszu mo˙ze sta´c co najwy˙zej jeden hetman aktualne rozwi ˛azanie mo˙zemy trzyma´c jako tablic ˛e 8 liczb; het[i] oznacza poło˙zenie hetmana w i-tym wierszu

b ˛edziemy dostawia´c kolejne hetmany w kolejnych wierszach, dzi ˛eki czemu ka˙zde rozstawienie hetmanów b ˛edziemy mogli otrzyma´c tylko na jeden sposób

(100)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Szczegóły implementacyjne

w ka˙zdym wierszu mo˙ze sta´c co najwy˙zej jeden hetman aktualne rozwi ˛azanie mo˙zemy trzyma´c jako tablic ˛e 8 liczb; het[i] oznacza poło˙zenie hetmana w i-tym wierszu

b ˛edziemy dostawia´c kolejne hetmany w kolejnych wierszach, dzi ˛eki czemu ka˙zde rozstawienie hetmanów b ˛edziemy mogli otrzyma´c tylko na jeden sposób

(101)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking Implementacja

Program rozstawiaj ˛acy 8 hetmanów na szachownicy znajduje si ˛e w notatkach.

(102)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Dlaczego warto stosowa´c backtracking?

dzi ˛eki pomijaniu całych grup rozwi ˛aza ´n wystarczy przejrze´c o wiele mniej konfiguracji ni˙z w rozwi ˛azaniu brutalnym

w przypadku problemu 8 hetmanów u˙zywaj ˛ac

przeszukiwania z nawrotami mo˙zna przy odrobinie cierpliwo´sci znale´z´c poprawne ustawienie bez u˙zycia komputera

pomimo trudno´sci oszacowania zło˙zono´sci rozwi ˛aza ´n

opartych na poszukiwaniu z nawrotami, zazwyczaj działaj ˛a one du˙zo szybciej ni˙z rozwi ˛azania brutalne

(103)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Dlaczego warto stosowa´c backtracking?

dzi ˛eki pomijaniu całych grup rozwi ˛aza ´n wystarczy przejrze´c o wiele mniej konfiguracji ni˙z w rozwi ˛azaniu brutalnym

w przypadku problemu 8 hetmanów u˙zywaj ˛ac przeszukiwania z nawrotami mo˙zna przy odrobinie cierpliwo´sci znale´z´c poprawne ustawienie bez u˙zycia komputera

pomimo trudno´sci oszacowania zło˙zono´sci rozwi ˛aza ´n

opartych na poszukiwaniu z nawrotami, zazwyczaj działaj ˛a one du˙zo szybciej ni˙z rozwi ˛azania brutalne

(104)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Dlaczego warto stosowa´c backtracking?

dzi ˛eki pomijaniu całych grup rozwi ˛aza ´n wystarczy przejrze´c o wiele mniej konfiguracji ni˙z w rozwi ˛azaniu brutalnym

w przypadku problemu 8 hetmanów u˙zywaj ˛ac przeszukiwania z nawrotami mo˙zna przy odrobinie cierpliwo´sci znale´z´c poprawne ustawienie bez u˙zycia komputera

pomimo trudno´sci oszacowania zło˙zono´sci rozwi ˛aza ´n opartych na poszukiwaniu z nawrotami, zazwyczaj działaj ˛a one du˙zo szybciej ni˙z rozwi ˛azania brutalne

(105)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

omówili´smy ju˙z 3 wa˙zne techniki programowania:

backtracking

programowanie dynamiczne algorytmy zachłanne

backtracking jest zazwyczaj najwolniejszy, ale ma najszersze zastosowania

programowanie dynamiczne jest zazwyczaj szybsze, ale skonstruowanie rozwi ˛azania opartego o t ˛a technik˛e mo˙ze by´c trudniejsze lub czasami niemo˙zliwe

algorytmy zachłanne s ˛a zazwyczaj najszybsze, ale

(106)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

omówili´smy ju˙z 3 wa˙zne techniki programowania:

backtracking

programowanie dynamiczne algorytmy zachłanne

backtracking jest zazwyczaj najwolniejszy, ale ma najszersze zastosowania

programowanie dynamiczne jest zazwyczaj szybsze, ale skonstruowanie rozwi ˛azania opartego o t ˛a technik˛e mo˙ze by´c trudniejsze lub czasami niemo˙zliwe

algorytmy zachłanne s ˛a zazwyczaj najszybsze, ale

(107)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

omówili´smy ju˙z 3 wa˙zne techniki programowania:

backtracking

programowanie dynamiczne

algorytmy zachłanne

backtracking jest zazwyczaj najwolniejszy, ale ma najszersze zastosowania

programowanie dynamiczne jest zazwyczaj szybsze, ale skonstruowanie rozwi ˛azania opartego o t ˛a technik˛e mo˙ze by´c trudniejsze lub czasami niemo˙zliwe

algorytmy zachłanne s ˛a zazwyczaj najszybsze, ale

(108)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

omówili´smy ju˙z 3 wa˙zne techniki programowania:

backtracking

programowanie dynamiczne algorytmy zachłanne

backtracking jest zazwyczaj najwolniejszy, ale ma najszersze zastosowania

programowanie dynamiczne jest zazwyczaj szybsze, ale skonstruowanie rozwi ˛azania opartego o t ˛a technik˛e mo˙ze by´c trudniejsze lub czasami niemo˙zliwe

algorytmy zachłanne s ˛a zazwyczaj najszybsze, ale

(109)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

omówili´smy ju˙z 3 wa˙zne techniki programowania:

backtracking

programowanie dynamiczne algorytmy zachłanne

backtracking jest zazwyczaj najwolniejszy, ale ma najszersze zastosowania

programowanie dynamiczne jest zazwyczaj szybsze, ale skonstruowanie rozwi ˛azania opartego o t ˛a technik˛e mo˙ze by´c trudniejsze lub czasami niemo˙zliwe

algorytmy zachłanne s ˛a zazwyczaj najszybsze, ale

(110)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

omówili´smy ju˙z 3 wa˙zne techniki programowania:

backtracking

programowanie dynamiczne algorytmy zachłanne

backtracking jest zazwyczaj najwolniejszy, ale ma najszersze zastosowania

programowanie dynamiczne jest zazwyczaj szybsze, ale skonstruowanie rozwi ˛azania opartego o t ˛a technik˛e mo˙ze by´c trudniejsze lub czasami niemo˙zliwe

algorytmy zachłanne s ˛a zazwyczaj najszybsze, ale

(111)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

omówili´smy ju˙z 3 wa˙zne techniki programowania:

backtracking

programowanie dynamiczne algorytmy zachłanne

backtracking jest zazwyczaj najwolniejszy, ale ma najszersze zastosowania

programowanie dynamiczne jest zazwyczaj szybsze, ale skonstruowanie rozwi ˛azania opartego o t ˛a technik˛e mo˙ze by´c trudniejsze lub czasami niemo˙zliwe

algorytmy zachłanne s ˛a zazwyczaj najszybsze, ale maj ˛a najbardziej ograniczone zastosowanie

(112)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Zwró´c uwag ˛e na brak mo˙zliwo´sci zastosowania algorytmu brutalnego z powodu olbrzymiej ilo´sci potencjalnych rozwi ˛aza ´n.

Rozwi ˛azanie

konfiguracje mo˙zemy trzyma´c jako dwuwymiarow ˛a tablic ˛e 9x9 zawieraj ˛ac ˛a liczby w kolejnych komórkach w kolejnych krokach b ˛edziemy dopisywa´c liczby w kolejnych wolnych polach wierszami od góry (a w obr ˛ebie wiersza od lewej)

przed wpisaniem liczby w puste pole, b ˛edziemy wyznaczali liczby, które mo˙zemy tam wpisa´c

(113)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Zwró´c uwag ˛e na brak mo˙zliwo´sci zastosowania algorytmu brutalnego z powodu olbrzymiej ilo´sci potencjalnych rozwi ˛aza ´n.

Rozwi ˛azanie

konfiguracje mo˙zemy trzyma´c jako dwuwymiarow ˛a tablic ˛e 9x9 zawieraj ˛ac ˛a liczby w kolejnych komórkach

w kolejnych krokach b ˛edziemy dopisywa´c liczby w kolejnych wolnych polach wierszami od góry (a w obr ˛ebie wiersza od lewej)

przed wpisaniem liczby w puste pole, b ˛edziemy wyznaczali liczby, które mo˙zemy tam wpisa´c

(114)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Zwró´c uwag ˛e na brak mo˙zliwo´sci zastosowania algorytmu brutalnego z powodu olbrzymiej ilo´sci potencjalnych rozwi ˛aza ´n.

Rozwi ˛azanie

konfiguracje mo˙zemy trzyma´c jako dwuwymiarow ˛a tablic ˛e 9x9 zawieraj ˛ac ˛a liczby w kolejnych komórkach w kolejnych krokach b ˛edziemy dopisywa´c liczby w kolejnych wolnych polach wierszami od góry (a w obr ˛ebie wiersza od lewej)

przed wpisaniem liczby w puste pole, b ˛edziemy wyznaczali liczby, które mo˙zemy tam wpisa´c

(115)

Rekurencja Liczby Fibonacciego NWD Wie˙ze Hanoi szachownica Backtracking

Zwró´c uwag ˛e na brak mo˙zliwo´sci zastosowania algorytmu brutalnego z powodu olbrzymiej ilo´sci potencjalnych rozwi ˛aza ´n.

Rozwi ˛azanie

konfiguracje mo˙zemy trzyma´c jako dwuwymiarow ˛a tablic ˛e 9x9 zawieraj ˛ac ˛a liczby w kolejnych komórkach w kolejnych krokach b ˛edziemy dopisywa´c liczby w kolejnych wolnych polach wierszami od góry (a w obr ˛ebie wiersza od lewej)

przed wpisaniem liczby w puste pole, b ˛edziemy wyznaczali liczby, które mo˙zemy tam wpisa´c

Cytaty

Powiązane dokumenty

Począwszy od klasy czwartej szkoły podstawowej uczeń otrzymuje promocję do klasy programowo wyższej, jeżeli ze wszystkich obowiązkowych zajęć edukacyjnych

[r]

2)uzyskaliśmy wszelkie niezbędne informacje do przygotowania oferty i wykonania zamówienia. 3)akceptujemy istotne postanowienia umowy oraz termin realizacji przedmiotu

[r]

Nie stwierdzono dodatkowych niesprawności i/lub uszkodzeń i/lub braków w zakresie możliwym do ustalenia w warunkach oględzin, tj.: bez dostępu do spodu pojazdu,

[r]

Jeśli dodatkowo, terminal dostępu kontroluje dostęp tylko do jednego Przejścia, to można załączyć opcję Uprawnia do wykonania funkcji z dowolnym Parametrem Funkcji,

Post wigilijny jest zwyczajem dość powszechnie przestrzeganym, mimo że w wielu wyznaniach chrześcijańskich nie jest nakazany.. Biskupi łacińscy zachęcają do zachowania tego