Główna zawartość
Informatyka
Kurs: Informatyka > Rozdział 1
Lekcja 3: Asymptotyczne tempo wzrostuAsymptotyczne tempo wzrostu
Jak na razie analizowaliśmy wyszukiwanie liniowe i binarne poprzez liczenie ilości maksymalnych prób, które musimy wykonać. Lecz to, co chcemy tak naprawdę wiedzieć to, jak długo się wykonuje. Jesteśmy zainteresowani czasem wykonania, nie tylko ilością prób. Czas wykonania wyszukiwania liniowego oraz binarnego obejmuje czas poświęcony na wykonanie i sprawdzenie każdej próby, oprócz tego związany jest jeszcze z czymś więcej niż tylko z tymi czynnościami.
Czas wykonania algorytmu zależy od tego, jak szybko komputer jest w stanie wykonać instrukcje, zawarte w kodzie danego algorytmu. A to zależy od szybkości komputera, języka programowania oraz kompilatora, który tłumaczy program z języka programowania na kod, który wykonywany jest bezpośrednio na komputerze jak również innych czynników.
Przyjrzyjmy się czasowi wykonania algorytmu bardziej dokładnie. Po pierwsze, określmy jak długo wykonuje się algorytm w odniesieniu do rozmiaru danych wejściowych. Ta koncepcja jest dość intuicyjna, nieprawdaż? Już wiemy, że maksymalna liczba prób w wyszukiwaniach liniowym oraz binarnym zwiększa się wraz ze wzrostem długości przeszukiwanej tablicy. Pomyśl sobie o systemie GPS. Jeśli znałby tylko o autostrady, a nie każdą najmniejszą drogę, wyznaczenie trasy byłoby znacznie szybsze, prawda? Więc o czasie wykonania algorytmu myślimy, jako funkcji wielkości danych wejściowych.
Druga ważna idea polega na tym, że skupiamy się na pytaniu, jak szybko funkcja ta rośnie wraz ze wzrostem wielkości danych wejściowych. Mówimy na to tempo wzrostu czasu wykonania. Aby móc wykonać obliczenie, upraszczamy badaną funkcję, by wydobyć z niej najważniejsze elementy, odrzucając te mniej istotne. Załóżmy, na przykład, że algorytm działa na rozmiarze danych wejściowych wynoszącym n, i wówczas zajmie mu to 6, n, squared, plus, 100, n, plus, 300 instrukcji maszynowych. Wyraz 6, n, squared zaczyna gwałtownie rosnąć, gdy staje się większy od 100, n, plus, 300, to znaczy, gdy n, equals, 20). Poniżej znajduje się wykres przedstawiający wartości dla 6, n, squared oraz 100, n, plus, 300 dla n od 0 do 100.
Mówimy, że czas działania tego algorytmu rośnie jak n, squared, pomijając współczynnik 6 oraz pozostałe wyrażenia 100, n, plus, 300. Tak naprawdę nie ma to znaczenia, jakich współczynników używamy; tak długo jak czas wykonania wynosi a, n, squared, plus, b, n, plus, c, dla niektórych liczb a, is greater than, 0, b oraz c zawsze będą wartością n, dla których a, n, squared jest większe niż b, n, plus, c i ta różnica zwiększa się wraz ze wzrostem n. Na przykład, poniżej znajduje się wykres ilustrujący wartości dla 0, comma, 6, n, squared oraz 1000, n, plus, 3000, gdzie dokonaliśmy redukcji współczynnika n, squared 10-krotnie natomiast pozostałe dwie stałe zwiększyliśmy 10-krotnie.
Wartość n, przy którym 0, comma, 6, n, squared staje się większe od 1000, n, plus, 3000 wzrosła, ale zawsze znajdzie się punkt przecięcia bez względu na to, jakie przyjęte stałe.
Dzięki pominięciu mniej znaczących wyrażeń i stałych współczynników, możemy skupić się tej części algorytmu, która w największym stopniu wpływa na czas jego wykonania – jest to tempo wzrostu – bez pogrążania się w szczegóły, które utrudniają jego zrozumienie. Kiedy pomijamy stałe współczynniki oraz mniej znaczące wyrażenia, używamy notacji asymptotycznej. Zapoznamy się z jej trzema postaciami: notacja duże-\Theta, notacja duże-O oraz notacja duże-\Omega.
Materiał powstał we współpracy profesorów z Dartmouth Computer Science Thomasa Cormen i Devina Balkcom oraz zespołu nauczycieli informatyki Khan Academy. Materiał jest udostępniony na licencji CC-BY-NC-SA.
Chcesz dołączyć do dyskusji?
- ile to jest 2*100-50+4000*3:9?(1 głos)
- "Załóżmy, na przykład, że algorytm działa na rozmiarze danych wejściowych wynoszącym n, wówczas zajmie mu to 6n²+100n+300 instrukcji maszynowych."
Szczerze nie rozumiem genezy tych liczb, dlaczego 6n² i co oznaczają oraz skąd się wzięły te współczynniki.
Z góry dziękuję za odpowiedź.(1 głos)- To całe zdanie to jest założnie. Powinno być "Załóżmy, że algorytm który działa na rozmiarze danych wejściowych wynoszących n, wykonuję BLABLABLA instrukcji."
Sprawdziłem, z angielską wersją i to zwykły problem z tłumaczeniem, już zgłosiłem do poprawki.(6 głosów)