Big O (logn) log base e입니까?


96

이진 검색 트리 유형의 데이터 구조의 경우 Big O 표기법은 일반적으로 O (logn)로 표시됩니다. 로그에 소문자 'l'이있는 경우 자연 로그로 설명되는 로그 밑 e (n)를 의미합니까? 간단한 질문에 대해 죄송하지만 다른 묵시적 로그를 구분하는 데 항상 어려움이있었습니다.


58
다른 사람들이 지적했듯이 그것은 중요하지 않습니다. 모든 로그는 관련된 밑수에만 의존하는 상수에 의해 서로 다릅니다. 이러한 요인은 상수이기 때문에 점근 분석의 목적과 관련이 없습니다. 둘째, 묵시적 근거를 결정하는 데는 문맥에 달려 있습니다. 대략적인 경험 법칙으로 다음을 사용하십시오. 1. 수학자가 글 log n을 쓸 때 그는 자연 로그를 의미합니다. 2. 컴퓨터 과학자가 글 log n을 쓸 때 그는 2 진법을 의미합니다. 3. 엔지니어가 글 log n을 쓸 때 그는 10 진수를 의미합니다. 이것은 일반적으로 사실입니다.
jason

4
@Jason, (수학 내에서) 또 다른 규칙은 ln n은 자연 로그를 의미하고 log n은 밑이 10이라는 것입니다. Think ln은 프랑스어 'logarithm naturelle'을 의미합니다.
인터넷 맨

2
로그의 밑은 각 노드에있는 자식의 수입니다. 이진 트리이면 기본 2 로그입니다.
Paul

3
제이슨, 당신의 대답에 감사드립니다. 그리고 여기에 대해 생각할 것이 있습니다. 로그가 어떤 기준에 있는지 조사했을 때 (2로 가정) 동일한 답을 보았습니다. 상수 log_10 (2)를 제거 할 수 있기 때문에 중요하지 않습니다. 이에 대한 내 문제는 다음과 같습니다. 5 log_10 (5) <5 반면 5 log_2 (5)> 5. O (n logn)가 O보다 런타임이 더 좋거나 나쁘다는 것을 개념화하는 데 도움이되도록 계산에 빠르게 입력했습니다. (엔). 베이스에 따라 중요합니다. 따라서, 이에 대한 올바른 대답은 로그가 문맥 상 대부분의 컴퓨터 과학 응용 프로그램에서 2 진법을 의미한다는 것이어야한다고 생각합니다.
Doug Mead

@jason, ln (수학자 해석)을 사용하는 것이 더 쉽다고 말하고 싶습니다;). 다른 두 가지 예는 합리적입니다.
belford

답변:


77

big-O () 표기법으로 표현되면 둘 다 맞습니다. 그러나 O () 다항식을 유도 하는 동안 이진 검색 의 경우 로그 2 정확합니다. 나는이 구별이 귀하의 질문이 시작되는 직관적 인 영감이라고 가정합니다.

또한 내 의견으로는 O (log 2 N)를 하는 것이 알고리즘의 런타임 파생을 더 잘 전달하기 때문에 예제에 더 좋습니다.

big-O () 표기법에서는 상수 인자가 제거됩니다. 한 로그 밑에서 다른 로그 밑으로 변환하려면 상수 인자를 곱해야합니다.

따라서 O (log N)는 상수 인자로 인해 O (log 2 N) 와 같습니다 .

그러나 대답에 log 2 N을 쉽게 입력 할 수 있다면 그렇게하는 것이 더 교육적입니다. 이진 트리 검색 의 경우 big-O () 런타임을 유도하는 동안 log 2 N이 도입되는 것이 맞습니다 .

결과를 big-O () 표기법으로 표현하기 전에 차이가 매우 중요합니다. big-O 표기법을 통해 전달되는 다항식을 유도 할 때이 예제 에서는 O () 표기법을 적용하기 전에 log 2 N 이외의 로그를 사용하는 것은 올바르지 않습니다 . 다항식이 big-O () 표기법을 통해 최악의 런타임을 전달하는 데 사용되는 즉시 어떤 로그가 사용되는지는 중요하지 않습니다.


