Rekurencja i poszukiwanie z nawrotami - zajecia 4. · Backtracking Rekurencja i poszukiwanie z...

Preview:

Citation preview

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Rekurencja i poszukiwanie z nawrotamizajecia 4.

Marcin Andrychowicz

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Rekurencja

Algorytm rekurencyjny:rozwiazuje problem przez rozwiazanie pewnej liczbyprostszych przypadków tego samego problemuzapisujemy za pomoca funkcji rekurencyjnej, czyliwywołujacej sama siebieprzykładem moze byc omówione wczesniej sortowanieprzez scalanie

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Rekurencja

Algorytm rekurencyjny:rozwiazuje problem przez rozwiazanie pewnej liczbyprostszych przypadków tego samego problemuzapisujemy za pomoca funkcji rekurencyjnej, czyliwywołujacej sama siebieprzykładem moze byc omówione wczesniej sortowanieprzez scalanie

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Rekurencja

Algorytm rekurencyjny:rozwiazuje problem przez rozwiazanie pewnej liczbyprostszych przypadków tego samego problemuzapisujemy za pomoca funkcji rekurencyjnej, czyliwywołujacej sama siebieprzykładem moze byc omówione wczesniej sortowanieprzez scalanie

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

DefinicjaFn — n-ta liczba FibonacciegoF0 = F1 = 1Fn = Fn−1 + Fn−2 dla n > 1

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

zwiazek z królikami

Obliczanie Fn — 1. podejscieint fib(int n){

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

}

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

DefinicjaFn — n-ta liczba FibonacciegoF0 = F1 = 1Fn = Fn−1 + Fn−2 dla n > 1

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

zwiazek z królikami

Obliczanie Fn — 1. podejscieint fib(int n){

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

}

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

DefinicjaFn — n-ta liczba FibonacciegoF0 = F1 = 1Fn = Fn−1 + Fn−2 dla n > 1

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

zwiazek z królikami

Obliczanie Fn — 1. podejscieint fib(int n){

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

}

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

DefinicjaFn — n-ta liczba FibonacciegoF0 = F1 = 1Fn = Fn−1 + Fn−2 dla n > 1

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

zwiazek z królikami

Obliczanie Fn — 1. podejscieint fib(int n){

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

}

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

DefinicjaFn — n-ta liczba FibonacciegoF0 = F1 = 1Fn = Fn−1 + Fn−2 dla n > 1

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

zwiazek z królikami

Obliczanie Fn — 1. podejscieint fib(int n){

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

}

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

DefinicjaFn — n-ta liczba FibonacciegoF0 = F1 = 1Fn = Fn−1 + Fn−2 dla n > 1

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

zwiazek z królikami

Obliczanie Fn — 1. podejscieint fib(int n){

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

}

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

Analiza złozonoscipoliczmy ile razy wywołamy fib(0) lub fib(1) liczacfib(n)

liczac fib(0) lub fib(1) zrobimy jedno wywołanieliczac fib(2) zrobimy 2 wywołanialiczac fib(3) zrobimy 3 wywołanialiczac fib(4) zrobimy 5 wywołan . . .liczac fib(n) zrobimy Fn wywołanspróbujmy jakos oszacowac ta liczbe

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

Analiza złozonoscipoliczmy ile razy wywołamy fib(0) lub fib(1) liczacfib(n)

liczac fib(0) lub fib(1) zrobimy jedno wywołanieliczac fib(2) zrobimy 2 wywołanialiczac fib(3) zrobimy 3 wywołanialiczac fib(4) zrobimy 5 wywołan . . .liczac fib(n) zrobimy Fn wywołanspróbujmy jakos oszacowac ta liczbe

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

Analiza złozonoscipoliczmy ile razy wywołamy fib(0) lub fib(1) liczacfib(n)

liczac fib(0) lub fib(1) zrobimy jedno wywołanieliczac fib(2) zrobimy 2 wywołanialiczac fib(3) zrobimy 3 wywołanialiczac fib(4) zrobimy 5 wywołan . . .liczac fib(n) zrobimy Fn wywołanspróbujmy jakos oszacowac ta liczbe

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

Analiza złozonoscipoliczmy ile razy wywołamy fib(0) lub fib(1) liczacfib(n)

liczac fib(0) lub fib(1) zrobimy jedno wywołanieliczac fib(2) zrobimy 2 wywołanialiczac fib(3) zrobimy 3 wywołanialiczac fib(4) zrobimy 5 wywołan . . .liczac fib(n) zrobimy Fn wywołanspróbujmy jakos oszacowac ta liczbe

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

Analiza złozonoscipoliczmy ile razy wywołamy fib(0) lub fib(1) liczacfib(n)

liczac fib(0) lub fib(1) zrobimy jedno wywołanieliczac fib(2) zrobimy 2 wywołanialiczac fib(3) zrobimy 3 wywołanialiczac fib(4) zrobimy 5 wywołan . . .liczac fib(n) zrobimy Fn wywołanspróbujmy jakos oszacowac ta liczbe

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

Analiza złozonoscipoliczmy ile razy wywołamy fib(0) lub fib(1) liczacfib(n)

liczac fib(0) lub fib(1) zrobimy jedno wywołanieliczac fib(2) zrobimy 2 wywołanialiczac fib(3) zrobimy 3 wywołanialiczac fib(4) zrobimy 5 wywołan . . .liczac fib(n) zrobimy Fn wywołanspróbujmy jakos oszacowac ta liczbe

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

Analiza złozonoscipoliczmy ile razy wywołamy fib(0) lub fib(1) liczacfib(n)

liczac fib(0) lub fib(1) zrobimy jedno wywołanieliczac fib(2) zrobimy 2 wywołanialiczac fib(3) zrobimy 3 wywołanialiczac fib(4) zrobimy 5 wywołan . . .liczac fib(n) zrobimy Fn wywołanspróbujmy jakos oszacowac ta liczbe

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

Jak szybko rosna?

Liczby Fibonacciego rosna wykładniczo. Dowód:1 Fn+1 > Fn

2 Fn+2 = Fn+1 + Fn = 2Fn + Fn−1 ­ 2Fn

3 F2n+2 ­ F2n+1 ­ 2nF1 = 2n (czyli Fn rosna co najmniejwykładniczo)

4 Fn+1 ¬ 2Fn, wiec Fn ¬ 2n (czyli Fn rosna co najwyzejwykładniczo)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

Jak szybko rosna?

Liczby Fibonacciego rosna wykładniczo. Dowód:1 Fn+1 > Fn

2 Fn+2 = Fn+1 + Fn = 2Fn + Fn−1 ­ 2Fn

3 F2n+2 ­ F2n+1 ­ 2nF1 = 2n (czyli Fn rosna co najmniejwykładniczo)

4 Fn+1 ¬ 2Fn, wiec Fn ¬ 2n (czyli Fn rosna co najwyzejwykładniczo)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

Jak szybko rosna?

Liczby Fibonacciego rosna wykładniczo. Dowód:1 Fn+1 > Fn

2 Fn+2 = Fn+1 + Fn = 2Fn + Fn−1 ­ 2Fn

