우리는 점근선 성장률의 정의를 가르쳐야합니까?


35

우리는 표준 교과서, 또는 전통을 따를 때, 우리 대부분은 알고리즘 클래스의 처음 몇 강의에 큰 오 표기법의 다음과 같은 정의를 가르쳐 :

f=O(g) iff (c>0)(n00)(nn0)(f(n)cg(n)).
아마도 우리는 모든 수량 화기와 함께 전체 목록을 제공 할 수도 있습니다.
  1. f=o(g) iff (c>0)(n00)(nn0)(f(n)cg(n))
  2. f=O(g) iff (c>0)(n00)(nn0)(f(n)cg(n))
  3. f=Θ(g) iff (c>0)(d>0)(n00)(nn0)(dg(n)f(n)cg(n))
  4. f=Ω(g) iff (d>0)(n00)(nn0)(f(n)dg(n))
  5. f=ω(g) iff (d>0)(n00)(nn0)(f(n)dg(n)) .

그러나 이러한 정의는 5 n log 4 n + 와 같은 간단한 것들을 증명할 때 다루기가 쉽지 않기 때문에, 우리 대부분은 "한계의 속임수"를 소개하기 위해 빠르게 움직입니다.5nlog4n+nlogn=o(n10/9)

  1. 경우 f = o ( g )f=o(g)0limnf(n)/g(n)0
  2. f=O(g) 경우 존재하지 않다 ,+ limnf(n)/g(n)+
  3. f=Θ(g) 경우 존재하지도 않는다 도 ,0 + limnf(n)/g(n)0+
  4. f=Ω(g) 경우 존재하지 않다 ,0limnf(n)/g(n)0
  5. f=ω(g) 경우 존재하고있다 .+ limnf(n)/g(n)+

내 질문은 :

학부 알고리즘 수업에서 , , , 및 정의 로 제한 조건을 취하는 것이 큰 손실이 될까요? 그것이 우리 모두 어쨌든 사용하는 것입니다. 수량 자 정의를 건너 뛰면 모든 사람의 삶이 더 쉬워진다는 것이 분명합니다.O Θ Ω ωoOΘΩω

표준 정의가 실제로 필요한 설득력있는 자연스러운 사례가 발생 했는지, 그렇지 않은 경우 표준 정의를 선결제 로 유지할 확실한 설득력이 있는지 알고 . c , n 0c,n0c,n0


1
태그는 실제로 "티칭"이어야하지만 관련 태그를 찾을 수 없으며 새 태그를 만들 수 없습니다.
slimton

1
이것은 기본적으로 수량자를 엡실론-델타 정의 한계로 흡수합니다. 저의 유일한 관심사는 많은 CS 학생들이 분석을하지 않았기 때문에 한계에 대한 이해는 대부분 기계적인 것입니다. 그러나 그들이 빠르게 계산할 수있게하는 것은 쉬운 일이 아닙니다.
당 Vognsen

6
O ()의 두 정의는 동일하지 않습니다 (동일한 경고는 Θ () 및 Ω ()에 적용됨). 짝수 n의 경우 f (n) = 2n이고 홀수 n의 경우 f (n) = 1 인 경우를 고려하십시오. f (n) = O (n)입니까? 나는이 경우 f (n) = Θ (n)이라고 말할 수 있도록 lim 대신 limsup을 사용하는 것을 선호합니다 (귀하의 정의 중 어느 것도 이것을 허용하지는 않지만). 그러나 이것은 나의 개인적 취향 (그리고 비표준 연습) 일 수도 있으며, 수업을 가르친 적이 없습니다.
Ito Tsuyoshi

2
@Tsuyoshi : "제한 트릭"의 요점은 충분하지만 필수 조건은 아니라고 생각했습니다 . ( 경우도 필요합니다.) 진동 함수 카운터 예에는 제한이 없습니다. o ( )O()o()
András Salamon

1
각 정의와 속성에서 기호 를 으로 바꾸지 않아야 합니까? 나는 학생으로서 의 사용이 매우 불안 하다는 것을 알았습니다 . ===
Jeremy

답변:


13

나는 정량자를 사용하여 원래의 정의를 가르치는 것을 선호합니다.

IMO, 인간은 일반적으로 두 개 이상의 정량자를 직접 교대로 사용하여 공식과 정의를 이해하는 데 어려움을 겪습니다. 새로운 정량자를 도입하면 정의의 의미를 명확히 할 수 있습니다. 여기서 마지막 두 수량자는 "충분히 큰 n"모두를 의미하므로 이러한 종류의 정량화를 도입하면 도움이됩니다.

이 개념을 설명하기 위해 내가 그린 그림은 수량화 버전과 더 잘 어울립니다.

한계 단순화는 성장률 계산에만 관심이 있지만 컴퓨터 과학 학생들에게는 유용하지 않은 공학 학생에게 유용하다고 생각합니다. 실제로이 단순화를 사용하면 좋은 것보다 더 많은 해를 입힐 수 있습니다.

이 아이디어는 엡실론-델타 정의 대신 다항식, 지수, ..., 연쇄 규칙 등의 미분 계산 규칙을 ​​사용한다는 제안과 유사하지만 IMHO는 좋지 않습니다.


