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

Złożoność obliczeniowa algorytmy

Mały hosting, OGROMNE możliwości
0 głosów
331 wizyt
pytanie zadane 17 kwietnia 2024 w Python przez skiczyn Nowicjusz (140 p.)

Witam, mógłby mi ktoś pomóc określić złożoność obliczeniową algorytmu i wytłumaczyć dlaczego tak?

wynik := n;​

 for i := 1 to n do​

   if (i < wynik and r[i]+r[wynik] <= R)​

    wynik := wynik-1;​

​

1 odpowiedź

+1 głos
odpowiedź 17 kwietnia 2024 przez Benek Szeryf (93,850 p.)

Załóżmy, że to Python ze względu na to, że pytanie umieszczono w takim dziale.

Zazwyczaj to będzie O(n), ponieważ trzonem tego kodu jest iterowanie po n-elementowej tablicy. Innymi słowy złożność jest linowa. W linii 5. odwołujemy się do kontenera po indeksie. I to może być klasyczna pythonowa lista lub słownik. W przypadku obu zazwyczaj wyszukiwanie ma złożność O(1), czyli nie zależy od rozmiaru kontenera, a więc ostatecznie O(n * 1) da nam O(n). Jeśli jednak r jest słownikiem to jest on zaimplementowany jako tablica mieszająca. Wyszukiwanie w niej elementów, gdy znamy indeks, ma zwykle złożność O(1), ale w pesymistycznym przypadku może mieć O(m), gdzie m jest rozmiarem słownika.

Zatem podsumowując, w zależności czym jest r złożność obliczeniowa wynosi:

  • O(n*1) = O(n) - zwykle tak będzie gdy r = dict, zawsze tak będdzie gdy r = list
  • O(n*m) - pesymistyczny wariant gdy r = dict

Podobne pytania

0 głosów
0 odpowiedzi 436 wizyt
0 głosów
1 odpowiedź 996 wizyt
pytanie zadane 1 listopada 2020 w Algorytmy przez niezalogowany
0 głosów
1 odpowiedź 354 wizyt
pytanie zadane 25 kwietnia 2020 w C i C++ przez Tacoo Nowicjusz (150 p.)

93,718 zapytań

142,631 odpowiedzi

323,263 komentarzy

63,266 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...