3 F2n+2 ­ F2n+1 ­ 2nF1 = 2n (czyli Fn rosna co najmniejwykładniczo)

4 Fn+1 ¬ 2Fn, wiec Fn ¬ 2n (czyli Fn rosna co najwyzejwykładniczo)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

Jak szybko rosna?

Liczby Fibonacciego rosna wykładniczo. Dowód:1 Fn+1 > Fn

2 Fn+2 = Fn+1 + Fn = 2Fn + Fn−1 ­ 2Fn

3 F2n+2 ­ F2n+1 ­ 2nF1 = 2n (czyli Fn rosna co najmniejwykładniczo)

4 Fn+1 ¬ 2Fn, wiec Fn ¬ 2n (czyli Fn rosna co najwyzejwykładniczo)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

Jak szybko rosna?

Liczby Fibonacciego rosna wykładniczo. Dowód:1 Fn+1 > Fn

2 Fn+2 = Fn+1 + Fn = 2Fn + Fn−1 ­ 2Fn

3 F2n+2 ­ F2n+1 ­ 2nF1 = 2n (czyli Fn rosna co najmniejwykładniczo)

4 Fn+1 ¬ 2Fn, wiec Fn ¬ 2n (czyli Fn rosna co najwyzejwykładniczo)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

Jak to poprawic?

nie trzeba liczyc tych samych wartosci wielokrotniemozemy zapisywac juz policzone wartosci w tablicy

Obliczanie Fn — 2. podejscieint fib[MAXN+1];fib[0]=fib[1]=1;for(int n=2;n<=MAXN;n++)

fib[n]=fib[n-1]+fib[n-2];

Złozonosc: O(n)Wniosek: rekurencja nie zawsze jest najlepsza metoda

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

Jak to poprawic?

nie trzeba liczyc tych samych wartosci wielokrotniemozemy zapisywac juz policzone wartosci w tablicy

Obliczanie Fn — 2. podejscieint fib[MAXN+1];fib[0]=fib[1]=1;for(int n=2;n<=MAXN;n++)

fib[n]=fib[n-1]+fib[n-2];

Złozonosc: O(n)Wniosek: rekurencja nie zawsze jest najlepsza metoda

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

Jak to poprawic?

nie trzeba liczyc tych samych wartosci wielokrotniemozemy zapisywac juz policzone wartosci w tablicy

Obliczanie Fn — 2. podejscieint fib[MAXN+1];fib[0]=fib[1]=1;for(int n=2;n<=MAXN;n++)

fib[n]=fib[n-1]+fib[n-2];

Złozonosc: O(n)Wniosek: rekurencja nie zawsze jest najlepsza metoda

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

Jak to poprawic?

nie trzeba liczyc tych samych wartosci wielokrotniemozemy zapisywac juz policzone wartosci w tablicy

Obliczanie Fn — 2. podejscieint fib[MAXN+1];fib[0]=fib[1]=1;for(int n=2;n<=MAXN;n++)

fib[n]=fib[n-1]+fib[n-2];

Złozonosc: O(n)Wniosek: rekurencja nie zawsze jest najlepsza metoda

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Liczby Fibonacciego

Jak to poprawic?

nie trzeba liczyc tych samych wartosci wielokrotniemozemy zapisywac juz policzone wartosci w tablicy

Obliczanie Fn — 2. podejscieint fib[MAXN+1];fib[0]=fib[1]=1;for(int n=2;n<=MAXN;n++)

fib[n]=fib[n-1]+fib[n-2];

Złozonosc: O(n)Wniosek: rekurencja nie zawsze jest najlepsza metoda

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Najwiekszy wspólny dzielnik

Najwiekszym Wspólnym Dzielnikiem (NWD) dwóchliczb naturalnych a i b nazywamy najwieksza liczbenaturalna dzielaca zarówno a jak i b.przykładowo NWD(35,20) = 5jak policzyc NWD(a,b)?mozna sprawdzic wszystkie liczby 1,2, . . . ,min(a,b) —złozonosc O(min(a,b))

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Najwiekszy wspólny dzielnik

Najwiekszym Wspólnym Dzielnikiem (NWD) dwóchliczb naturalnych a i b nazywamy najwieksza liczbenaturalna dzielaca zarówno a jak i b.przykładowo NWD(35,20) = 5jak policzyc NWD(a,b)?mozna sprawdzic wszystkie liczby 1,2, . . . ,min(a,b) —złozonosc O(min(a,b))

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Najwiekszy wspólny dzielnik

Najwiekszym Wspólnym Dzielnikiem (NWD) dwóchliczb naturalnych a i b nazywamy najwieksza liczbenaturalna dzielaca zarówno a jak i b.przykładowo NWD(35,20) = 5jak policzyc NWD(a,b)?mozna sprawdzic wszystkie liczby 1,2, . . . ,min(a,b) —złozonosc O(min(a,b))

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Najwiekszy wspólny dzielnik

Najwiekszym Wspólnym Dzielnikiem (NWD) dwóchliczb naturalnych a i b nazywamy najwieksza liczbenaturalna dzielaca zarówno a jak i b.przykładowo NWD(35,20) = 5jak policzyc NWD(a,b)?mozna sprawdzic wszystkie liczby 1,2, . . . ,min(a,b) —złozonosc O(min(a,b))

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Algorytm Euklidesaint nwd(int a,int b){

if(b == 0) return a;return nwd(b, a%b);

}

Przykład działanianwd(20,35) =nwd(35,20) =nwd(20,15) =nwd(15,5)=nwd(5,0) =5

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Algorytm Euklidesaint nwd(int a,int b){

if(b == 0) return a;return nwd(b, a%b);

}

Przykład działanianwd(20,35) =nwd(35,20) =nwd(20,15) =nwd(15,5)=nwd(5,0) =5

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Algorytm Euklidesaint nwd(int a,int b){

if(b == 0) return a;return nwd(b, a%b);

}

Przykład działanianwd(20,35) =nwd(35,20) =nwd(20,15) =nwd(15,5)=nwd(5,0) =5

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Algorytm Euklidesaint nwd(int a,int b){

if(b == 0) return a;return nwd(b, a%b);

}

Przykład działanianwd(20,35) =nwd(35,20) =nwd(20,15) =nwd(15,5)=nwd(5,0) =5

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Algorytm Euklidesaint nwd(int a,int b){

if(b == 0) return a;return nwd(b, a%b);

}

Przykład działanianwd(20,35) =nwd(35,20) =nwd(20,15) =nwd(15,5)=nwd(5,0) =5

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Algorytm Euklidesaint nwd(int a,int b){

if(b == 0) return a;return nwd(b, a%b);

}

Przykład działanianwd(20,35) =nwd(35,20) =nwd(20,15) =nwd(15,5)=nwd(5,0) =5

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Algorytm Euklidesaint nwd(int a,int b){

if(b == 0) return a;return nwd(b, a%b);

}

Przykład działanianwd(20,35) =nwd(35,20) =nwd(20,15) =nwd(15,5)=nwd(5,0) =5

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Algorytm Euklidesaint nwd(int a,int b){

if(b == 0) return a;return nwd(b, a%b);

}