4
그러나 그것이 어떤 염기 log_2 n에 해당하는지 보여주는 것은 매우 쉽습니다 . 그래서 나는 base 2를 사용하는 것이 어떻게 "더 정확"한지 잘 모르겠습니다. Θ(log_a n)a
bcat

1
Kinopkio와 bcat이 유용 해 지도록 도와 주셔서 감사합니다. 처음에는 잘 쓰여지지 않았습니다. :)
Heath Hunnicutt

2
나는 명확성을 추가했지만 내 대답이 사람들을 혼란스럽게 할 것이라고 생각하는 것이 아팠습니다. 사실 여기에있는 대부분의 답변은 OP의 직감을 고려하지 않았고 그에게 많은 것을 가르치려고 노력했습니다. 나는 경쟁에 그다지 놀라지 않고 교육학에 대한 낮은 기준에 약간 슬프다.
Heath Hunnicutt

11
"O () 다항식을 유도하는 동안 이진 검색의 경우 log2 만 정확합니다." -1은 가난한 수학입니다. x (n) ~ O (f (n))의 정의는 모든 n> n_0에 대해 c * (f (n)) <x (n)과 같은 상수 c가 존재한다고 말합니다. 따라서 상수 계수는 분석 중에 완전히 관련이 없습니다.
rlbond

3
log2 (x)는 log10 (x) / log10 (2)와 같으므로 어느 쪽이든 파생시킬 수 있습니다. 로그는 어느 시점에서든 기준 2가 아닙니다.
rlbond 2010

80

상이한 기지의 모든 대수가 있기 때문에 큰 O 표기법은 대수베이스의 영향을받지 않는 일정한 인자에 의해 관련 , O(ln n)동일하다 O(log n).

여기에 이미지 설명 입력


2
그래픽은 깔끔하지만 O ()-다항식의 유도에 대해 생각해보십시오. O ()가 적용되기 전에는 log-base-2 만 이진 검색에 적합합니다.
Heath Hunnicutt

1
@Heath Hunnicutt : 번호 log_2 x상이 log_b x일정한 인자에 의해 c(b)모든 기지국에 대한 b독립적 x.
jason

4
그러나 질문과 관련이없고 혼란 스러울 뿐인데 그것에 대해 이야기하고 있습니까?
hobbs

4
hobbs : 그 사실이 OP가 문의하도록 영감을 준 이유이기 때문입니다. 나는 그의 아이디어를 답과 연결하려고 노력하고 있습니다. 그래서 그는 자신의 직관이 왜 O ()에 적용되지 않는지 이해하지만 여기서 배운 것을 분석의 파생 부분에 과도하게 적용하지 않습니다. 오해의 근본 원인을 다루지 않는 간결한 답변은 더 많은 오해로 이어질 수 있습니다. 나쁜 교육학입니다.
Heath Hunnicutt

4
@Heath Hunnicutt : 점근 분석을한다면 상관 없습니다. Big-O를 던지기 위해 마지막 순간까지 기다리는 것은 내가 모든 로그를 어리석은 상수로 곱하고 나누고 모든 단계에서 밑을 바꿀 수 있다는 사실을 바꾸지 않습니다. 즉,를 포함하는 분석이있는 경우 모든 곳에 log_2 n들어가서 대체 한 다음 log_2 n모든 곳에 log_pi 2 * log_2 n / log_pi 2있는 분석으로 끝낼 수 log_pi 2 * log_pi n있습니다. 이제 내 분석은 log_pi n.
jason

9

big-O 표기법은 일반적으로 점근 적으로 가장 높은 차수 만 표시하므로 기본이 무엇인지는 중요하지 않으므로 n상수 계수가 사라집니다. 다른 로그 밑은 상수 계수와 동일하므로 불필요합니다.

즉, 아마도 log base 2를 가정 할 것입니다.


@Kinopiko : 정확히 그것에 대해 잘못된 것은 무엇입니까? 더 정확하게는 내 대답이 여기에있는 다른 사람과 사실적으로 어떻게 다른가요?
Daniel Pryden

아, 아마도 "계수"를 사용한 나의 실수. 명확히하기 위해 편집하겠습니다.
Daniel Pryden

