Matematyka dyskretna 1/Ćwiczenia 2: Rekurencja: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian
 
(Nie pokazano 7 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 11: Linia 11:
a_n &= 5 a_{n-1} - 6 a_{n-2}\quad\text{dla}\ n\geq 2,
a_n &= 5 a_{n-1} - 6 a_{n-2}\quad\text{dla}\ n\geq 2,
\end{align}  
\end{align}  
\right.
\right.</math></center>
</math></center>




Linia 35: Linia 34:




Przejdźmy więc do przypadku  <math>n\geq2 </math> .  
Przejdźmy więc do przypadku  <math>n\geq2</math> .  
Na mocy zależności rekurencyjnej otrzymujemy, że
Na mocy zależności rekurencyjnej otrzymujemy, że


Linia 59: Linia 58:
a_n &=  \frac{a_{n-1}^2}{a_{n-2}}\quad\text{dla}\ n\geq 2
a_n &=  \frac{a_{n-1}^2}{a_{n-2}}\quad\text{dla}\ n\geq 2
\end{align}  
\end{align}  
\right.
\right.</math></center>
</math></center>


}}
}}
Linia 69: Linia 67:
<math>a_n=2^n
<math>a_n=2^n
</math>  
</math>  
a następnie udowodnij to indukcyjnie ze względu na  <math>n </math> .
a następnie udowodnij to indukcyjnie ze względu na  <math>n</math> .
</div></div>
</div></div>


Linia 81: Linia 79:




Przejdźmy więc do przypadku  <math>n\geq2 </math> . Na mocy zależności rekurencyjnej otrzymujemy, że
Przejdźmy więc do przypadku  <math>n\geq2</math> . Na mocy zależności rekurencyjnej otrzymujemy, że




Linia 101: Linia 99:
l_n &= l_{n-1}+ l_{n-2}\quad\text{dla}\ n\geq 2.
l_n &= l_{n-1}+ l_{n-2}\quad\text{dla}\ n\geq 2.
\end{align}  
\end{align}  
\right.
\right.</math></center>
</math></center>




Udowodnij, że
Udowodnij, że
<math>l_n = f_{n+1} + f_{n-1},
<math>l_n = f_{n+1} + f_{n-1}</math>,
</math>  
gdzie  <math>f_n</math>  jest  <math>n</math> -tą liczbą Fibonacci'ego.  
gdzie  <math>f_n </math>  jest  <math>n </math> -tą liczbą Fibonacci'ego.  
(Dla precyzji obliczeń przyjmij, że  <math>f_{-1}=0</math> .)
(Dla precyzji obliczeń przyjmij, że  <math>f_{-1}=0</math> .)


Linia 114: Linia 110:


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">   
Zastosuj indukcję względem  <math>n </math> .
Zastosuj indukcję względem  <math>n</math> .
</div></div>
</div></div>


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
Dowód przeprowadzimy, indukcyjnie ze względu na  <math>n </math> . Dla wartości początkowych  <math>n=0,1 </math>  dostajemy odpowiednio, że
Dowód przeprowadzimy, indukcyjnie ze względu na  <math>n</math> . Dla wartości początkowych  <math>n=0,1</math>  dostajemy odpowiednio, że




Linia 126: Linia 122:




Przejdźmy więc do przypadku  <math>n\geq2 </math> . Na mocy zależności rekurencyjnej otrzymujemy, że
Przejdźmy więc do przypadku  <math>n\geq2</math> . Na mocy zależności rekurencyjnej otrzymujemy, że