Dlaczego to działa?nie liczac pierwszego wywołania zachodzi b < awówczas wartosc b maleje przy kazdym wywołaniu,wiec algorytm sie zatrzymujezachodzi NWD(a,b) = NWD(b,a mod b); dowód:

1 niech a = b · n + m, gdzie m < b2 chcemy wykazac, ze NWD(b · n + m,b) = NWD(b,m)3 wspólne dzielniki b · n + m i b dziela tez m4 wspólne dzielniki b i m dziela tez b · n + m

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Algorytm Euklidesaint nwd(int a,int b){

if(b == 0) return a;return nwd(b, a%b);

}

Dlaczego to działa?nie liczac pierwszego wywołania zachodzi b < awówczas wartosc b maleje przy kazdym wywołaniu,wiec algorytm sie zatrzymujezachodzi NWD(a,b) = NWD(b,a mod b); dowód:

1 niech a = b · n + m, gdzie m < b2 chcemy wykazac, ze NWD(b · n + m,b) = NWD(b,m)3 wspólne dzielniki b · n + m i b dziela tez m4 wspólne dzielniki b i m dziela tez b · n + m

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Algorytm Euklidesaint nwd(int a,int b){

if(b == 0) return a;return nwd(b, a%b);

}

Dlaczego to działa?nie liczac pierwszego wywołania zachodzi b < awówczas wartosc b maleje przy kazdym wywołaniu,wiec algorytm sie zatrzymujezachodzi NWD(a,b) = NWD(b,a mod b); dowód:

1 niech a = b · n + m, gdzie m < b2 chcemy wykazac, ze NWD(b · n + m,b) = NWD(b,m)3 wspólne dzielniki b · n + m i b dziela tez m4 wspólne dzielniki b i m dziela tez b · n + m

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Algorytm Euklidesaint nwd(int a,int b){

if(b == 0) return a;return nwd(b, a%b);

}

Dlaczego to działa?nie liczac pierwszego wywołania zachodzi b < awówczas wartosc b maleje przy kazdym wywołaniu,wiec algorytm sie zatrzymujezachodzi NWD(a,b) = NWD(b,a mod b); dowód:

1 niech a = b · n + m, gdzie m < b2 chcemy wykazac, ze NWD(b · n + m,b) = NWD(b,m)3 wspólne dzielniki b · n + m i b dziela tez m4 wspólne dzielniki b i m dziela tez b · n + m

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Algorytm Euklidesaint nwd(int a,int b){

if(b == 0) return a;return nwd(b, a%b);

}

Dlaczego to działa?nie liczac pierwszego wywołania zachodzi b < awówczas wartosc b maleje przy kazdym wywołaniu,wiec algorytm sie zatrzymujezachodzi NWD(a,b) = NWD(b,a mod b); dowód:

1 niech a = b · n + m, gdzie m < b2 chcemy wykazac, ze NWD(b · n + m,b) = NWD(b,m)3 wspólne dzielniki b · n + m i b dziela tez m4 wspólne dzielniki b i m dziela tez b · n + m

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Algorytm Euklidesaint nwd(int a,int b){

if(b == 0) return a;return nwd(b, a%b);

}

Dlaczego to działa?nie liczac pierwszego wywołania zachodzi b < awówczas wartosc b maleje przy kazdym wywołaniu,wiec algorytm sie zatrzymujezachodzi NWD(a,b) = NWD(b,a mod b); dowód:

1 niech a = b · n + m, gdzie m < b2 chcemy wykazac, ze NWD(b · n + m,b) = NWD(b,m)3 wspólne dzielniki b · n + m i b dziela tez m4 wspólne dzielniki b i m dziela tez b · n + m

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Algorytm Euklidesaint nwd(int a,int b){

if(b == 0) return a;return nwd(b, a%b);

}

Dlaczego to działa?nie liczac pierwszego wywołania zachodzi b < awówczas wartosc b maleje przy kazdym wywołaniu,wiec algorytm sie zatrzymujezachodzi NWD(a,b) = NWD(b,a mod b); dowód:

1 niech a = b · n + m, gdzie m < b2 chcemy wykazac, ze NWD(b · n + m,b) = NWD(b,m)3 wspólne dzielniki b · n + m i b dziela tez m4 wspólne dzielniki b i m dziela tez b · n + m

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy wspólny dzielnik

Algorytm Euklidesaint nwd(int a,int b){

if(b == 0) return a;return nwd(b, a%b);

}

Dlaczego to działa?nie liczac pierwszego wywołania zachodzi b < awówczas wartosc b maleje przy kazdym wywołaniu,wiec algorytm sie zatrzymujezachodzi NWD(a,b) = NWD(b,a mod b); dowód:

1 niech a = b · n + m, gdzie m < b2 chcemy wykazac, ze NWD(b · n + m,b) = NWD(b,m)3 wspólne dzielniki b · n + m i b dziela tez m4 wspólne dzielniki b i m dziela tez b · n + m

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Najwiekszy Wspólny Dzielnik

ZłozonoscAlgorytm Euklidesa działa w czasie O(log min(a,b)). Dowódpomijamy.

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Problemmamy 3 kołki i n krazków róznej srednicysytuacje poczatkowa przedstawia rysunekzadanie pole na przełozeniu wszystkich krazków naprawy kołekmozna przełozyc tylko jeden krazek na raznie mozna kłasc krazka wiekszego na mniejszyoznaczmy krazki 1, 2, . . .n; 1 — najmniejszy

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Problemmamy 3 kołki i n krazków róznej srednicysytuacje poczatkowa przedstawia rysunekzadanie pole na przełozeniu wszystkich krazków naprawy kołekmozna przełozyc tylko jeden krazek na raznie mozna kłasc krazka wiekszego na mniejszyoznaczmy krazki 1, 2, . . .n; 1 — najmniejszy

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Problemmamy 3 kołki i n krazków róznej srednicysytuacje poczatkowa przedstawia rysunekzadanie pole na przełozeniu wszystkich krazków naprawy kołekmozna przełozyc tylko jeden krazek na raznie mozna kłasc krazka wiekszego na mniejszyoznaczmy krazki 1, 2, . . .n; 1 — najmniejszy

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Problemmamy 3 kołki i n krazków róznej srednicysytuacje poczatkowa przedstawia rysunekzadanie pole na przełozeniu wszystkich krazków naprawy kołekmozna przełozyc tylko jeden krazek na raznie mozna kłasc krazka wiekszego na mniejszyoznaczmy krazki 1, 2, . . .n; 1 — najmniejszy

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Problemmamy 3 kołki i n krazków róznej srednicysytuacje poczatkowa przedstawia rysunekzadanie pole na przełozeniu wszystkich krazków naprawy kołekmozna przełozyc tylko jeden krazek na raznie mozna kłasc krazka wiekszego na mniejszyoznaczmy krazki 1, 2, . . .n; 1 — najmniejszy

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Problemmamy 3 kołki i n krazków róznej srednicysytuacje poczatkowa przedstawia rysunekzadanie pole na przełozeniu wszystkich krazków naprawy kołekmozna przełozyc tylko jeden krazek na raznie mozna kłasc krazka wiekszego na mniejszyoznaczmy krazki 1, 2, . . .n; 1 — najmniejszy

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie

1 mozemy przemieszczac bez problemuaby przesunac 12 na 3. kołek, mozemy:

1 przesunac 1 na 2. kołek2 przesunac 2 na 3. kołek3 przesunac 1 na 3. kołek

aby przesunac 123 na 3. kołek, mozemy:1 przesunac 12 na 2. kołek (rekurencyjnie)2 przesunac 3 na 3. kołek3 przesunac 12 na 3. kołek (rekurencyjnie)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie

1 mozemy przemieszczac bez problemuaby przesunac 12 na 3. kołek, mozemy:

1 przesunac 1 na 2. kołek2 przesunac 2 na 3. kołek3 przesunac 1 na 3. kołek

aby przesunac 123 na 3. kołek, mozemy:1 przesunac 12 na 2. kołek (rekurencyjnie)2 przesunac 3 na 3. kołek3 przesunac 12 na 3. kołek (rekurencyjnie)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie

1 mozemy przemieszczac bez problemuaby przesunac 12 na 3. kołek, mozemy:

1 przesunac 1 na 2. kołek2 przesunac 2 na 3. kołek3 przesunac 1 na 3. kołek

aby przesunac 123 na 3. kołek, mozemy:1 przesunac 12 na 2. kołek (rekurencyjnie)2 przesunac 3 na 3. kołek3 przesunac 12 na 3. kołek (rekurencyjnie)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie

1 mozemy przemieszczac bez problemuaby przesunac 12 na 3. kołek, mozemy:

1 przesunac 1 na 2. kołek2 przesunac 2 na 3. kołek3 przesunac 1 na 3. kołek

aby przesunac 123 na 3. kołek, mozemy:1 przesunac 12 na 2. kołek (rekurencyjnie)2 przesunac 3 na 3. kołek3 przesunac 12 na 3. kołek (rekurencyjnie)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie

1 mozemy przemieszczac bez problemuaby przesunac 12 na 3. kołek, mozemy:

1 przesunac 1 na 2. kołek2 przesunac 2 na 3. kołek3 przesunac 1 na 3. kołek

aby przesunac 123 na 3. kołek, mozemy:1 przesunac 12 na 2. kołek (rekurencyjnie)2 przesunac 3 na 3. kołek3 przesunac 12 na 3. kołek (rekurencyjnie)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie

1 mozemy przemieszczac bez problemuaby przesunac 12 na 3. kołek, mozemy:

1 przesunac 1 na 2. kołek2 przesunac 2 na 3. kołek3 przesunac 1 na 3. kołek

aby przesunac 123 na 3. kołek, mozemy:1 przesunac 12 na 2. kołek (rekurencyjnie)2 przesunac 3 na 3. kołek3 przesunac 12 na 3. kołek (rekurencyjnie)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie

1 mozemy przemieszczac bez problemuaby przesunac 12 na 3. kołek, mozemy:

1 przesunac 1 na 2. kołek2 przesunac 2 na 3. kołek3 przesunac 1 na 3. kołek

aby przesunac 123 na 3. kołek, mozemy:1 przesunac 12 na 2. kołek (rekurencyjnie)2 przesunac 3 na 3. kołek3 przesunac 12 na 3. kołek (rekurencyjnie)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie

1 mozemy przemieszczac bez problemuaby przesunac 12 na 3. kołek, mozemy:

1 przesunac 1 na 2. kołek2 przesunac 2 na 3. kołek3 przesunac 1 na 3. kołek

aby przesunac 123 na 3. kołek, mozemy:1 przesunac 12 na 2. kołek (rekurencyjnie)2 przesunac 3 na 3. kołek3 przesunac 12 na 3. kołek (rekurencyjnie)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie

1 mozemy przemieszczac bez problemuaby przesunac 12 na 3. kołek, mozemy:

1 przesunac 1 na 2. kołek2 przesunac 2 na 3. kołek3 przesunac 1 na 3. kołek

aby przesunac 123 na 3. kołek, mozemy:1 przesunac 12 na 2. kołek (rekurencyjnie)2 przesunac 3 na 3. kołek3 przesunac 12 na 3. kołek (rekurencyjnie)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie

1 mozemy przemieszczac bez problemuaby przesunac 12 na 3. kołek, mozemy:

1 przesunac 1 na 2. kołek2 przesunac 2 na 3. kołek3 przesunac 1 na 3. kołek

aby przesunac 123 na 3. kołek, mozemy:1 przesunac 12 na 2. kołek (rekurencyjnie)2 przesunac 3 na 3. kołek3 przesunac 12 na 3. kołek (rekurencyjnie)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie rekurencyjne:hanoi(m,k) — przeniesienie 12...m w kierunku k ,gdzie k = 1 oznacza przesuniecie na prawo a k = −1na lewo od obecnej pozycji (cyklicznie)chcemy wykonac hanoi(n,-1)hanoi(m,k):

1 jesli m = 1, to przesun 1 i skoncz2 hanoi(m-1,-k)3 przesun m w kierunku k4 hanoi(m-1,-k)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie rekurencyjne:hanoi(m,k) — przeniesienie 12...m w kierunku k ,gdzie k = 1 oznacza przesuniecie na prawo a k = −1na lewo od obecnej pozycji (cyklicznie)chcemy wykonac hanoi(n,-1)hanoi(m,k):

1 jesli m = 1, to przesun 1 i skoncz2 hanoi(m-1,-k)3 przesun m w kierunku k4 hanoi(m-1,-k)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie rekurencyjne:hanoi(m,k) — przeniesienie 12...m w kierunku k ,gdzie k = 1 oznacza przesuniecie na prawo a k = −1na lewo od obecnej pozycji (cyklicznie)chcemy wykonac hanoi(n,-1)hanoi(m,k):

1 jesli m = 1, to przesun 1 i skoncz2 hanoi(m-1,-k)3 przesun m w kierunku k4 hanoi(m-1,-k)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie rekurencyjne:hanoi(m,k) — przeniesienie 12...m w kierunku k ,gdzie k = 1 oznacza przesuniecie na prawo a k = −1na lewo od obecnej pozycji (cyklicznie)chcemy wykonac hanoi(n,-1)hanoi(m,k):

1 jesli m = 1, to przesun 1 i skoncz2 hanoi(m-1,-k)3 przesun m w kierunku k4 hanoi(m-1,-k)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie rekurencyjne:hanoi(m,k) — przeniesienie 12...m w kierunku k ,gdzie k = 1 oznacza przesuniecie na prawo a k = −1na lewo od obecnej pozycji (cyklicznie)chcemy wykonac hanoi(n,-1)hanoi(m,k):