최종 지배 개념도 도움이됩니다 : iff . 이제 iff는 st 입니다. \ esits m n > m f ( n ) < g ( n ) f O ( g ) c > 0 f ( x ) c g ( x )f(x)g(x)\esitsmn>mf(n)<g(n)fO(g)c>0f(x)cg(x)
Kaveh

9

편집 : 개정판 3의 주요 개정판.

수업을 한 번도 가르친 적이 없기 때문에 우리가 가르치는 것에 대해 설득력있는 것을 요구할 수 있다고 생각하지 않습니다. 그럼에도 불구하고 여기에 내가 생각한 것이 있습니다.

쓰여진 "제한 트릭"을 적용 할 수없는 자연스러운 예가 있습니다. 예를 들어, 크기가 두 배인 고정 길이 배열을 사용하여 (즉, 배열의 크기를 초과 할 때마다) "가변 길이 벡터"(C ++의 vector <T>와 같은)를 구현한다고 가정합니다. 배열을 지금보다 두 배 크게 할당하고 모든 요소를 ​​복사하십시오). 사이즈 S ( N 어레이) 우리 저장할 때 N 벡터의 요소가 2보다 큰 최소의 힘을거나 같은 N . 우리는 S ( n ) = O ( n ) 라고 말하고 싶지만 정의로 작성된“제한 트릭”을 사용하면 S ( n) / n이 [1,2) 범위에서 조밀하게 진동합니다. Ω () 및 Θ ()에도 동일하게 적용됩니다.

다소 별개의 문제로서, 우리가 알고리즘의 복잡성을 설명하기 위해 이러한 표기법을 사용할 때, 나는 Ω ()에 대한 정의가 때때로 불편하다고 생각합니다 (그 정의가 공통적이라고 생각하지만). limsup f ( n ) / g ( n )> 0 인 경우에만 f ( n ) = Ω ( g ( n )) 로 정의하는 것이 더 편리 합니다. 이는 무한히 많은 n 값에 대해 일부 문제가 사소한 것이기 때문입니다 ( 홀수 n 의 정점이 있는 그래프의 완벽한 Maching 문제 ). Θ ()와 ω ()에도 동일하게 적용됩니다.