Linia 149: Linia 145:


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">   
Załóżmy, że Marek ma pewność, że szukana liczba  <math>x </math>  znajduje się w przedziale  
Załóżmy, że Marek ma pewność, że szukana liczba  <math>x</math>  znajduje się w przedziale  
<math>\left[a,b\right]</math> .  
<math>\left[a,b\right]</math> .  
Po uzyskaniu odpowiedzi na pytanie,  
Po uzyskaniu odpowiedzi na pytanie,  
czy  <math>x </math>  jest większa niż  <math>\left\lfloor \left( a+b+1 \right)/2 \right\rfloor</math> ,  
czy  <math>x</math>  jest większa niż  <math>\left\lfloor \left( a+b+1 \right)/2 \right\rfloor</math> ,  
Marek zawęzi zbiór poszukiwań o połowę,   
Marek zawęzi zbiór poszukiwań o połowę,   
szukając później liczby  <math>x </math>  w przedziale  
szukając później liczby  <math>x</math>  w przedziale  
<math>\left[a,\left\lfloor \left( a+b-1 \right)/2 \right\rfloor\right]</math>  albo w przedziale  
<math>\left[a,\left\lfloor \left( a+b-1 \right)/2 \right\rfloor\right]</math>  albo w przedziale  
<math>\left[\left\lfloor \left( a+b+1 \right)/2 \right\rfloor,b\right]</math> .  
<math>\left[\left\lfloor \left( a+b+1 \right)/2 \right\rfloor,b\right]</math> .  
Linia 163: Linia 159:
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
Strategię Marka można przedstawić w następujący rekurencyjny sposób:
Strategię Marka można przedstawić w następujący rekurencyjny sposób:
* Jeśli szukana liczba  <math>x</math> jest z zakresu  <math>\left[a,b\right] </math>, gdzie <math>a=b</math>, to Marek wie, że szukana liczba to  <math>a </math> .
* Jeśli szukana liczba  <math>x</math> jest z zakresu  <math>\left[a,b\right]</math>, gdzie <math>a=b</math>, to Marek wie, że szukana liczba to  <math>a</math> .
* Jeśli szukana  <math>x</math>  liczba jest z zakresu  <math>\left[a,b\right] </math>, gdzie  <math>a<b</math>, to Marek zadaje pytanie, czy  <math>x\geq\left\lfloor \left( a+b+1 \right)/2 \right\rfloor</math>. Gdy Adam odpowie:
* Jeśli szukana  <math>x</math>  liczba jest z zakresu  <math>\left[a,b\right]</math>, gdzie  <math>a<b</math>, to Marek zadaje pytanie, czy  <math>x\geq\left\lfloor \left( a+b+1 \right)/2 \right\rfloor</math>. Gdy Adam odpowie:
** NIE, to  <math>x\in\left[a,\left\lfloor \left( a+b-1 \right)/2 \right\rfloor\right]</math> ,
** NIE, to  <math>x\in\left[a,\left\lfloor \left( a+b-1 \right)/2 \right\rfloor\right]</math> ,
** TAK, to  <math>x\in\left[\left\lfloor \left( a+b+1 \right)/2 \right\rfloor,b\right]</math> .
** TAK, to  <math>x\in\left[\left\lfloor \left( a+b+1 \right)/2 \right\rfloor,b\right]</math> .


Za każdym razem, zbiór możliwych wartości  <math>x </math>  zmniejsza się o połowę. Tak pomniejszony zbiór przeszukujemy wykorzystując rekurencyjnie opisywaną strategię.
Za każdym razem, zbiór możliwych wartości  <math>x</math>  zmniejsza się o połowę. Tak pomniejszony zbiór przeszukujemy wykorzystując rekurencyjnie opisywaną strategię.


Dla uproszczenia obliczeń załóżmy, że Marek na początku powiększa przedział poszukiwań do <math>\left[0,2^{\left\lceil \lg  n \right\rceil}-1\right] </math>. Może oczywiście tak zrobić, bo  <math>n\leq 2^{\left\lceil \lg  n \right\rceil}. </math> Równanie rekurencyjne opisujące liczbę zapytań  <math>T\!\left( n \right) </math> jest więc postaci
Dla uproszczenia obliczeń załóżmy, że Marek na początku powiększa przedział poszukiwań do <math>\left[0,2^{\left\lceil \lg  n \right\rceil}-1\right]</math>. Może oczywiście tak zrobić, bo  <math>n\leq 2^{\left\lceil \lg  n \right\rceil}</math> Równanie rekurencyjne opisujące liczbę zapytań  <math>T\!\left( n \right)</math> jest więc postaci




