알고리즘의 시간 복잡성 : 로그의 기초를 나타내는 것이 중요합니까?


답변:


63

로그 위치에 따라 다릅니다. 그것이 단지 요인이라면, big-O 또는 θ 는 상수를 곱할 수 있기 때문에 차이가 없습니다 .

O(2logn) 를 취 하면 밑이 중요합니다. 밑면 2에서는 O(n) , 밑면 10에서는 O(n0.3010) 입니다.


5
나는 이것이 2 와 같은 것을 생각 해낼 것이라고 생각한다. . I는 같은 번호를 표현하기위한 어떠한 이유로 볼 수없는2의 C로그BN보다는N을(가) -이든 - 그것 -to-IS-(계산의 중간 단계로서 아마도 제외). 2logn2clogbnn
David Richerby

7
"지수의 상수 요소"에 대해 +1
트론 맨더

50

점근 표기법 상수 인자 망각하고, 임의의 두 개의 대수 상수 계수 차이 때문에,베이스에는 차이가 없음 logan=Θ(logbn) 모두 , B > 1 . 따라서 점근 표기법을 사용할 때 로그의 밑을 지정할 필요가 없습니다.a,b>1


13
= 대신에 를 선호합니다=
Nayuki

16
표준 표기법이 사용하는 것을 두려워합니다 . =
Yuval Filmus

4
@YuvalFilmus 표준 표기법은 오해의 소지가 있으며 다른 곳의 표준과 완전히 다르며 알고리즘 복잡도는 비슷한 점에서 완전히 외계인처럼 보입니다. "표준 표기법"은 더 좋고 유사하게 명확한 솔루션보다 나쁜 솔루션을 선호하는 이유가되어서는 안됩니다. (심볼의 의미는 어쨌든 상황에 따라 분명하다.)
wizzwizz4

7
@ wizzwizz4 일반적인 관행은 훌륭한 이유입니다. 효율적인 의사 소통을 촉진합니다. 이것이 우리 모두 영어 철자법의 단점을 견뎌낸 이유입니다.
Yuval Filmus

3
때때로 log a n = Θ ( log b n ) 보다 명확하기에는 너무 많은 것들이 있습니다 . nloganΘ(nlogbn)logan=Θ(logbn)
JiK

15

마찬가지로 logxy=1logyxlogxy=logzylogzx 따라서 loganlogbn=lognblogna=logab. 마찬가지로logab(모든 양의 정수이다,B>1) 따라서,로그N=Θ(로그B의N을).a,b>1logan=Θ(logbn)


8

대부분의 경우 다른 답이 지적했듯이 로그의 기본 변경 수식은 모든 로그가 서로 일정한 배수임을 의미하기 때문에 로그의 밑을 버리는 것이 안전합니다.

이것이 안전하지 않은 경우가 있습니다. 예를 들어 @ gnasher729는 지수에 로그가 있으면 로그 밑이 실제로 중요하다는 점을 지적했습니다.

bbΘ(n+b)logbUUO((n+b)logbU)b this simplifies to O(nlogU). However, what happens if b isn't a constant? A clever technique is to pick b=n, in which case the runtime simplifies to O(n+lognU). Since lognU = logUlogn, the overall expression simplifies to O(nlogUlogn). Notice that, in this case, the base of the logarithm is indeed significant because it isn't a constant with respect to the input size. There are other algorithms that have similar runtimes (an old analysis of disjoint-set forests ended up with a term of logm/2+2 somewhere, for example), in which case dropping the log base would interfere with the runtime analysis.

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 parameter b. 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.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.