W przypadku struktur danych typu drzewo wyszukiwania binarnego widzę, że notacja Big O jest zwykle oznaczana jako O (logn). Czy z małą literą „l” w logarytmie oznacza to logarytm o podstawie e (n), zgodnie z opisem logarytmu naturalnego? Przepraszam za proste pytanie, ale zawsze miałem problem z rozróżnieniem różnych logarytmów domniemanych.
math
binary-tree
complexity-theory
big-o
BuckFilledPlatypus
źródło
źródło
log n
, ma na myśli logarytm naturalny. 2. Kiedy informatyk pisze,log n
ma na myśli podstawę dwa. 3. Kiedy inżynier piszelog n
, ma na myśli dziesiątkę. Są to zwykle prawdziwe.Odpowiedzi:
Raz wyrażone w notacji duże-O (), oba są poprawne. Jednak podczas wyprowadzania wielomianu O (), w przypadku wyszukiwania binarnego , tylko log 2 jest poprawny. Zakładam, że to rozróżnienie było intuicyjną inspiracją dla twojego pytania.
Ponadto, moim zdaniem, napisanie O (log 2 N) jest lepsze dla twojego przykładu, ponieważ lepiej przekazuje wyprowadzenie czasu działania algorytmu.
W notacji duże-O () stałe czynniki są usuwane. Konwersja z jednej podstawy logarytmu do innej polega na pomnożeniu przez stały współczynnik.
Zatem O (log N) jest równoważne O (log 2 N) ze względu na stały współczynnik.
Jeśli jednak możesz łatwo wpisać log 2 N w swojej odpowiedzi, zrobienie tego jest bardziej pedagogiczne. W przypadku wyszukiwania drzew binarnych masz rację, że log 2 N jest wprowadzany podczas wyprowadzania środowiska uruchomieniowego big-O ().
Przed wyrażeniem wyniku w notacji duże-O () różnica jest bardzo ważna. Podczas wyprowadzania wielomianu, który ma być przekazany za pomocą notacji duże-O, niepoprawne byłoby w tym przykładzie użycie logarytmu innego niż log 2 N przed zastosowaniem notacji O (). Gdy tylko wielomian zostanie użyty do przekazania najgorszego przypadku środowiska uruchomieniowego za pomocą notacji big-O (), nie ma znaczenia, jaki logarytm zostanie użyty.
źródło
log_2 n
jest to możliweΘ(log_a n)
dla każdej bazya
, więc nie jestem pewien, czy użycie podstawy 2 jest „bardziej poprawne”.Na notację dużego O nie ma wpływu podstawa logarytmiczna, ponieważ wszystkie logarytmy w różnych bazach są powiązane przez stały współczynnik ,
O(ln n)
jest równoważnyO(log n)
.źródło
log_2 x
Różni się odlog_b x
stałego współczynnikac(b)
dla dowolnej bazyb
niezależnej odx
.log_2 n
, mogę po prostu wejść i zastąpić jąlog_2 n
wszędzie,log_pi 2 * log_2 n / log_pi 2
a następnie po prostu skończyć z analizą, która jestlog_pi 2 * log_pi n
wszędzie. Teraz moja analiza dotyczylog_pi n
.Tak naprawdę nie ma znaczenia, jaka to podstawa, ponieważ notacja duże-O jest zwykle zapisywana pokazując tylko asymptotycznie najwyższy rząd
n
, więc stałe współczynniki spadną. Ponieważ inna podstawa logarytmu jest równoważna stałemu współczynnikowi, jest zbędna.To powiedziawszy, prawdopodobnie założyłbym, że podstawa dziennika 2.
źródło
Obie są poprawne. Pomyśl o tym
źródło
Tak, mówiąc o notacji duże-O, baza nie ma znaczenia. Jednak obliczeniowo w obliczu prawdziwego problemu z wyszukiwaniem ma to znaczenie.
Rozwijając intuicję dotyczącą struktur drzewiastych, warto zrozumieć, że drzewo wyszukiwania binarnego można przeszukiwać w czasie O (n log n), ponieważ jest to wysokość drzewa - to znaczy w drzewie binarnym z n węzłami drzewo głębokość wynosi O (n log n) (podstawa 2). Jeśli każdy węzeł ma troje dzieci, drzewo można nadal przeszukiwać w czasie O (n log n), ale z logarytmem o podstawie 3. Z punktu widzenia obliczeń liczba elementów podrzędnych każdego węzła może mieć duży wpływ na wydajność (patrz na przykład: tekst łącza )
Cieszyć się!
Paweł
źródło
Technicznie podstawa nie ma znaczenia, ale ogólnie można o niej myśleć jako o podstawie-2.
źródło
Najpierw musisz zrozumieć, co to znaczy, że funkcja f (n) jest O (g (n)).
Formalna definicja jest następująca: * Mówi się, że funkcja f (n) jest O (g (n)) iff | f (n) | <= C * | g (n) | ilekroć n> k, gdzie C i k są stałymi. *
niech f (n) = log o podstawie a od n, gdzie a> 1 i g (n) = log o podstawie b z n, gdzie b> 1
UWAGA: Oznacza to, że wartości a i b mogą mieć dowolną wartość większą niż 1, na przykład a = 100 i b = 3
Teraz otrzymujemy: log o podstawie a od n mówi się, że jest O (podstawa log b z n) iff | podstawa loga a z n | <= C * | log o podstawie b z n | kiedykolwiek n> k
Wybierz k = 0 i C = log o podstawie a z b.
Teraz nasze równanie wygląda następująco: | log o podstawie a od n | <= log o podstawie a z b * | log o podstawie b z n | zawsze, gdy n> 0
Zwróć uwagę na prawą stronę, możemy manipulować równaniem: = log o podstawie a z b * | log o podstawie b z n | = | loguj podstawę b z n | * log o podstawie a z b = | log o podstawie a z b ^ (log o podstawie b z n) | = | log o podstawie a n |
Teraz nasze równanie wygląda następująco: | log o podstawie a od n | <= | log o podstawie a n | zawsze, gdy n> 0
Równanie jest zawsze prawdziwe bez względu na wartości n, b lub a, poza ich ograniczeniami a, b> 1 i n> 0. Zatem logarytm o podstawie a od n wynosi O (o podstawie b od n), a ponieważ a, b nie ma znaczenia, możemy je po prostu pominąć.
Możesz zobaczyć wideo na YouTube tutaj: https://www.youtube.com/watch?v=MY-VCrQCaVw
Możesz przeczytać artykuł na ten temat tutaj: https://medium.com/@randerson112358/omitting-bases-in-logs-in-big-o-a619a46740ca
źródło