그것은 당신의 대답에 대한 나의 주요 문제였습니다. 또한 "그들은 여전히 ​​약간의 효과가있을 것입니다"라는 말의 의미가 약간 불분명합니다. 어떤 영향을 미치나요?
bcat

1
귀하의 답변은 최고 차수 계수에 대해 설명합니다. 당신이 말한 것은 그것이가는 한 정확하지만 그것이 로그 밑 수가 무관 한 이유는 아닙니다. 그 이유는 서로 다른 기본 로그의 차이가 O ()에 흡수되는 상수이기 때문입니다.

1
@Kinopiko : 좋습니다. 나는 우리가 같은 말을하고 있다고 생각합니다. O (100) = O (100 * 1) = O (C * 1) = O (1)이기 때문에 O (100) = O (1)이라고 말할 것입니다. 이것이 내가 상수 표현이 불필요하다는 것을 의미하는 것입니다. 즉,이다 순서모든 일정은 1입니다
다니엘 Pryden

7

둘 다 맞습니다. 이것에 대해 생각하다

log2(n)=log(n)/log(2)=O(log(n))
log10(n)=log(n)/log(10)=O(log(n))
logE(n)=log(n)/log(E)=O(log(n))

2

예, big-O 표기법에 대해 이야기 할 때 기본은 중요하지 않습니다. 그러나 실제 검색 문제에 직면했을 때 계산적으로 중요합니다.

트리 구조에 대한 직관을 개발할 때 이진 검색 트리는 트리의 높이 인 O (n log n) 시간에 검색 할 수 있다는 것을 이해하면 도움이됩니다. 즉, n 노드가있는 이진 트리에서 트리 깊이는 O (n log n) (밑수 2)입니다. 각 노드에 3 개의 자식이있는 경우 트리는 O (n log n) 시간 내에 검색 할 수 있지만 밑이 3 인 로그를 사용합니다. 계산적으로 각 노드의 자식 수는 성능에 큰 영향을 미칠 수 있습니다 (예 : 링크 텍스트 참조). ).

즐겨!


당신은 이진 트리의 높이가 n log n이 아니라 log n이라고 말하려고 했죠?
cell

1

기술적으로 기본은 중요하지 않지만 일반적으로 기본 2로 생각할 수 있습니다.


1

먼저 함수 f (n)이 O (g (n))라는 의미를 이해해야합니다.

공식적인 정의는 다음과 같습니다. * A 함수 f (n)은 O (g (n)) iff | f (n) | <= C * | g (n) | n> k 일 때마다, 여기서 C와 k는 상수입니다. *

따라서 f (n) = log base a of n, 여기서 a> 1 및 g (n) = log base b of n, 여기서 b> 1

노트: 이는 a 및 b 값이 1보다 큰 값일 수 있음을 의미합니다 (예 : a = 100 및 b = 3).

이제 우리는 다음을 얻습니다. n의 log base a는 O (log base b of n)라고합니다. | log base a of n | <= C * | n의 밑수 b | n> k 일 때마다

k = 0, C = log base a of b를 선택합니다.

이제 방정식은 다음과 같습니다. | log base a of n | <= log base a of b * | log base b of n | n> 0 일 때

오른쪽에있는 방정식을 조작 할 수 있습니다. = log base a of b * | log base b of n | = | n의 밑수 b | * log base a of b = | log base a of b ^ (log base b of n) | = | n의 밑수 a |

이제 방정식은 다음과 같습니다. | log base a of n | <= | n의 밑수 a | n> 0 일 때

방정식은 제한 a, b> 1 및 n> 0을 제외하고 값 n, b 또는 a가 무엇이든 항상 참입니다. 따라서 n의 log base a는 O (log base b of n)이며 a, b는 중요하지 않으므로 간단히 생략 할 수 있습니다.

여기에서 YouTube 비디오를 볼 수 있습니다 : https://www.youtube.com/watch?v=MY-VCrQCaVw

여기에서 기사를 읽을 수 있습니다 : https://medium.com/@randerson112358/omitting-bases-in-logs-in-big-o-a619a46740ca

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