점근 적 성장에 의한 분류 기능


35

예를 들어 함수 목록이 있다고 가정합니다.

nloglog(n),2n,n!,n3,nlnn,

이를 무정형으로 정렬하려면 어떻게해야합니까?

fOgfO(g) ,

그것들이 실제로 쌍으로 비교된다고 가정 합니까 ( 여기도 참조 하십시오 )? 의 정의를 사용하는 것은 어색한 것으로 보이며, 적절한 상수 와 의 존재를 증명하기가 어려운 경우가 많습니다 .Ocn0

이것은 복잡성 측정에 관한 것이므로, 우리는 로 점근 적 행동에 관심이 있으며 , 모든 함수는 음이 아닌 값 ( ) 만 취한다고 가정합니다 .n+n,f(n)0


4
OP가 다시 돌아 오지 않았으므로 현지화 된 내용을 제거하고 이것으로 참조 질문을합니다.
Raphael

답변:


48

엄격한 증거를 원한다면 다음과 같은 정리가 종종 유용합니다. 정의보다 더 편리합니다.

경우 이어서, 존재c=limnf(n)g(n)

  • c=0 fo(g) ,
  • c(0,)fΘ(g)
  • c=   fω(g) .

이를 통해 알고리즘 분석에 나오는 대부분의 기능을 주문할 수 있습니다 ¹. 운동으로 그것을 증명하십시오!

물론 그에 따라 한계를 계산할 수 있어야합니다. 복잡한 기능을 기본 기능으로 나누는 유용한 트릭은 다음과 같습니다.

  • 두 함수를 하고 지수를 비교하십시오. 비율이 또는 인 경우 원래 몫도 그렇습니다. 0 e0
  • 더 일반적으로 : 볼록하고 지속적으로 차별화되며 엄격하게 증가하는 함수 를 사용하면 몫을 다음과 같이 다시 쓸 수 있습니다.h

    f(n)g(n)=h(f(n))h(g(n)) ,

    와 및gΩ(1)

    limnf(n)g(n)= ,

    그때

    limnf(n)g(n)= .

    이 규칙에 대한 엄격한 증거 (독일어)는 여기 를 참조 하십시오 .

  • 현실에 대한 함수의 연속성을 고려하십시오. 이제 L' Hôpital의 규칙을 사용할 수 있습니다 . 그 조건을 염두에 두십시오 ²!

  • 별개의 해당 항목 인 Stolz–Cesàro를 살펴보십시오 .
  • 계승이 팝업되면 스털링 공식을 사용하십시오 .

    n!2πn(ne)n

한 번 증명 한 기본 관계 풀을 유지하고 다음과 같이 자주 사용하는 것도 유용합니다.

  • 로그는 다항식보다 느리게 증가합니다. 즉

    α , β > 0(logn)αo(nβ)모든 대해 .α,β>0

  • 다항식의 순서 :

    α<βnαo(nβ) 모두 .α<β

  • 다항식은 지수보다 느리게 성장합니다.

    nαo(cn)모든 및 대해 .αc>1


한계가 존재하지 않기 때문에 (예를 들어 기능이 진동 할 때) 위의 정리는 적용되지 않을 수 있습니다. 이 경우 라임을 사용하는 다음과 같은 Landau 클래스의 특성을 고려하십시오 .

함께 우리가cs:=lim supnf(n)g(n)

  • 0cs<fO(g)
  • cs=0fo(g) 입니다.

함께 우리가ci:=lim infnf(n)g(n)

  • 0<cifΩ(g)
  • ci=fω(g) 입니다.

더욱이,

  • 0<ci,cs<fΘ(g)gΘ(f)
  • ci=cs=1fg 입니다.

내 표기법이 혼란 스러우면 여기여기를 확인 하십시오 .


¹ Nota bene : 저의 동료는 많은 기능에 대해이 작업을 성공적으로 수행하는 Mathematica 기능을 작성했기 때문에 부수적으로 작업을 기계 계산으로 줄였습니다.

² 여기도 참조 하십시오 .


@Juho 공개적으로는 아니지만 afaik은 자신을 쓰는 것이 초등입니다. Limit[f[n]/g[n], n -> Infinity]대소 문자 구분을 계산 하고 수행합니다.
Raphael

20

또 다른 팁 : 때때로 로그 또는 exp와 같은 모노톤 함수를 함수에 적용하면 상황이 더 명확 해집니다.


5
이것은 이지만 신중하게 수행해야합니다 . 2nO(n)22nO(2n)
Shaull

2
두 번째. "단일 톤 기능 적용"은 일반적으로 작동하지 않는 일종의 민속적인 것 같습니다. 우리는 충분한 기준에 따라 노력하고 있으며, 최신 답변에 게시 한 내용을 생각해 냈습니다 .
Raphael

17

Skiena는 그의 저서 Algorithm Design Manual에서 가장 많이 사용되는 기능들 사이의 지배 관계 목록을 제공합니다.

n!cnn3n2n1+ϵnlgnnn1/2
lg2nlgnlgnlglgnlglgnα(n)1

여기서 은 역 Ackermann 함수를 나타냅니다 .α(n)


이상하게 구체적인 목록입니다. 많은 관계 ( 정확히 무엇을 의미 하든 )는보다 일반적인 소수 정리로 요약 될 수 있습니다.
Raphael

