Średnia złożoność obliczeniowa algorytmu
Średnia złożoność obliczeniowa algorytmu
Hej
Nie wiem czy to odpowiedni dział, więc z góry przepraszam
Mam za zadanie policzyć średnią złożoność obliczeniową algorytmu. Z policzeniem złożoności optymistycznej i pesymistycznej nie miałam problemu, ale przy średniej zaczynają się schody.
Złożoność optymistyczna wyszła stała (konkretnie 1), a złożoność pesymistyczna - kwadratowa.
Jak w takim przypadku policzyć złożoność średnią?
Z góry dzięki
Pozdrawiam
K8
Nie wiem czy to odpowiedni dział, więc z góry przepraszam
Mam za zadanie policzyć średnią złożoność obliczeniową algorytmu. Z policzeniem złożoności optymistycznej i pesymistycznej nie miałam problemu, ale przy średniej zaczynają się schody.
Złożoność optymistyczna wyszła stała (konkretnie 1), a złożoność pesymistyczna - kwadratowa.
Jak w takim przypadku policzyć złożoność średnią?
Z góry dzięki
Pozdrawiam
K8
Średnia złożoność obliczeniowa algorytmu
Algorytm sprawdza, czy dwie tablice (o takiej samej liczbie elementów) mają wspólną liczbę, a wygląda dość prosto - 2 pętle, a wewnątrz warunek: jeśli t1=t2[j] to zakończ algorytm i zwróć wartość true.
Pozdrawiam
K8
Pozdrawiam
K8
- paladin
- Użytkownik
- Posty: 148
- Rejestracja: 24 sty 2005, o 22:15
- Płeć: Mężczyzna
- Lokalizacja: Kraków
- Pomógł: 19 razy
Średnia złożoność obliczeniowa algorytmu
Żeby policzyć złożoność średnią algorytmu, musisz wiedzieć, jak losowane są liczby do tablic. Dlatego nazywa się "średnia" - musi być średnią po czymś
A swoją drogą, pojęcie złożoności optymistycznej jest nieco dziwne, nigdy nie spotkałem się, żeby ktoś liczył to na poważnie.
A swoją drogą, pojęcie złożoności optymistycznej jest nieco dziwne, nigdy nie spotkałem się, żeby ktoś liczył to na poważnie.
Średnia złożoność obliczeniowa algorytmu
Nie mam żadnych danych, żadnych innych informacji poza sposobem działania algorytmu, więc jak mogę policzyć po "czymś"?paladin pisze:Żeby policzyć złożoność średnią algorytmu, musisz wiedzieć, jak losowane są liczby do tablic. Dlatego nazywa się "średnia" - musi być średnią po czymś
Na wykładzie profesor mówił, że w przypadku obu złożoności tego samego rzędu można policzyć średnią złożoność jako średnią arytmetyczną, ale co w przypadku złożoności różnego rzędu?
- paladin
- Użytkownik
- Posty: 148
- Rejestracja: 24 sty 2005, o 22:15
- Płeć: Mężczyzna
- Lokalizacja: Kraków
- Pomógł: 19 razy
Średnia złożoność obliczeniowa algorytmu
Chodzi o to, że złożoność będzie inna, jeśli n jest małe, a liczby losowane z bardzo dużego przedziału, a inna jeśli liczby są zerami lub jedynkami. "Średnia złożoność" nie oznacza "średnia z dwóch różnych algorytmów". Oznacza "jeśli programowi damy wszystkie możliwe zestawy danych, ile typowo zajmie mu działanie?"
Bez żadnych informacji, jakie są możliwe zestawy danych (w sensie: jaki jest zasięg liczb w tablicach) nie da się zrobić tego zadania.
Bez żadnych informacji, jakie są możliwe zestawy danych (w sensie: jaki jest zasięg liczb w tablicach) nie da się zrobić tego zadania.
Średnia złożoność obliczeniowa algorytmu
Wydaje mi się, że nie do końca się rozumiemy. Jakie dwa różne algorytmy masz na myśli?paladin pisze:Chodzi o to, że złożoność będzie inna, jeśli n jest małe, a liczby losowane z bardzo dużego przedziału, a inna jeśli liczby są zerami lub jedynkami. "Średnia złożoność" nie oznacza "średnia z dwóch różnych algorytmów". Oznacza "jeśli programowi damy wszystkie możliwe zestawy danych, ile typowo zajmie mu działanie?"
Bez żadnych informacji, jakie są możliwe zestawy danych (w sensie: jaki jest zasięg liczb w tablicach) nie da się zrobić tego zadania.
Załóżmy, że mam 2 tablice, każda ma po 5 (n) elementów. Operacją dominującą (czyli de facto decydującą o złożoności) w algorytmie jest porównanie.
W przypadku optymistycznym na pierwszych pozycjach obu tabel jest taka sama liczba, więc liczba porównań jest równa 1.
W przypadku pesymistycznym taka sama liczba jest na ostatnich pozycjach obu tabel, albo wręcz nie ma takiej samej liczby - wtedy liczba porównań wynosi n*n, czyli 25.
Jak teraz policzyć średnią?
Pozdrawiam
K8
- paladin
- Użytkownik
- Posty: 148
- Rejestracja: 24 sty 2005, o 22:15
- Płeć: Mężczyzna
- Lokalizacja: Kraków
- Pomógł: 19 razy
Średnia złożoność obliczeniowa algorytmu
Średnia złożoność nie zależy od optymistycznej (wspominałem, że to bezsensowne pojęcie?) i pesymistycznej.
Hm, może u Ciebie jest inna definicja średniej złożoności...możesz ją przytoczyć?
Hm, może u Ciebie jest inna definicja średniej złożoności...możesz ją przytoczyć?
Średnia złożoność obliczeniowa algorytmu
Jak już wspomniałam prowadzący na wykładzie mówił, że w przypadku gdy obie złożoności są tego samego rzędu, to można policzyć średnią arytmetyczną popełniając przy tym błąd obliczeń na poziomie pojedynczej operacji. Niestety nie raczył powiedzieć jak to zrobić z różnymi...
Pozdrawiam
K8
Pozdrawiam
K8
- paladin
- Użytkownik
- Posty: 148
- Rejestracja: 24 sty 2005, o 22:15
- Płeć: Mężczyzna
- Lokalizacja: Kraków
- Pomógł: 19 razy
Średnia złożoność obliczeniowa algorytmu
Ale samej definicji średniej złożoności nie masz podanej? Bo to na ogół nie jest średnia arytmetyczna...
No to nie masz wyboru: załóż, że liczby w tablicach są losowane z przedziału [0, K]. Jakie masz szanse zakończyć algorytm w danym, ustalonym kroku?
No to nie masz wyboru: załóż, że liczby w tablicach są losowane z przedziału [0, K]. Jakie masz szanse zakończyć algorytm w danym, ustalonym kroku?
Średnia złożoność obliczeniowa algorytmu
Mam tylko taką definicję:
\(\displaystyle{ T _{s}(n) = \sum_{d \in D}^{} p(d) \cdot T(d)}\)
gdzie:
- D - zbiór danych wejściowych
- p(d) - prawdopodobieństwo wystąpienia danej d
- T(d) - złożoność obliczeniowa dla danej d
Pozdrawiam
K8
\(\displaystyle{ T _{s}(n) = \sum_{d \in D}^{} p(d) \cdot T(d)}\)
gdzie:
- D - zbiór danych wejściowych
- p(d) - prawdopodobieństwo wystąpienia danej d
- T(d) - złożoność obliczeniowa dla danej d
Pozdrawiam
K8
- paladin
- Użytkownik
- Posty: 148
- Rejestracja: 24 sty 2005, o 22:15
- Płeć: Mężczyzna
- Lokalizacja: Kraków
- Pomógł: 19 razy
Średnia złożoność obliczeniowa algorytmu
No właśnie tego potrzeba - skąd wiedzieć, jakie jest prawdopodobieństwo wystąpienia danego zestawu liczb w tablicach?lady_k8 pisze: - p(d) - prawdopodobieństwo wystąpienia danej d
Rozwiążmy to zadanie przy dość rozsądnym założeniu, że liczby do tablic losowane są jednostajnie z przedziału \(\displaystyle{ [0, K-1]}\). Skorzystam też z nieco innej postaci wzoru na średnią złożoność - jest to wartość oczekiwana liczby kroków, jaką wykona algorytm.
Algorytm wykonuje kolejno \(\displaystyle{ N^2}\) porównań:
\(\displaystyle{ (a_1, b_1)}\)
\(\displaystyle{ (a_1, b_2)}\)
...
\(\displaystyle{ (a_n, b_n)}\)
Szansa, że jedno porównanie zakończy algorytm wynosi \(\displaystyle{ p = 1/K}\), nieudanie się poprzednich porównań nie wpływa na szansę udania następnego. Czyli algorytm z prawdopodobieństwem \(\displaystyle{ p}\) wykona 1 krok, z prawdopodobieństwem \(\displaystyle{ (1-p) p}\) 2 kroki, z prawdopodobieństwem \(\displaystyle{ (1-p)^2 p}\) 3 kroki itd. Z prawdopodobieństwem \(\displaystyle{ (1-p)^{n^2}}\) przejdzie wszystkie liczby i nie znajdzie żadnej równości.
Pozostaje policzyć wartość oczekiwaną:
\(\displaystyle{ \sum_{j=1}^{n^2} j \cdot p \cdot (1-p)^{j-1} + (1-p)^{n^2} \cdot n^2 = \ldots}\)
Obawiam się, że to dość brzydka suma. Wychodzi coś rzędu \(\displaystyle{ n^2(1-1/K)^{n^2 - 1}}\)
Średnia złożoność obliczeniowa algorytmu
Hmm, miałam nadzieję, że da się to policzyć prościej Niemniej wielkie dzięki za pomoc.
Pozdrawiam
K8
Pozdrawiam
K8