1 jesli m = 1, to przesun 1 i skoncz2 hanoi(m-1,-k)3 przesun m w kierunku k4 hanoi(m-1,-k)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie rekurencyjne:hanoi(m,k) — przeniesienie 12...m w kierunku k ,gdzie k = 1 oznacza przesuniecie na prawo a k = −1na lewo od obecnej pozycji (cyklicznie)chcemy wykonac hanoi(n,-1)hanoi(m,k):

1 jesli m = 1, to przesun 1 i skoncz2 hanoi(m-1,-k)3 przesun m w kierunku k4 hanoi(m-1,-k)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie rekurencyjne:hanoi(m,k) — przeniesienie 12...m w kierunku k ,gdzie k = 1 oznacza przesuniecie na prawo a k = −1na lewo od obecnej pozycji (cyklicznie)chcemy wykonac hanoi(n,-1)hanoi(m,k):

1 jesli m = 1, to przesun 1 i skoncz2 hanoi(m-1,-k)3 przesun m w kierunku k4 hanoi(m-1,-k)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Wieze Hanoi

Rozwiazanie rekurencyjne:hanoi(m,k) — przeniesienie 12...m w kierunku k ,gdzie k = 1 oznacza przesuniecie na prawo a k = −1na lewo od obecnej pozycji (cyklicznie)chcemy wykonac hanoi(n,-1)hanoi(m,k):

1 jesli m = 1, to przesun 1 i skoncz2 hanoi(m-1,-k)3 przesun m w kierunku k4 hanoi(m-1,-k)

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Ile ruchów wykonujemy?Tn — liczba ruchów które wykonujemy przyprzenoszeniu 12...n

T1 = 1Tn = 2 · Tn − 1 + 1 dla n > 1

n 1 2 3 4 5Tn 1 3 7 15 31

teza: Tn = 2n − 1dowód przez indukcje:

baza: T1 = 1 = 21 − 1krok indukcyjny:Tn = 2 · Tn−1 + 1 = 2 · (2n−1 − 1) + 1 = 2n − 1

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Ile ruchów wykonujemy?Tn — liczba ruchów które wykonujemy przyprzenoszeniu 12...n

T1 = 1Tn = 2 · Tn − 1 + 1 dla n > 1

n 1 2 3 4 5Tn 1 3 7 15 31

teza: Tn = 2n − 1dowód przez indukcje:

baza: T1 = 1 = 21 − 1krok indukcyjny:Tn = 2 · Tn−1 + 1 = 2 · (2n−1 − 1) + 1 = 2n − 1

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Ile ruchów wykonujemy?Tn — liczba ruchów które wykonujemy przyprzenoszeniu 12...n

T1 = 1Tn = 2 · Tn − 1 + 1 dla n > 1

n 1 2 3 4 5Tn 1 3 7 15 31

teza: Tn = 2n − 1dowód przez indukcje:

baza: T1 = 1 = 21 − 1krok indukcyjny:Tn = 2 · Tn−1 + 1 = 2 · (2n−1 − 1) + 1 = 2n − 1

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Ile ruchów wykonujemy?Tn — liczba ruchów które wykonujemy przyprzenoszeniu 12...n

T1 = 1Tn = 2 · Tn − 1 + 1 dla n > 1

n 1 2 3 4 5Tn 1 3 7 15 31

teza: Tn = 2n − 1dowód przez indukcje:

baza: T1 = 1 = 21 − 1krok indukcyjny:Tn = 2 · Tn−1 + 1 = 2 · (2n−1 − 1) + 1 = 2n − 1

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Ile ruchów wykonujemy?Tn — liczba ruchów które wykonujemy przyprzenoszeniu 12...n

T1 = 1Tn = 2 · Tn − 1 + 1 dla n > 1

n 1 2 3 4 5Tn 1 3 7 15 31

teza: Tn = 2n − 1dowód przez indukcje:

baza: T1 = 1 = 21 − 1krok indukcyjny:Tn = 2 · Tn−1 + 1 = 2 · (2n−1 − 1) + 1 = 2n − 1

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Ile ruchów wykonujemy?Tn — liczba ruchów które wykonujemy przyprzenoszeniu 12...n

T1 = 1Tn = 2 · Tn − 1 + 1 dla n > 1

n 1 2 3 4 5Tn 1 3 7 15 31

teza: Tn = 2n − 1dowód przez indukcje:

baza: T1 = 1 = 21 − 1krok indukcyjny:Tn = 2 · Tn−1 + 1 = 2 · (2n−1 − 1) + 1 = 2n − 1

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Ile ruchów wykonujemy?Tn — liczba ruchów które wykonujemy przyprzenoszeniu 12...n

T1 = 1Tn = 2 · Tn − 1 + 1 dla n > 1

n 1 2 3 4 5Tn 1 3 7 15 31

teza: Tn = 2n − 1dowód przez indukcje:

baza: T1 = 1 = 21 − 1krok indukcyjny:Tn = 2 · Tn−1 + 1 = 2 · (2n−1 − 1) + 1 = 2n − 1

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Wieze Hanoi

Ile ruchów wykonujemy?Tn — liczba ruchów które wykonujemy przyprzenoszeniu 12...n

T1 = 1Tn = 2 · Tn − 1 + 1 dla n > 1

n 1 2 3 4 5Tn 1 3 7 15 31

teza: Tn = 2n − 1dowód przez indukcje:

baza: T1 = 1 = 21 − 1krok indukcyjny:Tn = 2 · Tn−1 + 1 = 2 · (2n−1 − 1) + 1 = 2n − 1

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Rekurencja

ProblemZ szachownicy 2nx2n wycieto jedno pole. Jak za pomocaklocków w kształcie litery L (zajmujacych 3 pola) pokryctaka szachownice?

Rozwiazanie1 jesli n = 1, to zadanie jest łatwe2 jesli n > 1, to podzielmy nasza szachownice na cztery

szachownice 2n−1x2n−1 (pozioma i pionowa liniaprzechodzaca przez srodek planszy)

3 w srodkowym kwadracie 2x2 układamy L w taki sposób,aby w kazdej mniejszej szachownicy dokładnie jednopole było zajete (liczac to wyciete na wstepie)

4 cztery małe szachownice pokrywamy rekurencyjnie

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Rekurencja

ProblemZ szachownicy 2nx2n wycieto jedno pole. Jak za pomocaklocków w kształcie litery L (zajmujacych 3 pola) pokryctaka szachownice?

Rozwiazanie1 jesli n = 1, to zadanie jest łatwe2 jesli n > 1, to podzielmy nasza szachownice na cztery

szachownice 2n−1x2n−1 (pozioma i pionowa liniaprzechodzaca przez srodek planszy)

3 w srodkowym kwadracie 2x2 układamy L w taki sposób,aby w kazdej mniejszej szachownicy dokładnie jednopole było zajete (liczac to wyciete na wstepie)

4 cztery małe szachownice pokrywamy rekurencyjnie

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Rekurencja

ProblemZ szachownicy 2nx2n wycieto jedno pole. Jak za pomocaklocków w kształcie litery L (zajmujacych 3 pola) pokryctaka szachownice?

Rozwiazanie1 jesli n = 1, to zadanie jest łatwe2 jesli n > 1, to podzielmy nasza szachownice na cztery