Linia 178: Linia 174:
T\!\left( n \right) &= T\!\left( \left\lceil \frac{n}{2} \right\rceil \right)+1\quad\text{dla}\ n\geq 2.
T\!\left( n \right) &= T\!\left( \left\lceil \frac{n}{2} \right\rceil \right)+1\quad\text{dla}\ n\geq 2.
\end{align}  
\end{align}  
\right
\right.</math></center>
</math></center>




Dla liczb postaci  <math>2^k </math> , gdzie  <math>k=0,1,\ldots </math>  otrzymujemy prostszą postać:
Dla liczb postaci  <math>2^k</math> , gdzie  <math>k=0,1,\ldots</math>  otrzymujemy prostszą postać:




Linia 190: Linia 185:
T\!\left( 2^k \right) &= T\!\left( 2^{k-1} \right)+1\quad\text{dla}\ k\geq 1.
T\!\left( 2^k \right) &= T\!\left( 2^{k-1} \right)+1\quad\text{dla}\ k\geq 1.
\end{align}  
\end{align}  
\right
\right.</math></center>
</math></center>




Linia 197: Linia 191:




<center><math>T\!\left( 2^k \right)=k.
<center><math>T\!\left( 2^k \right)=k</math></center>
</math></center>




Dla  <math>n=1 </math>  otrzymujemy, że
Dla  <math>n=1</math>  otrzymujemy, że




Linia 208: Linia 201:




Przejdźmy więc do przypadku, gdy  <math>k>0 </math> .  
Przejdźmy więc do przypadku, gdy  <math>k>0</math> .  
Korzystając z założenia indukcyjnego, że  <math>T\!\left( 2^{k-1} \right)=k-1</math> , otrzymujemy:
Korzystając z założenia indukcyjnego, że  <math>T\!\left( 2^{k-1} \right)=k-1</math> , otrzymujemy:


Linia 246: Linia 239:


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">   
Udowodnij indukcyjnie, ze względu na  <math>n </math> ,  
Udowodnij indukcyjnie, ze względu na  <math>n</math> ,  
że liczba ruchów potrzebna do posortowania  <math>2^n</math>  kart  
że liczba ruchów potrzebna do posortowania  <math>2^n</math>  kart  
wymaga  <math>\frac{3}{2}n2^n</math>  ruchów.
wymaga  <math>\frac{3}{2}n2^n</math>  ruchów.
Linia 267: Linia 260:
T\!\left( 2^n \right) &= 2T\!\left( 2^{n-1} \right)+\frac{3}{2}\cdot2^n\quad\text{dla}\ n\geq 1
T\!\left( 2^n \right) &= 2T\!\left( 2^{n-1} \right)+\frac{3}{2}\cdot2^n\quad\text{dla}\ n\geq 1
\end{align}  
\end{align}  
\right
\right.</math></center>
</math></center>




Linia 285: Linia 277:




Przejdźmy więc do przypadku, gdy  <math>n>0 </math> .
Przejdźmy więc do przypadku, gdy  <math>n>0</math> .
Korzystając z założenia indukcyjnego otrzymujemy:
Korzystając z założenia indukcyjnego otrzymujemy:


Linia 308: Linia 300:
T\!\left( n \right) &= 2T\!\left( \sqrt{n} \right)+1\quad\text{dla}\ n\geq 1
T\!\left( n \right) &= 2T\!\left( \sqrt{n} \right)+1\quad\text{dla}\ n\geq 1
\end{align}  
\end{align}  
\right.
\right.</math></center>
</math></center>




