Jakiego terminu mogę użyć do opisania czegoś o złożoności O (N log N)?
Na przykład:
O (1): Stała
O (log N): Logarytmiczny
O (N): liniowy
O (N log N): ??????
O (N 2 ): Kwadratowy
O (N 3 ): Sześcienny
Jakiego terminu mogę użyć do opisania czegoś o złożoności O (N log N)?
Na przykład:
O (1): Stała
O (log N): Logarytmiczny
O (N): liniowy
O (N log N): ??????
O (N 2 ): Kwadratowy
O (N 3 ): Sześcienny
Odpowiedzi:
„N log N” jest tak dobry, jak to tylko możliwe, i powinien być dobrze zrozumiany przez profesjonalnych programistów. Nie można oczekiwać, że będzie jedno słowo opisujące każdą istniejącą klasę złożoności.
Istnieje żargonowe określenie liniowo- matematyczne, które właśnie to oznacza.
Nie wierzę, że jest to powszechnie rozumiane przez wszystkich programistów, więc jeśli nie będziesz ostrożny, ukryje więcej, niż informuje. Osobiście zwykle go nie używam, a gdybym to zrobił, prawdopodobnie zdefiniowałbym go przy pierwszym użyciu, na przykład „w tym artykule rozważane są O(N log N)
algorytmy linearithmic ( )”.
Czasami nazywa się to „loglinear”, chociaż to słowo w rzeczywistości oznacza coś innego. Pozostałbym jednak przy „N log N”, jak sugeruje odpowiedź @ Philipa .
Ponieważ czynnik log n
rośnie powoli, opis jakościowy dla „ O(n log n)
byłoby liniowy”. W zależności od odbiorców klasa O(n log n)
algorytmów może być dobrze znana, jak na przykład w przypadku szybkiego sortowania n
elementów według porównań.
O(n · f(n))
gdzief(n) << n
. Ale to pasuje również do rzeczy takich jakO(n · log log n)
iO(n α(n))
gdzieα(n)
jest odwrotność funkcji Ackermanna.