szachownice 2n−1x2n−1 (pozioma i pionowa liniaprzechodzaca przez srodek planszy)

3 w srodkowym kwadracie 2x2 układamy L w taki sposób,aby w kazdej mniejszej szachownicy dokładnie jednopole było zajete (liczac to wyciete na wstepie)

4 cztery małe szachownice pokrywamy rekurencyjnie

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Rekurencja

ProblemZ szachownicy 2nx2n wycieto jedno pole. Jak za pomocaklocków w kształcie litery L (zajmujacych 3 pola) pokryctaka szachownice?

Rozwiazanie1 jesli n = 1, to zadanie jest łatwe2 jesli n > 1, to podzielmy nasza szachownice na cztery

szachownice 2n−1x2n−1 (pozioma i pionowa liniaprzechodzaca przez srodek planszy)

3 w srodkowym kwadracie 2x2 układamy L w taki sposób,aby w kazdej mniejszej szachownicy dokładnie jednopole było zajete (liczac to wyciete na wstepie)

4 cztery małe szachownice pokrywamy rekurencyjnie

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Rekurencja

ProblemZ szachownicy 2nx2n wycieto jedno pole. Jak za pomocaklocków w kształcie litery L (zajmujacych 3 pola) pokryctaka szachownice?

Rozwiazanie1 jesli n = 1, to zadanie jest łatwe2 jesli n > 1, to podzielmy nasza szachownice na cztery

szachownice 2n−1x2n−1 (pozioma i pionowa liniaprzechodzaca przez srodek planszy)

3 w srodkowym kwadracie 2x2 układamy L w taki sposób,aby w kazdej mniejszej szachownicy dokładnie jednopole było zajete (liczac to wyciete na wstepie)

4 cztery małe szachownice pokrywamy rekurencyjnie

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Przeszukiwanie przestrzeni rozwiazan

Problem 8 hetmanówCzy da sie ustawic na szachownicy 8 hetmanów, tak aby nieatakowały sie wzajemnie? Hetman atakuje wszystkie polalezace w tym samym wierszu, kolumnie lub na tej samejprzekatnej.

Zbiór rozwiazan

Jest to typowy problem w którym mamy pewien zbiórmozliwych rozwiazan — zbiór ustawien 8 hetmanów naszachownicy i szukamy jednego lub wszystkich rozwiazan,które spełniaja jakis warunek — w tym przypadku hetmanysie nie atakuja.

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Przeszukiwanie przestrzeni rozwiazan

Problem 8 hetmanówCzy da sie ustawic na szachownicy 8 hetmanów, tak aby nieatakowały sie wzajemnie? Hetman atakuje wszystkie polalezace w tym samym wierszu, kolumnie lub na tej samejprzekatnej.

Zbiór rozwiazan

Jest to typowy problem w którym mamy pewien zbiórmozliwych rozwiazan — zbiór ustawien 8 hetmanów naszachownicy i szukamy jednego lub wszystkich rozwiazan,które spełniaja jakis warunek — w tym przypadku hetmanysie nie atakuja.

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Problem 8 hetmanów

Rozwiazanienajprostszym rozwiazaniem jest sprawdzeniewszystkich mozliwych rozstawien hetmanówzauwazmy jednak, ze jesli pierwsze dwa postawionehetmany sie atakuja, to nie ma sensu próbowacrozstawic pozostałych 6, gdyz taki układ nigdy niespełni naszych warunkówmozemy konstruowac rozwiazanie, zaczynajac odpustej planszy i rozbudowujac je o kolejne hetmanykiedy jednak dwa juz postawione hetmany beda sie biłyto mozemy pominac taka konfiguracje

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Problem 8 hetmanów

Rozwiazanienajprostszym rozwiazaniem jest sprawdzeniewszystkich mozliwych rozstawien hetmanówzauwazmy jednak, ze jesli pierwsze dwa postawionehetmany sie atakuja, to nie ma sensu próbowacrozstawic pozostałych 6, gdyz taki układ nigdy niespełni naszych warunkówmozemy konstruowac rozwiazanie, zaczynajac odpustej planszy i rozbudowujac je o kolejne hetmanykiedy jednak dwa juz postawione hetmany beda sie biłyto mozemy pominac taka konfiguracje

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Problem 8 hetmanów

Rozwiazanienajprostszym rozwiazaniem jest sprawdzeniewszystkich mozliwych rozstawien hetmanówzauwazmy jednak, ze jesli pierwsze dwa postawionehetmany sie atakuja, to nie ma sensu próbowacrozstawic pozostałych 6, gdyz taki układ nigdy niespełni naszych warunkówmozemy konstruowac rozwiazanie, zaczynajac odpustej planszy i rozbudowujac je o kolejne hetmanykiedy jednak dwa juz postawione hetmany beda sie biłyto mozemy pominac taka konfiguracje

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Problem 8 hetmanów

Rozwiazanienajprostszym rozwiazaniem jest sprawdzeniewszystkich mozliwych rozstawien hetmanówzauwazmy jednak, ze jesli pierwsze dwa postawionehetmany sie atakuja, to nie ma sensu próbowacrozstawic pozostałych 6, gdyz taki układ nigdy niespełni naszych warunkówmozemy konstruowac rozwiazanie, zaczynajac odpustej planszy i rozbudowujac je o kolejne hetmanykiedy jednak dwa juz postawione hetmany beda sie biłyto mozemy pominac taka konfiguracje

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Backtracking — przeszukiwanie z nawrotami:

to ogólna technika pozwalajaca przegladac mozliwerozwiazania i szukac tych, które spełniaja pewnewarunkipolega ona na stopniowym rozbudowywaniurozwiazania (dodawanie hetmanów)jesli jednak aktualne rozwiazanie nie moze bycrozbudowane (2 hetmany sie szachuja), to nastepujepowrót do poprzedniego kroku, gdzie podejmowanajest próba znalezienia innej mozliwosciproces ten mozna zapisac rekurencyjnie — abyprzetworzyc rozwiazanie x :

1 jesli x jest dobrym rozwiazaniem to je wypisz2 jesli x nie moze byc rozbudowane to skoncz3 spróbuj wszystkich mozliwosci rozbudowania x i

przetwórz kazda z nich

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Backtracking — przeszukiwanie z nawrotami:

to ogólna technika pozwalajaca przegladac mozliwerozwiazania i szukac tych, które spełniaja pewnewarunkipolega ona na stopniowym rozbudowywaniurozwiazania (dodawanie hetmanów)jesli jednak aktualne rozwiazanie nie moze bycrozbudowane (2 hetmany sie szachuja), to nastepujepowrót do poprzedniego kroku, gdzie podejmowanajest próba znalezienia innej mozliwosciproces ten mozna zapisac rekurencyjnie — abyprzetworzyc rozwiazanie x :

1 jesli x jest dobrym rozwiazaniem to je wypisz2 jesli x nie moze byc rozbudowane to skoncz3 spróbuj wszystkich mozliwosci rozbudowania x i

przetwórz kazda z nich

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Backtracking — przeszukiwanie z nawrotami:

to ogólna technika pozwalajaca przegladac mozliwerozwiazania i szukac tych, które spełniaja pewnewarunkipolega ona na stopniowym rozbudowywaniurozwiazania (dodawanie hetmanów)jesli jednak aktualne rozwiazanie nie moze bycrozbudowane (2 hetmany sie szachuja), to nastepujepowrót do poprzedniego kroku, gdzie podejmowanajest próba znalezienia innej mozliwosciproces ten mozna zapisac rekurencyjnie — abyprzetworzyc rozwiazanie x :

1 jesli x jest dobrym rozwiazaniem to je wypisz2 jesli x nie moze byc rozbudowane to skoncz3 spróbuj wszystkich mozliwosci rozbudowania x i

przetwórz kazda z nich

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Backtracking — przeszukiwanie z nawrotami:

to ogólna technika pozwalajaca przegladac mozliwerozwiazania i szukac tych, które spełniaja pewnewarunkipolega ona na stopniowym rozbudowywaniurozwiazania (dodawanie hetmanów)jesli jednak aktualne rozwiazanie nie moze bycrozbudowane (2 hetmany sie szachuja), to nastepujepowrót do poprzedniego kroku, gdzie podejmowanajest próba znalezienia innej mozliwosciproces ten mozna zapisac rekurencyjnie — abyprzetworzyc rozwiazanie x :

1 jesli x jest dobrym rozwiazaniem to je wypisz2 jesli x nie moze byc rozbudowane to skoncz3 spróbuj wszystkich mozliwosci rozbudowania x i

przetwórz kazda z nich

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Backtracking — przeszukiwanie z nawrotami:

to ogólna technika pozwalajaca przegladac mozliwerozwiazania i szukac tych, które spełniaja pewnewarunkipolega ona na stopniowym rozbudowywaniurozwiazania (dodawanie hetmanów)jesli jednak aktualne rozwiazanie nie moze bycrozbudowane (2 hetmany sie szachuja), to nastepujepowrót do poprzedniego kroku, gdzie podejmowanajest próba znalezienia innej mozliwosciproces ten mozna zapisac rekurencyjnie — abyprzetworzyc rozwiazanie x :

1 jesli x jest dobrym rozwiazaniem to je wypisz2 jesli x nie moze byc rozbudowane to skoncz3 spróbuj wszystkich mozliwosci rozbudowania x i

przetwórz kazda z nich

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Backtracking — przeszukiwanie z nawrotami:

to ogólna technika pozwalajaca przegladac mozliwerozwiazania i szukac tych, które spełniaja pewnewarunkipolega ona na stopniowym rozbudowywaniurozwiazania (dodawanie hetmanów)jesli jednak aktualne rozwiazanie nie moze bycrozbudowane (2 hetmany sie szachuja), to nastepujepowrót do poprzedniego kroku, gdzie podejmowanajest próba znalezienia innej mozliwosciproces ten mozna zapisac rekurencyjnie — abyprzetworzyc rozwiazanie x :

1 jesli x jest dobrym rozwiazaniem to je wypisz2 jesli x nie moze byc rozbudowane to skoncz3 spróbuj wszystkich mozliwosci rozbudowania x i

przetwórz kazda z nich

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Backtracking — przeszukiwanie z nawrotami:

to ogólna technika pozwalajaca przegladac mozliwerozwiazania i szukac tych, które spełniaja pewnewarunkipolega ona na stopniowym rozbudowywaniurozwiazania (dodawanie hetmanów)jesli jednak aktualne rozwiazanie nie moze bycrozbudowane (2 hetmany sie szachuja), to nastepujepowrót do poprzedniego kroku, gdzie podejmowanajest próba znalezienia innej mozliwosciproces ten mozna zapisac rekurencyjnie — abyprzetworzyc rozwiazanie x :

1 jesli x jest dobrym rozwiazaniem to je wypisz2 jesli x nie moze byc rozbudowane to skoncz3 spróbuj wszystkich mozliwosci rozbudowania x i

przetwórz kazda z nich

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Problem 8 hetmanów

Szczegóły implementacyjne

w kazdym wierszu moze stac co najwyzej jeden hetmanaktualne rozwiazanie mozemy trzymac jako tablice 8liczb; het [i] oznacza połozenie hetmana w i-tymwierszubedziemy dostawiac kolejne hetmany w kolejnychwierszach, dzieki czemu kazde rozstawienie hetmanówbedziemy mogli otrzymac tylko na jeden sposób

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Problem 8 hetmanów

Szczegóły implementacyjne

w kazdym wierszu moze stac co najwyzej jeden hetmanaktualne rozwiazanie mozemy trzymac jako tablice 8liczb; het [i] oznacza połozenie hetmana w i-tymwierszubedziemy dostawiac kolejne hetmany w kolejnychwierszach, dzieki czemu kazde rozstawienie hetmanówbedziemy mogli otrzymac tylko na jeden sposób

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Problem 8 hetmanów

Szczegóły implementacyjne

w kazdym wierszu moze stac co najwyzej jeden hetmanaktualne rozwiazanie mozemy trzymac jako tablice 8liczb; het [i] oznacza połozenie hetmana w i-tymwierszubedziemy dostawiac kolejne hetmany w kolejnychwierszach, dzieki czemu kazde rozstawienie hetmanówbedziemy mogli otrzymac tylko na jeden sposób

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Implementacja

ImplementacjaProgram rozstawiajacy 8 hetmanów na szachownicyznajduje sie w notatkach.

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Backtracking

Dlaczego warto stosowac backtracking?

dzieki pomijaniu całych grup rozwiazan wystarczyprzejrzec o wiele mniej konfiguracji niz w rozwiazaniubrutalnymw przypadku problemu 8 hetmanów uzywajacprzeszukiwania z nawrotami mozna przy odrobiniecierpliwosci znalezc poprawne ustawienie bez uzyciakomputerapomimo trudnosci oszacowania złozonosci rozwiazanopartych na poszukiwaniu z nawrotami, zazwyczajdziałaja one duzo szybciej niz rozwiazania brutalne

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Backtracking

Dlaczego warto stosowac backtracking?

dzieki pomijaniu całych grup rozwiazan wystarczyprzejrzec o wiele mniej konfiguracji niz w rozwiazaniubrutalnymw przypadku problemu 8 hetmanów uzywajacprzeszukiwania z nawrotami mozna przy odrobiniecierpliwosci znalezc poprawne ustawienie bez uzyciakomputerapomimo trudnosci oszacowania złozonosci rozwiazanopartych na poszukiwaniu z nawrotami, zazwyczajdziałaja one duzo szybciej niz rozwiazania brutalne

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Backtracking

Dlaczego warto stosowac backtracking?

dzieki pomijaniu całych grup rozwiazan wystarczyprzejrzec o wiele mniej konfiguracji niz w rozwiazaniubrutalnymw przypadku problemu 8 hetmanów uzywajacprzeszukiwania z nawrotami mozna przy odrobiniecierpliwosci znalezc poprawne ustawienie bez uzyciakomputerapomimo trudnosci oszacowania złozonosci rozwiazanopartych na poszukiwaniu z nawrotami, zazwyczajdziałaja one duzo szybciej niz rozwiazania brutalne

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Porównanie 3 technik

