Landau 용어를 합하면 무엇이 잘못됩니까?


14

나는 썼다

i=1n1i=i=1nO(1)=O(n)

그러나 내 친구는 이것이 잘못되었다고 말합니다. TCS 치트 시트에서 나는이 합이 이라고도 Hn알려져 있는데, 이는 에서 로그 성장을 n합니다. 따라서 내 경계는 매우 선명하지 않지만 필요한 분석에 충분합니다.

내가 뭘 잘못 했어?

편집 : 내 친구는 같은 추론으로 그것을 증명할 수 있다고 말합니다.

i=1ni=i=1nO(1)=O(n)

이제 이것은 분명히 잘못입니다! 무슨 일이야?


2
이 질문의 태그에 대한 토론은 여기를 참조 하십시오 .
Raphael

태그 알고리즘 에 대한 메타 토론 .
Kaveh

일반적인 예에 ​​대한보다 구체적인 처리를 참조하십시오. 이 중첩 루프의 점근 적 런타임은 무엇입니까?
Gilles 'SO- 악의를 멈춰라'

답변:


10

당신이하고있는 일은 매우 편리한 표기법 남용입니다.

집합을 나타내며 수행중인 방식으로 산술 연산을 수행 할 수 없기 때문에 일부 교육생은 작성하는 내용이 넌센스라고 말합니다 .O(f)

그러나 이러한 pedants를 무시하고 가 세트의 일부 멤버를 나타내는 것으로 가정하는 것이 좋습니다 . 그래서 우리가 말할 때 F ( N ) = g ( N ) + O ( N ) , 우리 정말 평균 경우 그 F ( N ) - g ( N ) O ( N ) . (참고 : 일부 pedants는이 진술에서도 f ( n ) 가 숫자이고 fO(f)f(n)=g(n)+O(n)f(n)g(n)O(n)f(n)f 기능입니다!)

이것은 다음과 같은 표현식을 작성하는 것이 매우 편리합니다.

nk=1nk1/kn+O(n1/3)

이것이 의미하는 바는 어떤 있다는 것입니다.fO(n1/3)

nk=1nk1/kn+f(n)

당신의 경우

k=1n1k=k=1nO(1)=O(n)

당신은 그것을 더 학대하고 조심해야합니다.

여기에는 두 가지 가능한 해석이 있습니다. n 의 함수 또는 k 의 함수를 나타 니까?O(1)nk

나는 올바른 해석이 그것을 의 함수로 해석하는 것이라고 믿는다 .k

당신의 함수로 생각을하려고하면 , 그것은 생각처럼, 잠재적 착오로 이어질 수있는 잘못된하지 생각 k는 것입니다 O ( 1 ) 와 쓰기를 시도 Σ n은 K = 1 K = Σ N K = 1 O를 ( 1 )nkO(1)k=1nk=k=1nO(1)

의 함수로 생각 하면 f = O ( g ) (인수가 ∞ 일 때 )이고 g0 이 아닌 경우 ,kf=O(g)g0

S(n)=k=1nf(k)=k=1nO(g(k))=O(k=1n|g(k)|)

중간에, 우리는 표기의 편리 남용 사용한 유의 을 의미하는 몇몇 함수 H O ( g을 ) 합인 Σ N K = 1 H ( K ) . O 내부의 최종 함수는 n 의 함수를 나타냅니다 . 그 증거는 그렇게 어렵지는 않지만, 점근 적 상한 (즉, 충분히 큰 인수의 경우)을 다루고 있다는 사실을 수용해야하지만 합계는 1 에서 시작합니다 .O(g(k))hO(g)k=1nh(k)On1

그것을 의 함수로 생각 하면 f = O ( g ) (인수가 ∞ 일 때 )이면nf=O(g)

S(n)=k=1nf(k)=k=1nO(g(n))=O(ng(n))

따라서 당신의 증거는 본질적으로 어느 해석이든 정확합니다.


1
결론 : 모든 Landau 심볼 은 고유 한 상수를 가지고 있음을 알고 있어야 합니다.
Raphael

8

당신이 쓴 것은 완벽합니다. 고조파 번째 숫자는 설정에 참 O ( N ) .nO(n)

증명 : . i=1n1ilnn+12n=O(n)

상한 단단 하지 않지만 정확합니다.O(n)


4
좋아 : 1 / i ≤ 1 = O (1).
JeffE

1
우려는 두 번째 등호에 관한 것이다. 이를 어떻게 확인합니까?
Raphael

2
그러나 그것은 또한 맞습니다. 각각 O (1) 인 n 개의 항의 합은 실제로 O (n)입니다.
Suresh

2
상수 인 경우에만 @Suresh 의해 내포 된 가 합산 변수와 무관하고 그 점이 여기 (종자 질문) 인 . O
Raphael

2
버그는 두 번째 평등이 아닙니다. 두 번째 표현에서 버그는 그 요약을 얻는 방법에 있습니다. 에서 나오는 것이 정확합니다. i = O ( 1 ) 가 잘못 되었다고 주장합니다 . 나는 이것이 모든 관련자들에게 명백하다는 것을 알고 있지만 이것이 '파종'질문의 문제라고 생각합니다 :)iO(1)=O(n)i=O(1)
Suresh

6

두 번째 예에서는 i = O ( 1 ) 라고 주장 할 수 없습니다

i=O(1)

n에 따라 달라 지기 때문에 . 몇 단계를 거치면 i > n / 2가 됩니다. 더 적절한 방법은 실제로 i = O ( n ) 이라고 말하면 , 합산 전체에서 i1 n을 절대 초과하지 않기 때문 입니다. 이러한 추론에 의해, n i = 1 i = n i = 1 O ( n ) = n O ( n ) = O (ini>n/2i=O(n)i1n

i=1ni=i=1nO(n)=nO(n)=O(n2)

그러나 옳은 일은 실제로 마지막에만 big-O 표기법을 사용하는 것입니다. 당신이 할 수있는 한 당신의 요약은 꽉 꽉 찼으며, 이러한 함정을 피하기 위해 점근 표기법을 사용할 때만 가능합니다.

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