[Teoria złożoności][C] Oszacowanie złożoności

LawlietDB
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 3 cze 2014, o 08:13
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 2 razy

[Teoria złożoności][C] Oszacowanie złożoności

Post autor: LawlietDB »

Dzień dobry

Przewertowałem kilkanaście stron, ale nie do końca rozumiem jak to prawidłowo wyliczyć.

Algorytm wygląda następująco:

Kod: Zaznacz cały

        int f = 1, n, x, licznik = 0;
        printf("Podaj wartosc n: ");
        scanf("%d", &n);
        printf("Podaj wartosc x: ");
        scanf("%d", &x);
       
        while(n > 0) {
                if(n%2 == 0) {
                        x = x*x;
                        n = n/2;
                        licznik++;
                }
                else {
                        f = f*x;
                        n = n-1;
                        licznik++;
                }
        }
Mamy dwie instrukcje scan, if, else no i while. Rozumiem, że jedna z instrukcji (if/else) zostanie wykonana o 1 raz mniej, tak? Zatem jedna wykona się n razy, a druga n-1. Czy dobrze rozumuję? Jak dalej pójść tym tropem?

Z góry dziękuję za odpowiedź.
Ostatnio zmieniony 21 paź 2014, o 16:57 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
norwimaj
Użytkownik
Użytkownik
Posty: 5101
Rejestracja: 11 mar 2011, o 16:31
Płeć: Mężczyzna
Lokalizacja: 52°16'37''N 20°52'45''E
Podziękował: 4 razy
Pomógł: 1001 razy

[Teoria złożoności][C] Oszacowanie złożoności

Post autor: norwimaj »

LawlietDB pisze: Mamy dwie instrukcje scan, if, else no i while. Rozumiem, że jedna z instrukcji (if/else) zostanie wykonana o 1 raz mniej, tak?
Nie.
LawlietDB pisze: Zatem jedna wykona się n razy, a druga n-1. Czy dobrze rozumuję?
Zdecydowanie nie.
LawlietDB pisze: Jak dalej pójść tym tropem?
Lepiej przyjrzyj się działaniu algorytmu dla konkretnych wartości \(\displaystyle{ n}\). Na przykład weź \(\displaystyle{ n=32}\) i zobacz, czy któraś z instrukcji wykona się \(\displaystyle{ 32}\) razy.
LawlietDB
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 3 cze 2014, o 08:13
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 2 razy

[Teoria złożoności][C] Oszacowanie złożoności

Post autor: LawlietDB »

Rozrysowałem sobie to wszystko dokładnie. Spisałem kilka wartości przy danym n otrzymany licznik. Funkcja jaka z tego powstałą jest równa "log n". Można odpowiedzieć, że szacunkiem złożoności obliczeniowej dla tego algorytmu jest O(log n)?
norwimaj
Użytkownik
Użytkownik
Posty: 5101
Rejestracja: 11 mar 2011, o 16:31
Płeć: Mężczyzna
Lokalizacja: 52°16'37''N 20°52'45''E
Podziękował: 4 razy
Pomógł: 1001 razy

[Teoria złożoności][C] Oszacowanie złożoności

Post autor: norwimaj »

Tak, ten algorytm oblicza \(\displaystyle{ x^n}\) w złożoności \(\displaystyle{ O(\log n)}\), a nawet dokładnie \(\displaystyle{ \Theta(\log n)}\).
ODPOWIEDZ