Porównanie 3 technikomówilismy juz 3 wazne techniki programowania:

backtrackingprogramowanie dynamicznealgorytmy zachłanne

backtracking jest zazwyczaj najwolniejszy, ale manajszersze zastosowaniaprogramowanie dynamiczne jest zazwyczaj szybsze,ale skonstruowanie rozwiazania opartego o ta technikemoze byc trudniejsze lub czasami niemozliwealgorytmy zachłanne sa zazwyczaj najszybsze, alemaja najbardziej ograniczone zastosowanie

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Porównanie 3 technik

Porównanie 3 technikomówilismy juz 3 wazne techniki programowania:

backtrackingprogramowanie dynamicznealgorytmy zachłanne

backtracking jest zazwyczaj najwolniejszy, ale manajszersze zastosowaniaprogramowanie dynamiczne jest zazwyczaj szybsze,ale skonstruowanie rozwiazania opartego o ta technikemoze byc trudniejsze lub czasami niemozliwealgorytmy zachłanne sa zazwyczaj najszybsze, alemaja najbardziej ograniczone zastosowanie

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Porównanie 3 technik

Porównanie 3 technikomówilismy juz 3 wazne techniki programowania:

backtrackingprogramowanie dynamicznealgorytmy zachłanne

backtracking jest zazwyczaj najwolniejszy, ale manajszersze zastosowaniaprogramowanie dynamiczne jest zazwyczaj szybsze,ale skonstruowanie rozwiazania opartego o ta technikemoze byc trudniejsze lub czasami niemozliwealgorytmy zachłanne sa zazwyczaj najszybsze, alemaja najbardziej ograniczone zastosowanie

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Porównanie 3 technik

Porównanie 3 technikomówilismy juz 3 wazne techniki programowania:

backtrackingprogramowanie dynamicznealgorytmy zachłanne

backtracking jest zazwyczaj najwolniejszy, ale manajszersze zastosowaniaprogramowanie dynamiczne jest zazwyczaj szybsze,ale skonstruowanie rozwiazania opartego o ta technikemoze byc trudniejsze lub czasami niemozliwealgorytmy zachłanne sa zazwyczaj najszybsze, alemaja najbardziej ograniczone zastosowanie

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Porównanie 3 technik

Porównanie 3 technikomówilismy juz 3 wazne techniki programowania:

backtrackingprogramowanie dynamicznealgorytmy zachłanne

backtracking jest zazwyczaj najwolniejszy, ale manajszersze zastosowaniaprogramowanie dynamiczne jest zazwyczaj szybsze,ale skonstruowanie rozwiazania opartego o ta technikemoze byc trudniejsze lub czasami niemozliwealgorytmy zachłanne sa zazwyczaj najszybsze, alemaja najbardziej ograniczone zastosowanie

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Porównanie 3 technik

Porównanie 3 technikomówilismy juz 3 wazne techniki programowania:

backtrackingprogramowanie dynamicznealgorytmy zachłanne

backtracking jest zazwyczaj najwolniejszy, ale manajszersze zastosowaniaprogramowanie dynamiczne jest zazwyczaj szybsze,ale skonstruowanie rozwiazania opartego o ta technikemoze byc trudniejsze lub czasami niemozliwealgorytmy zachłanne sa zazwyczaj najszybsze, alemaja najbardziej ograniczone zastosowanie

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Porównanie 3 technik

Porównanie 3 technikomówilismy juz 3 wazne techniki programowania:

backtrackingprogramowanie dynamicznealgorytmy zachłanne

backtracking jest zazwyczaj najwolniejszy, ale manajszersze zastosowaniaprogramowanie dynamiczne jest zazwyczaj szybsze,ale skonstruowanie rozwiazania opartego o ta technikemoze byc trudniejsze lub czasami niemozliwealgorytmy zachłanne sa zazwyczaj najszybsze, alemaja najbardziej ograniczone zastosowanie

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Sudoku

ProblemW jaki sposób mozna szukac rozwiazan Sudoku 9x9?Zwróc uwage na brak mozliwosci zastosowania algorytmubrutalnego z powodu olbrzymiej ilosci potencjalnychrozwiazan.

Rozwiazanie

konfiguracje mozemy trzymac jako dwuwymiarowatablice 9x9 zawierajaca liczby w kolejnych komórkachw kolejnych krokach bedziemy dopisywac liczby wkolejnych wolnych polach wierszami od góry (a wobrebie wiersza od lewej)przed wpisaniem liczby w puste pole, bedziemywyznaczali liczby, które mozemy tam wpisacprzegladajac odpowiedni wiersz, kolumne i kwadrat 3x3

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Sudoku

ProblemW jaki sposób mozna szukac rozwiazan Sudoku 9x9?Zwróc uwage na brak mozliwosci zastosowania algorytmubrutalnego z powodu olbrzymiej ilosci potencjalnychrozwiazan.

Rozwiazanie

konfiguracje mozemy trzymac jako dwuwymiarowatablice 9x9 zawierajaca liczby w kolejnych komórkachw kolejnych krokach bedziemy dopisywac liczby wkolejnych wolnych polach wierszami od góry (a wobrebie wiersza od lewej)przed wpisaniem liczby w puste pole, bedziemywyznaczali liczby, które mozemy tam wpisacprzegladajac odpowiedni wiersz, kolumne i kwadrat 3x3

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Sudoku

ProblemW jaki sposób mozna szukac rozwiazan Sudoku 9x9?Zwróc uwage na brak mozliwosci zastosowania algorytmubrutalnego z powodu olbrzymiej ilosci potencjalnychrozwiazan.

Rozwiazanie

konfiguracje mozemy trzymac jako dwuwymiarowatablice 9x9 zawierajaca liczby w kolejnych komórkachw kolejnych krokach bedziemy dopisywac liczby wkolejnych wolnych polach wierszami od góry (a wobrebie wiersza od lewej)przed wpisaniem liczby w puste pole, bedziemywyznaczali liczby, które mozemy tam wpisacprzegladajac odpowiedni wiersz, kolumne i kwadrat 3x3

Rekurencja iposzukiwaniez nawrotami

RekurencjaLiczby Fibonacciego

NWD

Wieze Hanoi

szachownica

Backtracking

Sudoku

ProblemW jaki sposób mozna szukac rozwiazan Sudoku 9x9?Zwróc uwage na brak mozliwosci zastosowania algorytmubrutalnego z powodu olbrzymiej ilosci potencjalnychrozwiazan.

Rozwiazanie

konfiguracje mozemy trzymac jako dwuwymiarowatablice 9x9 zawierajaca liczby w kolejnych komórkachw kolejnych krokach bedziemy dopisywac liczby wkolejnych wolnych polach wierszami od góry (a wobrebie wiersza od lewej)przed wpisaniem liczby w puste pole, bedziemywyznaczali liczby, które mozemy tam wpisacprzegladajac odpowiedni wiersz, kolumne i kwadrat 3x3

Recommended