• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

złożoność algorytmów

Object Storage Arubacloud
0 głosów
1,015 wizyt
pytanie zadane 4 czerwca 2016 w C i C++ przez karola Nowicjusz (230 p.)
Mimo, że pojawiło się tutaj kilka takich pytań... ja nadal nie rozumiem obliczania złożoności algorytmów... Jak odróżnić O od Omegi czy od Tethy...
Jak się zabrać do obliczania tej złożoności w najprostszych programach?

Będę bardzo wdzięczna za wytłumaczenie.

Z góry dziękuję! :)

2 odpowiedzi

+1 głos
odpowiedź 4 czerwca 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
Złożoność się zapisuje za pomocą dużego O( i tutaj złożoność) np O(n*n). Jak to się oblicza, hmm. Patrzysz na dane wejściowe i liczba tych danych to n. Jeśli robisz pętlę by je wczytać to jest to złożoność O(n). Jeśli w tej pętli co wczytujesz dane zagnieżdżasz inna pętle to będzie już złożoność O(n*m) gdzie m to liczba obiegow tej zagniezdzonej pętli. Stałą programu pomijasz np O( 10*n) pomijasz te 10
komentarz 4 czerwca 2016 przez karola Nowicjusz (230 p.)
i to jest ta pesymistyczna?
A co z tymi gdzie występuje jakiś logarytm?
komentarz 4 czerwca 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
Tak zawsze podajemy pesymistyczna wartość. Lugarytm to np jak robisz wyszukiwanie binarne to masz złożoność log n
komentarz 4 czerwca 2016 przez karola Nowicjusz (230 p.)
a jeśli mam dwie pętle, ale nie zagnieżdżone w sobie, to sumujemy ? i będziemy mieli 2n?
komentarz 4 czerwca 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
Czytaj ze zrozumieniem. Będziesz miała czas n stała programu pomijasz czyli twoja 2.
komentarz 4 czerwca 2016 przez karola Nowicjusz (230 p.)
ahaaa :) okej, to teraz rozumiem, przynajmniej tą część :) dziekuję

a jeszcze jest cos takiego jak twierdzenie o rekursji uniwersalnej. To w praktyce, gdzie je stosujemy?
komentarz 4 czerwca 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
Pierwszy raz słyszę ten termin. Potem poczytam i odpiszę co i jak
komentarz 4 czerwca 2016 przez karola Nowicjusz (230 p.)
ok, w takim razie dziękuję bardzo :)
komentarz 5 czerwca 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
http://smurf.mimuw.edu.pl/node/829 Tu jest dość sensownie napisane o tym twierdzeniu
komentarz 6 czerwca 2016 przez karola Nowicjusz (230 p.)
a mam takie zadanie:

Wyznacz złożoność czasową T(n) spełniającą zależność T(n)=4T(n/2)+f(n) algorytmów rekurencyjnych A1, A2, A3, A4 jeśli dla kolejnych A1, A2, A3, A4 zachodzi:
a) f(n)=n^3
b) f(n)=n^2
c) f(n)=n
d) f(n)=nlogn
Gdybym mogła prosić o wskazówkę albo jeden podpunkt, żebym wiedziała jak to dalej liczyć... byłabym wdzięczna :)
komentarz 7 czerwca 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
Zakładając, że rozumie treść zadania ( nie wiem o co chodzi dokładnie  A1, A2 itd.) To pomyśl ile razy wykonasz funkcję T(n) ( pomijamy narazie f(n) ). Załóżmy że nasze n = 10 . To się  funkcja wykona tak: T(10 ) = 4 * T ( 5 ) , potem T(5) = 4*T(2), następnie T(2) = 4*T(1) i T(1) = 4*T(0). Z tego wynika, że  stopień zagłębienia funkcji T(N) wynosi log2(n)+1  ( w tym przypadku ( 4 poziomy zagłebiania ) .  Okej mamy jedną część, teraz uwzględnimy tą czwórkę, za każdym razem wykonuje się 4 razy T(n) czyli ogólna liczbą wywołań funkcji T( n )  to około 4^ log2(N)+1. Teraz zobacz, że każdemu wywołaniu towarzyszy funkcja f( n ) o złożoności n^3.

Czyli złożoność wynosi 4^(log2(N)+1) *  złozoność funkcji czyli dla przykładu A to wynik wynosi 4^(log2(n)+1)*n^3. Mam nadzieję, że wszystko jest OK i przepraszam za błędy
+1 głos
odpowiedź 4 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)
Mówiąc najprościej, złożoność obliczeniowa (zapewne chodzi ci o tzw. czasową złożoność obliczeniową) to ilość różnych operacji jakie będą się wykonywać w algorytmie (przypisywanie wartości do zmiennych, warunki itp.). Jeżeli np. skanujesz jakiś wektor od początku do końca (pętla for), a dla każdego (bądź tylko niektórych) elementu będziesz przypisywać jakąś wartość to algorytm będzie miał czasową złożoność obliczeniową zbliżoną do O(n), gdzie [n] to wielkość wektora.. jeżeli, w algorytmie będziesz miała do czynienia z tablicą 2-wymiarową to złożoność będzie zbliżona do O(n^2). Jeżeli na przykład czasowa złożoność obliczeniowa wynosi O(n^3) gdy da się taki sam algorytm napisać o złożoności obliczeniowej O(n*logn) to możemy bez problemy wywnioskować, który jest szybszy.
PS Czasowa złożoność obliczeniowa często jest mylona z czasem wykonywania się programu/algorytmu. Jest to błędne rozumowanie.

Podobne pytania

0 głosów
1 odpowiedź 1,234 wizyt
pytanie zadane 1 września 2015 w Rozwój zawodowy, nauka, praca przez rubiikk Obywatel (1,900 p.)
0 głosów
0 odpowiedzi 257 wizyt
0 głosów
0 odpowiedzi 635 wizyt
pytanie zadane 16 września 2019 w C i C++ przez stim4pl Nowicjusz (170 p.)

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...