Ponieważ między podstawami logarytmów jest tylko stała, to czy nie jest po prostu dobrze pisać , w przeciwieństwie do , czy cokolwiek to może być podstawa?
algorithms
time-complexity
Alex5207
źródło
źródło
Odpowiedzi:
To zależy od logarytmu. Jeśli jest to tylko czynnik, to nie ma znaczenia, ponieważ duże-O lubθ pozwala pomnożyć przez dowolną stałą.
Jeśli weźmieszO(2logn) podstawa jest ważna. W bazie 2 miałbyś tylko O(n) , w bazie 10 chodzi o O(n0.3010) .
źródło
Ponieważ notacja asymptotyczna jest nieświadoma stałych czynników, a dowolne dwa logarytmy różnią się stałym współczynnikiem, zasada nie robi różnicy:logzan = Θ ( logbn ) dla wszystkich a , b > 1 . Nie ma więc potrzeby określania podstawy logarytmu przy stosowaniu notacji asymptotycznej.
źródło
Jakologxy=1logyx ilogxy=logzylogzx , tak loganlogbn=lognblogna=logab . Ponieważlogab jest dodatnią stałą (dla wszystkicha,b>1 ), więclogan=Θ(logbn) .
źródło
W większości przypadków bezpieczne jest upuszczenie podstawy logarytmu, ponieważ, jak wskazały inne odpowiedzi, formuła zmiany podstawy dla logarytmów oznacza, że wszystkie logarytmy są stałymi wielokrotnościami.
W niektórych przypadkach nie jest to bezpieczne. Na przykład @ gnasher729 wskazał, że jeśli masz logarytm w wykładniku, to podstawa logarytmiczna jest rzeczywiście znacząca.
Another case in which the log base matters is one in which there's some externally-tunable parameter to the algorithm that control the logarithmic base. A great example of this is the B-tree, which requires some external parameterb . The height of a B-tree of order b is Θ(logbn) , where the base of the logarithm is significant in that b is not a constant.
To summarize, in the case where you have a logarithm with a constant base, you can usually (subject to exceptions like what @gnasher729 has pointed out) drop the base of the logarithm. But when the base of the logarithm depends on some parameter to the algorithm, it's usually not safe to do so.
źródło