Výpočtová zložitosť a porovnania

Čaute, viete mi prosím pomôcť toto vypočítať? Ďakujem každému za pomoc.


Obtížnost: Vysoká škola
Kategorie: Vysoká škola
Marek K.

Marek K.

12. 06. 2023   21:38

4 odpovědi

Marek K.
Marek K.
12.06.2023 21:39:24
  • toto
Jan Z.
Jan Z.
15.06.2023 09:19:22

První příklad má dle mého složitost \(O(N^2)\). Za použití nějaké formy Setu, nebo Dictionary to jde zjednodušit na \(O(N)\). Např v syntaxi pythonu:


Wanted  = { } 

for x in a:
    if x in Wanted: return True
    Wanted.add(sucet-x)

return False
Jan Z.
Jan Z.
15.06.2023 09:21:18

Vnořené cykly se délkou násobí. V nejhorším případě tedy "Pro každý prvek pole projdu všechny po něm následující", tedy \(N*(N-1)/2\) kroků, tedy výše zmíněná složitost.

Jan Z.
Jan Z.
15.06.2023 09:27:31

Když si rozmyslíme druhý příklad, vidíme, že uvedený algoritmus provádí řádově \(O(N)\) porovnání. Zkus si to nakreslit pro pár počtů... pro 8 dostanu 7 porovnání, pro 10 dostanu 11 a pro 5 dostanu 5. Nejlépe to dopadne pro \(2^n\) prvků.

Nerekurzivní algoritmus provede přesně \(n-1\) porovnání - první s ničím neporovnává, každý další porovnává s aktuálním maximem.

Pro napsání komentáře se musíte přihlásit.