przy czym  <math>n </math>  jest postaci  <math>2^{2^k} </math> , gdzie  <math>k </math>  jest liczbą naturalną.
przy czym  <math>n</math>  jest postaci  <math>2^{2^k}</math> , gdzie  <math>k</math>  jest liczbą naturalną.


}}
}}
Linia 318: Linia 309:
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">   
Policz kilka pierwszych wyrazów tego ciągu.
Policz kilka pierwszych wyrazów tego ciągu.
Zaobserwuj, że  <math>T\!\left( 2^{2^k} \right)=k </math> ,  
Zaobserwuj, że  <math>T\!\left( 2^{2^k} \right)=k</math> ,  
a następnie udowodnij indukcyjnie, że w istocie tak jest.
a następnie udowodnij indukcyjnie, że w istocie tak jest.
</div></div>
</div></div>


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
Po zapisaniu  <math>n </math>  w postaci  <math>2^{2^k} </math>  otrzymujemy równanie:
Po zapisaniu  <math>n</math>  w postaci  <math>2^{2^k}</math>  otrzymujemy równanie:




Linia 331: Linia 322:
T\!\left( 2^{2^k} \right) &= 2T\!\left( 2^{2^{k-1}} \right)+1\quad\text{dla}\ k\geq 1
T\!\left( 2^{2^k} \right) &= 2T\!\left( 2^{2^{k-1}} \right)+1\quad\text{dla}\ k\geq 1
\end{align}  
\end{align}  
\right
\right.</math></center>
</math></center>




Linia 342: Linia 332:




Dla początkowej wartości  <math>k=0 </math>  otrzymujemy, że
Dla początkowej wartości  <math>k=0</math>  otrzymujemy, że





Aktualna wersja na dzień 23:39, 11 wrz 2023

Rekurencja

Ćwiczenie 1

Znajdź postać zwartą ciągu zadanego równaniem rekurencyjnym:


{a0=2,a1=5,an=5an16an2dla n2,


Wskazówka
Rozwiązanie

Ćwiczenie 2

Znajdź postać zwartą ciągu zadanego równaniem rekurencyjnym:


{a0=1,a1=2,an=an12an2dla n2
Wskazówka
Rozwiązanie

Ćwiczenie 3

Ciąg liczb Lucasa jest definiowany następującą zależnością rekurencyjną:


{l0=1,l1=3,ln=ln1+ln2dla n2.


Udowodnij, że ln=fn+1+fn1, gdzie fn jest n -tą liczbą Fibonacci'ego. (Dla precyzji obliczeń przyjmij, że f1=0 .)

Wskazówka
Rozwiązanie

Ćwiczenie 4

Adam i Marek zabawiali się w następującą grę. Adam wymyślał liczbę z zakresu od 0 do n1 . Zadaniem Marka było odgadnąć tę liczbę zadając Adamowi pytania, na które mógł odpowiadać jedynie TAK lub NIE. Znajdź najmniejszą liczbę pytań, po której Marek zawsze odnajdzie szukaną liczbę.

Wskazówka
Rozwiązanie

Ćwiczenie 5

Talia składa się z 2n kart. Sortujemy te karty poprzez rekurencyjne rozkładanie ich na dwie równe kupki w następujący sposób:

  • Jeśli kupka składa się z jednej karty, to kupka ta jest posortowana.
  • Kupkę zawierającą 2k kart, gdzie k>0 ,

dzielimy na dwie kupki zawierające po 2k1 kart. Każdą z tych mniejszych kupek sortujemy oddzielnie (powtarzając rekurencyjnie całą procedurę sortowania). Następnie kolejno zbieramy karty ze szczytów obu kupek, zawsze zabierając większą z dwu szczytowych kart.

Oblicz ile ruchów potrzebnych było do posortowania wszystkich 2n kart, jeżeli rozdzielenie 2k kart na dwie kupki wymaga 2k1 ruchów, a złożenie dwu posortowanych kupek, o 2k1 kartach, w jedną całość wymaga 2k ruchów.

Wskazówka
Rozwiązanie

Ćwiczenie 6

Rozwiąż równanie rekurencyjne:


{T(2)=0,T(n)=2T(n)+1dla n1


przy czym n jest postaci 22k , gdzie k jest liczbą naturalną.

Wskazówka
Rozwiązanie