지배 관계에 대한 그의 표기법입니다.
Robert S. Barnes

11

팁 : Wolfram Alpha 와 같은 것을 사용하여 이러한 함수의 그래프를 그려서 어떻게 성장하는지 느끼십시오. 이것은 매우 정확하지는 않지만 충분히 많은 수를 시도하면 비교의 성장 패턴을 볼 수 있습니다. 물론 이것은 증거를 대신 할 수 없습니다.

예를 들면, 시도 : 1에서 플롯 로그 (로그 (N))를 10000 개별 그래프 나 볼 10000 1에서 플롯 로그 (로그 (N)) 및 플롯 로그 (N)을 비교를보고.


9
우리는 정말 부두를 추천해야합니까 ?
Raphael

함수의 그래프를 그릴 것을 제안하면 +1입니다. 링크 된 그래프는 의미가 무엇인지 알지 못하는 경우 다소 혼란 스럽습니다.
이토 쓰요시

1
증명하고 싶은 것을 힌트로 그래프로 나타내십시오. 그 힌트는 물론 틀릴 ​​수 있습니다.
gnasher729

8

다양한 표기법의 정의에 따라 진행할 것을 제안합니다. 임의의 표현식 쌍으로 시작하여 아래에 설명 된대로 순서를 결정하십시오. 그런 다음 각 추가 요소에 대해 이진 검색을 사용하여 정렬 된 목록에서 위치를 찾고 아래와 같이 비교하십시오. 예를 들어, 의 처음 두 함수 인 n 과 정렬 하여 목록을 시작 합시다 .nloglogn2n

속성을 사용하여 첫 번째 표현식을 로 다시 씁니다. . 우리는 그 표시하도록 정의를 사용하도록 진행할 수있다 , 임의 상수에 대한 사람 , 있다 예는 대 , .n=2lognnloglogn=(2logn)loglogn=2lognloglognnloglogn=2lognloglogno(2n)c>0n0nn0c(nloglogn)=c(2lognloglogn)<2n

다음으로 을 시도 합니다. 우리는 지금까지 배치 한 가장 큰 요소 인 과 비교합니다 . 이후 으니 마찬가지로 보여 .3n2n3n=(2log3)n=2nlog32no(3n)=o(2nlog3)

기타.


2

다음은 Wikipedia 의 목록 입니다. 테이블이 낮을수록 더 복잡한 클래스입니다.

NameRunning TimeConstant timeO(1)Inverse Ackermann timeO(a(n))Iterated logarithmic timeO(logn)Log-logarithmicO(nlogn)Logarithmic timeO(logn)Polylogarithmic timepoly(logn)Fractional powerO(nc),where 0<c<1Linear timeO(n)"n log star n" timeO(nlogn)Quasilinear timeO(nlogn)Quadratic timeO(n2)Cubic timeO(n3)Polynomial timepoly(n)=2O(logn)Quasi-polynomial time2O(poly(logn))Sub-exponential time (first definition)O(2nϵ),ϵ>0Sub-exponential time (second definition)2o(n)Exponential time(with linear exponent)2O(n)Exponential time2poly(n)Factorial timeO(n!)

참고 :poly(x)=xO(1)


1
또한 테이블이 제안하는 방식에 흥미가 있습니다. 당신이 테이블 동안 연결 에 다소 정확, 하나는 연결 (어느 복사 한)는 복잡성 클래스에 관한 것입니다 하지 여기에 혼합 할 수있는 유용한 것. Landau 표기법은 "시간"에 관한 것이 아닙니다. 2nlogno(n!)
Raphael

1
여기에 복잡성 클래스의 이름을 직접 말할 수 있도록 이것을 넣었습니다. 예, Landau는 암호화의 특정 유형의 알고리즘에 관한 것입니다.
kelalaka

1
나는 @Raphael의 견해에 반대한다. 나는 수년간 수학자이자 강사였습니다. 나는 이런 것들을 증명하는 것 외에도 이와 같은 큰 테이블은 사람들의 직관을 쉽고 크게 증가 시킨다고 믿는다. 그리고 점근 적 클래스의 이름은 사람들이 많은 것을 기억하고 의사 소통하는 데 도움이됩니다.
Apass.Jack

1
@ Apass.Jack 나의 교수 경험에서, 많은 학생들이 테이블을받을 때 그것을 마음으로 배우고 테이블에없는 어떤 기능도 주문하지 못했습니다. 이 효과가이 사이트에 나타나는 점근 적 성장에 관한 많은 질문을 어떻게 설명하는지 주목하십시오. 물론 증거를 쉽게 만들 수 있도록 테이블에 암시 된 lemmata를 사용하지만 , 테이블을 증명하는 방법을 익힌 후에 나온다 . (이 점을 강조하기 위해 여기 온 사람들 은 테이블에서 물건을 읽는 데 도움이 필요하지 않습니다. 관계 를 증명하는 데 도움이 필요합니다 .)
Raphael

1
@kelalaka "예, Landau는 암호화의 특정 유형의 알고리즘에 관한 것입니다." 심지어 말이되지 않습니다. Landau 표기법은 수학 함수의 속성을 설명하는 속기입니다. 암호화 자체는 물론 알고리즘과는 아무런 관련이 없습니다.
Raphael
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.