Cześć,
Jestem uczniem technikum i zacząłem się trochę uczyć o złożoności algorytmów.
Trochę nie rozumiem pewnego rozumowania. Załóżmy że mamy algorytm o złożoności n^3 i załóżmy że dla danych n=3 algorytm wykonuje się w 81sekund.
Jak mogę obliczyć ile czasu (przybliżony) zajmie wykonanie tego algorytmu dla danych np n=9 (3x większe)?
Czy odpowiedzią będzie tutaj 243sekund?
Czy ktoś mógłby mnie nakierować, albo może podrzucić jakieś strony które to tłumaczą?
Złożoność reprezentowana w notacji O(n) to tylko ukazanie zależności między ilością operacji jakie wykonuje się w algorytmie a ilością danych. Podkreślam w algorytmie. Czasu jako takiego się tu nie porusza.
Jak się zachowa czasowo program w którym wykorzysta się ów algorytm to już inna historia. Wiele czynników może bowiem różne implementacje algorytmów spowalniać.
Temat tego co może w praktyce je spowalniać to już wkraczanie na grunt takich zagadnień jak
- architektura komputera
- pewne dane w ogólności lub w szczególnych przypadkach mogą być przetwarzane przez pewne maszyny szybciej, inne wolniej
- inny jest też czas wczytania/zapisu danych do pamięci RAM, inny na dysk, inny zaś jest czas dostępu do rejestrów procesora
- niektóre komputery mogą mieć układy obliczeniowe wykonujące pewne operacje szybciej niż inne przez co w praktyce nieco bardziej złożony algorytm może się dla interesującego nas zakresu danych wykonywać szybciej niż wymagający mniej kroków dla tego samego zbioru danych
- architektura systemu operacyjnego
- mechanizmy przydzielania pamięci - wpływa np. na czas zapisu danych
- system plików - zapis/odczyt między systemami mogą się różnić
- sposób zarządania przez system operacyjny jednocześnie uruchomionymi programami
3.architektura oprogramowania
- język jaki wybrano
- jak język implementuje różne operacje
- jak ty implementujesz w nim operacje - pewne funkcjonalnie równoważne rozwiązania można na różne sposoby zaprogramować
I inne, których nie jestem w stanie przytoczyć w tym momencie z głowy.