따라서 필자는 개인적으로 다음 정의가 알고리즘의 복잡성을 설명하는 데 가장 편리하다는 것을 발견했습니다. 함수 f , g : ℕ → ℝ > 0 ,

  • limsup f ( n ) / g ( n ) = 0 인 경우에만 f ( n ) = o ( g ( n )) ( lim f ( n ) / g ( n ) = 0과 같습니다.)
  • limsup f ( n ) / g ( n ) <∞ 인 경우에만 f ( n ) = O ( g ( n )) .
  • f < n limsup f ( n ) / g ( n ) <∞ 인 경우에만 f ( n ) = Θ ( g ( n )) .
  • limsup f ( n ) / g ( n )> 0 인 경우에만 f ( n ) = Ω ( g ( n )) ( f ( n )이 o ( g ( n )이 아님)와 같습니다.
  • limsup f ( n ) / g ( n ) = ∞ 인 경우에만 f ( n ) = ω ( g ( n )) . ( f ( n )이 O ( g ( n )) 가 아닌 것과 같습니다 .)

또는 동등하게

  • F ( N ) = O ( g ( N )) 경우에만 모든 경우에 대한 C 충분히 큰 대> 0, N , F ( N ) ≤ Cg ( N ).
  • f ( n ) = O ( g ( n )) 일부 c > 0 인 경우에만 충분히 큰 n , f ( n ) ≤ cg ( n ).
  • F ( N ) = Θ ( g ( N )) 경우에만, F ( N ) = O ( g ( N ))와 F ( N ) = Ω ( g ( N )).
  • f ( n ) = Ω ( g ( n )) 일부 d > 0 인 경우에만 무한히 많은 n , f ( n ) ≥ dg ( n ) 인 경우에만 .
  • f ( n ) = ω ( g ( n )) 모든 d > 0에 대해 무한히 많은 n에 대해 , f ( n ) ≥ dg ( n ) 인 경우에만 .

그러나 이것이 일반적인 관행인지 아닌지는 모르겠습니다. 또한 그것이 가르치기에 적합한 지 모르겠습니다. 문제는 때로는 liminf로 Ω ()을 정의하려는 경우가 있습니다 (첫 번째 정의에서와 같이). 예를 들어,“이 무작위 알고리즘의 오차 확률이 2- Ω ( n ) ”이라고 말할 때 , 오차 확률이 단지 무한히 많은 n에 대해 기하 급수적으로 작다는 것을 의미하지는 않습니다 !


또한 limsup 정의를 사용하지만 limsup (거의 모든 것)을 보지 못한 학생들의 경우 어쨌든 명시 적 수량 자로 확장해야합니다.
Jeffε

@JeffE : 대부분의 학생들이 limsup을 보지 못했다는 데 동의합니다. 따라서 limsup 정의를 사용하는 경우에는 수업 시간에 수량자를 사용해야합니다.
Ito Tsuyoshi

2
limsuplimlimnn

실제로, 실행 시간이 진동하는 알고리즘에 대한 자연스러운 예가 있습니까?
Heinrich Apfelmus

2
@ Heinrich : n 개의 정점에서 그래프의 완벽한 일치를 찾기 위해 알고리즘의 실행 시간을 이미 언급했지만 자연적인 예로 계산됩니까? 실행 시간이 진동하지 않지만 f (n) / g (n)이 진동하는 또 다른 예를 추가했습니다. 이 예는 공간 복잡성에 대해 말하지만 동일한 예의 시간 복잡도는 동일한 속성을 갖습니다.
Ito Tsuyoshi

8

한계를 사용하는 것은 (1) 더 복잡한 개념 (2) f = O (g)를 잘 포착하지 못하기 때문에 약간 혼란 스럽습니다 (위의 논의에서 볼 수 있듯이). 나는 일반적으로 자연수 (엄격 양수)에서 자연수 (실행 시간에 충분 함)까지의 기능에 대해 이야기하고 작은 물건을 건너 뛰고 정의는 간결하고 1 학년에 적합합니다.

Dfn : f = O (g) 모든 n에 대해 일부 C의 경우 f (n) <= C * g (n)


1
“all n”이라고 언급하면 ​​O () 표기법이 큰 n에 대한 함수의 동작에만 관심이 있다는 중요한 사실을 모호하게하기 때문에이 정의를 좋아하지 않았습니다. 그러나 어떤 정의를 선택하더라도이 사실을 정의와 함께 설명해야한다고 생각합니다. 그렇게 생각하면,이 간단한 정의를 언급하는 것이 꽤 좋아 보입니다.
Ito Tsuyoshi

f(n)=nng(n)=0nN0g(n)=f(n)+1f=O(g)
András Salamon

2
범위가 자연수 (0을 포함하지 않음) 인 함수에 대한 요점은 정확히 g (n) = 0의 문제에 빠지지 않습니다.
Noam

1
len(a)loga

1
alen(a)logalen(a)aOlog, 사라 또는 일부 입력에 네드 운데 Fi를있는. "
Srivatsan 나라 야난

5

c,n0

f

fO(g):⇔c,d>0n0:f(n)cg(n)+dd=f(n0)

한계는 펜과 종이로 복잡한 클래스를 계산하는 데 매우 유용합니다.

어쨌든, 나는 학생들이 풍요로운 정의가 풍부하다는 것을 배우는 것이 매우 유용하다고 생각합니다. 그것들은 그것을 인식하고 동등하지 않은 정의의 경우 차이점을 찾아 낼 수 있어야합니다.


4

몇 년 전만해도 이러한 개념을 연구 한 결과, 내 수업에서 파악하기 가장 어려운 개념은 아니었다 (유도 또는 반대 반응과 같은 개념과 반대). 한계와 림업은 내 의견으로는 미적분학에 익숙한 사람들에게는 더 직관적입니다. 그러나 이러한 수학 기초를 가진 학생들은 어쨌든 이론적 인 배경을 가지므로 별개의 한정자를 처리 할 수 ​​있습니다.

또한 더 중요한 것은 궁극적으로 학생들이 다른 CSS 이론 교재를 읽거나 언젠가는 논문을 연구하기를 희망한다는 점을 기억하십시오. 따라서 처음에는 이상적으로 고안되지 않았더라도 현장의 표준 표기법에 익숙해지는 것이 좋습니다. 일단 표준 정의를 동화하면 대체 정의를 제공하는 데 아무런 해가 없습니다.



1
  1. Tsuyoshi Ito의 정의가 옳지 않은 것처럼 보입니다. little-omega 및 big-omega의 경우 정의는 limsup이 아니라 liminf를 사용해야합니다. 빅 세타의 정의에는 liminf의 하한과 limsup의 상한이 모두 필요합니다.

  2. f (n) = O (g (n))의 한 가지 정의는 lim f '(n) / g (n) <무한대가되도록 다른 함수 f'(n)> = f (n)이 존재한다는 것입니다.

  3. 초보자가 답변을 게시 할 수 있지만 댓글을 달 수없는 이유는 무엇입니까?


1
항목 1은 모든 경우에 limsup을 의미하며 그 이유는 내 대답의 두 번째 단락에 설명되어 있습니다.
Ito Tsuyoshi

안타깝게도 스팸 차단 메커니즘입니다.
Suresh Venkat

또한 답변에 라텍스를 사용할 수 있습니다.
Suresh Venkat

1

먼저 , 나는 학생들에게 방정식을 보여주기 전에 직관발전 시키려고 노력합니다 .

  • "병합 정렬 대 삽입 정렬"은 좋은 시작점입니다.

f=O(g) iff (c>0)(n00)(nn0)(f(n)cg(n)).
limn

또 다른 측면은 구체적인 연구 프로그램에 크게 의존한다는 것입니다. IMHO는 이전 주제에 따라 정의 중 하나가 더 적합하지만 IMHO는 여전히 두 가지 유형의 솔루션을 모두 표시하고 수용하는 것이 좋습니다.

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