logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Analiza algorytmów: zrozumienie zadań i materiałów dla początkujących

tzok 23 Lut 2008 18:56 3232 4
REKLAMA
  • #1 4837970
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38846
    Pomógł: 3175
    Ocena: 6537
    Zostałem uszczęśliwiony pięknym przedmiotem pt. Analiza i Złożoność Obliczeniowa Algorytmów... tylko, że niestety na studiach inżynierskich tego przedmiotu nie miałem ani ja ani moi koledzy z grupy :/
    Chętnie więc przyjmę wszelką pomoc w tej kwestii - tzn. jakieś materiały (ale nie na zasadzie pierwsze lepsze znalezione w google) zrozumiałe dla kogoś kto nie miał kontaktu z tą problematyką, lub pomoc w rozwiązaniu zadań.

    Dostałem też zestaw zadań i nawet nie wiem jak się za to zabrać, oto kilka przykładowych zadań ze zbioru podstawowego:
    Zliczaj(n)
    1 r = 0
    2 for i = 1 to n - 1
    3 	do for j = i + 1 to n
    4 		do for k = 1 to j
    5 			do r = r + 1
    6 return r
    
    Jaka wartość zostanie zwrócona przez powyższą funkcje? Wyraź odpowiedź jako funkcję zmiennej n.
    Poniższy algorytm wyznacza yz, gdzie y, z e N.
    Mnóż(y, z)
    1 x = 0
    2 while z > 0
    3 	do if z mod 2 = 1
    4 		then x = x + y
    5 	y = 2 · y
    6 	z = [z/2]
    7 return x
    
    Określ ile razy zostanie wykonane dodawanie (instrukcja w wierszu 4) w przypadku pesymistycznym.
    Poniższy algorytm wyznacza y^z, gdzie y e R, z e N.
    Potega(y, z)
    1 x = 1
    2 while z > 0
    3 	do x = x · y
    4 	z = z − 1
    5 return x
    
    Określ ile razy zostanie wykonane mnożenie (instrukcja w wierszu 3) w przypadku pesymistycznym.


    Z góry dziękuję za pomoc.
  • REKLAMA
  • #2 4839492
    Quarz
    Poziom 43  
    Posty: 14357
    Pomógł: 1646
    Ocena: 629
    Witam,
    tzok napisał:
    Zostałem uszczęśliwiony pięknym przedmiotem pt. Analiza i Złożoność Obliczeniowa Algorytmów... tylko, że niestety na studiach inżynierskich tego przedmiotu nie miałem ani ja ani moi koledzy z grupy :/
    Chętnie więc przyjmę wszelką pomoc w tej kwestii - tzn. jakieś materiały (ale nie na zasadzie pierwsze lepsze znalezione w google) zrozumiałe dla kogoś kto nie miał kontaktu z tą problematyką, lub pomoc w rozwiązaniu zadań.

    Dostałem też zestaw zadań i nawet nie wiem jak się za to zabrać, oto kilka przykładowych zadań ze zbioru podstawowego:
    Zliczaj(n)
    1 r = 0
    2 for i = 1 to n - 1
    3 	do for j = i + 1 to n
    4 		do for k = 1 to j
    5 			do r = r + 1
    6 return r
    
    Jaka wartość zostanie zwrócona przez powyższą funkcje? Wyraź odpowiedź jako funkcję zmiennej n.
    Poniższy algorytm wyznacza yz, gdzie y, z e N.
    Mnóż(y, z)
    1 x = 0
    2 while z > 0
    3 	do if z mod 2 = 1
    4 		then x = x + y
    5 	y = 2 · y
    6 	z = [z/2]
    7 return x
    
    Określ ile razy zostanie wykonane dodawanie (instrukcja w wierszu 4) w przypadku pesymistycznym.
    Poniższy algorytm wyznacza y^z, gdzie y e R, z e N.
    Potega(y, z)
    1 x = 1
    2 while z > 0
    3 	do x = x · y
    4 	z = z − 1
    5 return x
    
    Określ ile razy zostanie wykonane mnożenie (instrukcja w wierszu 3) w przypadku pesymistycznym.


    Z góry dziękuję za pomoc.

    przecież podane wyżej procedury są napisane w języku wysokiego poziomu, więc nie pozostaje Tobie nic innego jak poznać występujące tam polecenia i ich efekt działania, a potem "nająć się" za translator i postępować (liczyć) wedle podanych tam algorytmów... :D

    Pozdrawiam
  • REKLAMA
  • #3 4840485
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38846
    Pomógł: 3175
    Ocena: 6537
    Niby, tak tylko zwłaszcza w przypadku pierwszym, wiem co to liczy ale nie potrafię tego "matematycznie" zapisać. Programy już napisałem w C++... chyba żeby to zapisać wprost z użyciem Σ, tylko nie wiem czy o to chodzi...
  • REKLAMA
  • Pomocny post
    #4 4842105
    sheeeep
    Poziom 25  
    Posty: 944
    Pomógł: 46
    Ocena: 19
    
    Mnóż(y, z)
    1 x = 0
    2 while z > 0
    3 	do if z mod 2 = 1
    4 		then x = x + y
    5 	y = 2 · y
    6 	z = [z/2]
    7 return x
    


    No przypadek pesymistyczny będzie wtedy kiedy będziemy dzielić lb. przez 2 i będzie ciągle nieparzysta. (to wynika z kodu), więc:
    przykładem pesymistycznym np. może być z=15, y obojętne (operacja dodawania jest wykonywana niezależnie od y)
    15:2 reszta 1 x+=y;
    dzielimy całkowicie przez 2
    7:2 reszta 1 x+=y;
    dzielimy całkowicie przez 2
    3:2 reszta 1x+=y;
    dzielimy całkowicie przez 2
    1:2 reszta 1x+=y;
    dzielimy całkowicie przez 2 => z=0
    warunek pętli nie spełniony i program nie wejdzie...

    Liczymy co zrobiliśmy...
    I wychodzi nam Θ(log z) pesymistycznie. (oczywiście log(2))
    Odnośnie notacji, 'pierdoł' akademickich to niestety chyba nie pomogę.


    Poniższy algorytm wyznacza y^z, gdzie y e R, z e N.
    Potega(y, z)
    1 x = 1
    2 while z > 0
    3    do x = x · y
    4    z = z − 1
    5 return x
    


    ile razy pesymistycznie?
    no liniowo to idzie, więc Θ(z) razy.

    Cytat:

    Chętnie więc przyjmę wszelką pomoc w tej kwestii - tzn. jakieś materiały (ale nie na zasadzie pierwsze lepsze znalezione w google) zrozumiałe dla kogoś kto nie miał kontaktu z tą problematyką, lub pomoc w rozwiązaniu zadań.



    Cormen...
    1200 stron, wiem cegła, może niezbyt przyjemna ale czasem coś idzie ciekawego dla siebie znaleźć... Odnośnie notacji z 100 stron, co z czym i jak...

    Przykład pierwszy?
    Jak jutro się nikt nie znajdzie to może do niego siąde, chwilowo brak pomysłu


    pozdrawiam,
    Sheep
  • #5 5311499
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38846
    Pomógł: 3175
    Ocena: 6537
    Dziękuję za pomoc, przedmiot się skończył, zaliczenie jakoś dostałem, egzaminu na szczęście nie było ;)
REKLAMA