Cześć!
Chciałbym poprosić was o pomoc, ponieważ od pewnego czasu na studiach męczy mnie pewne zagadnienie, z którym nie mogę sobie poradzić. Postaram się mój problem wytłumaczyć jak najlepiej, ale nie gwarantuję, że gdzieś po drodze się nie pomylę.
A więc tak: mam na studiach przedmiot, który nazywa się "Podstawy informatyki" i właściwie wszystko było w porządku, dopóki nie pojawił się temat o nazwie "Złożoność obliczeniowa algorytmów". Niestety, ze względu na niewystarczającą ilość czasu to zagadnienie nie zostało dokładnie wytłumaczone i przez to pojawił się problem. Bo o ile samą definicję złożoności powiedzmy, że rozumiem, tak nigdy nie mogę prawidłowo wykonać zadania o takiej treści:
Na podstawie fragmentu pseudokodu podaj liczbę porównań i oszacuj złożoność w sensie notacji O(·).
A tu przykładowa treść zadania:
i=0;
while(i<2*n)
{
j=1;
do
{
j=j*3;
}while(j<4*n);
i=i+1;
}
Jeżeli w tym zadaniu chodziłoby TYLKO o wyznaczenie złożoności algorytmu, to jeszcze jest to przeze mnie do zrobienia. Ale niestety, oprócz tego muszę jeszcze wyznaczyć wzór na ilość porównań pętli zewnętrznej (Lz) i pętli wewnętrznej (Lw), a następnie wszystko zsumować (Lc). Takie uwarunkowanie mam podane w zadaniu:
L jest liczbą porównań, a jako rozwiązanie zadania podajemy Lw, Lz, Lc, O(·)
I powiem szczerze: nigdy nie potrafiłem wyznaczyć prawidłowych wzorów. Za każdym razem podaję odpowiedź po części dobrą (bo złożoność, co najciekawsze, zawsze podaję prawidłową), ale zadanie nie zostanie uznane, dopóki nie będzie zrobione w całości. I tu zwracam się do was o pomoc: czy mógłby mi ktoś wyjaśnić, na jakiej podstawie wyznacza się te wzory na ilość porównań? Ja wiem, że to pewnie nie jest trudne, ale naprawdę nie mogę sobie z tym poradzić. Byłbym bardzo wdzięczny za jakiekolwiek wyjaśnienie, które pozwoli mi to zrozumieć.
A, i jeśli jest to istotne, to muszę to policzyć na kartce, bez użycia komputera i kalkulatora.