일련의 숫자에 대한 되풀이 관계를 풀거나 근사화


89

컴퓨터 과학에서 우리는 종종 되풀이 관계 를 풀어야하는데 , 그것은 재귀 적으로 정의 된 일련의 숫자에 대한 닫힌 형태 를 찾는 것 입니다. 런타임을 고려할 때 종종 시퀀스의 점근 적 성장 에 관심이 있습니다.

예는

  1. 아래쪽으로 스테핑 꼬리 재귀 함수의 실행시 에서 본문은 소요 시간 :0nf(n)

    T(0)=0T(n+1)=T(n)+f(n)

  2. 피보나치 순서 :

    F0=0F1=1Fn+2=Fn+Fn+1

  3. 괄호 쌍을 가진 Dyck 단어 의 수 :n

    C0=1Cn+1=i=0nCiCni

  4. 길이 목록에서 mergesort 런타임 반복 :n

    T(1)=T(0)=0T(n)=T(n/2)+T(n/2)+n1

재발 관계를 해결하는 방법은 무엇입니까? 우리는 찾고 있습니다

  • 일반적인 방법과
  • 중요한 서브 클래스를위한 메소드

만큼 잘

  • 정확한 솔루션을 제공하는 방법
  • 점근 적 성장을 제공하는 방법.

이것은 참조 질문이되어야합니다. 방법 당 하나의 답변을 게시하고 일반적인 설명과 예시를 제공하십시오.


9
이 메모 가 도움 될 수 있습니다. (그러나 아니요, 답을
밝히지 않겠습니다

답변:


35

전체 히스토리를 제한된 히스토리로 변환

이것은 모든 정수의 값이 모든 작은 정수 의 값에 의존하는 반복 문제를 해결하는 첫 번째 단계입니다 . 예를 들면, 재발 고려 어떤가 발생 무작위 퀵 정렬 의 분석에서 . (여기서, 임의로 선택 피봇의 계수이다.) 임의의 정수를 들어 의 값 모든에 따라 와 . 이 양식의 반복을 전체 히스토리 반복 이라고 합니다.knT(n)T(k)k<n

T(n)=n+1nk=1n(T(k1)+T(nk))
knT(n)T(k)k<n

이 반복을 해결하기 위해 제한된 이력 반복 으로 변환 할 수 있습니다 . 여기서 은 일정한 수의 이전 값에만 의존합니다. 그러나 먼저 반복을 단순화하고 일반적인 용어를 수집하고 성가신 부분을 제거하는 데 도움이됩니다. 이제 제한된 이력 반복으로 변환 , 우리는 대한 재귀를 기록하고 뺄셈 및 재기 항을 작성합니다. N T ( N )T(n) T(n-1) ( n - 1 ) T ( n - 1 )

nT(n)=n2+2k=1n1T(k)
T(n1)
(n1)T(n1)=(n1)2+2k=1n2T(k)nT(n)(n1)T(n1)=(2n1)+2T(n1)nT(n)=(2n1)+(n+1)T(n1)T(n)n+1=2n1n(n+1)+T(n1)n

이제 하고 분수 을 더 단순한 점근선 형식 인 , 우리는 훨씬 더 간단한 재귀 을 얻습니다 이 되풀이를 요약으로 확장하면 즉시 . 여기서 은 번째 고조파 수 입니다. 우리는 결론이 .(2) N - 1t(n)=T(n)/(n+1) θ(1/n)t(n)=θ(1/n)+t(n-1). t(N)=Θ(H의n은)=Θ는(로그없음을)H, N, N2n1n(n+1)Θ(1/n)

t(n)=Θ(1/n)+t(n1).
t(n)=Θ(Hn)=Θ(logn)HnnT(n)=Θ(nlogn)

1
에 대한 정확한 솔루션을 원한다면 조금 지루한 경우에도 어렵지 않습니다. 우리는 을 얻습니다 . 실제로, 은 혼란 때문에 정확한 변형을 선호합니다. Landau 용어의 성가신 합계 . T ( N ) = 2 ( N + 1 ) H의 N 개의 + ( T ( 0 ) - 3 ) N + T ( 0 ) Σ N I = 1 Θ ( 1 / I ) = Θ ( H의 N )TT(n)=2(n+1)Hn+(T(0)3)n+T(0)i=1nΘ(1/i)=Θ(Hn)
라파엘

실제로, 그것은 (유도 적으로) 을 관찰하면 충분합니다 . 여기서 . 사실, 시간을 대체 하여 더 간단한 배열로 파티션을 분할 할 때 이미 그 트릭을 이미 사용했습니다 . 이것은 완전히 표준 표기법 남용입니다. t * ( n ) = 1 / n + t * ( n - 1 ) Θ ( n ) nT(n)/(n+1)=Θ(t(n))t(n)=1/n+t(n1)Θ(n)n
JeffE

28

함수 생성하기

모든 일련의 숫자는 생성 함수에 해당 합니다 . 계수 (계열의 요소)를 뽑아 내기 위해 반복적으로 편안하게 얻을 수 있습니다.

이 답변에는 완전한 예제가 포함 된 일반적인 ansatz, 특수 사례에 대한 바로 가기 및이 방법을 사용하여 무증상을 얻는 방법에 대한 참고 사항이 포함됩니다 (정확한 결과를 얻을 수없는 경우에도).

방법

일련의 숫자를 보자 . 그런 다음 공식 전원 시리즈(an)nN

A(z)=n=0anzn

일반적인 생성 함수 ¹입니다 . 의 직렬 확장 계수 는 시퀀스, 즉 . 예를 들어, 유명한 카탈로니아 어 숫자 의 일반적인 생성 함수 는 다음과 같습니다. A ( z ) [ z n ] A ( z ) = a n C n(an)nNA(z)[zn]A(z)=an Cn

C(z)=114z2z .

의 정의 는 또한 재발을 해결하기위한 ansatz입니다. 이것은 선형 재귀에 가장 효과적이므로 단순성을 위해 양식의 재귀를 가정하십시오.A

a0=c0ak1=ck1an=f(n)+i=1kbiani,nk

일부 고정 및 모든 독립적 인 함수 . 이제 앵커와 재귀 부분을 ansatz에 간단히 삽입합니다. f ( n ) : NN a ib1,,bkRf(n):NNai

A(z)=n=0anzn=c0z0+c1z1++ck1zk1+n=k[f(n)+(i=1kbiani)]zn

합계 조작의 역학, 형식적 동력 계열의 특성알려진 항등식 ²을 사용하여 마지막 오른쪽은 일반적으로 관점에서 닫힌 형태로 가져와야 합니다. 결과 방정식은 종종 대해 풀 수 있습니다 . 결과의 시리즈 확장 (쉽게 얻을 수 있거나 알려 지거나 접근 가능한 것)은 본질적으로 해결책입니다.A ( Z )A(z)A(z)

좋은 소개는 Wilf의 책 [3]과 GKP [4]에서 찾을 수 있습니다. Flajolet과 Sedgewick [5]가 고급 재료를 수집했습니다.

치다

a0=1a1=2an=5n+3an12an2,n>1

우리는 다음을 계산합니다.

A(z)=n=0anzn=1+2z+n=2[3an12an2+5n]zn=1+2z+3n=2an1zn2n=2an2zn+5n=2nzn=1+2z+3zn=1anzn2z2n=0anzn+5n=2nzn=1+2z+3z(A(z)a0)2z2A(z)+5(z(1z)2z)=16z+(3z2z2)A(z)+5z(1z)2

이 해결

A(z)=13z+13z26z3(12z)(1z)3=1612z51z5(1z)25(1z)3=16n=02nzn5n=0zn5n=0(n+1)zn5n=0(n+1)(n+2)2zn

이제 우리는 마침내 읽을 수 있습니다

an=162n55(n+1)52(n+1)(n+2)=2n+452n2252n15

일단 익숙해 지면 이것이 모두 매우 기계적인 것임을 알 수 있습니다. 사실, 컴퓨터 대수는 많은 경우에이 모든 것을 당신을 위해 할 수 있습니다. 좋은 점은 재발이 더 복잡한 경우에도 그 역학을 유지하는 것입니다. 보다 복잡하고 덜 기계적인 예는 여기 를 참조 하십시오 .

또한 찾고자하는 객체가 복소수이거나 다항식 인 경우에도 일반적인 기술이 작동합니다.

바로 가기

선형 및 균질 한 재발, 즉 다음과 같은 형태

a0=c0ak1=ck1an=i=1kbiani,nk

위의 내용은 매번 정확히 같은 방식으로 진행됩니다. 위의 계산을 상징적으로 수행함으로써 우리는 다음과 같이 정리 합니다. 허락하다

zkb1zk1b2zk2bk

특성 polynomal (재발). 또한 은 다중도 갖는 상기 다항식의 (쌍으로 구별되는) 0을 각각하자. 그런 다음 원하는 계수가r iλ1,,λlri

an=i=1lj=1ribi,jnj1λin

알와 . 특성 다항식이 차수 를 가지므로, 정확히 (복잡한) 0, 즉 합은 입니다. 따라서, 누락 된 계수는 상기 식을 의 임의의 (예를 들어 앵커) 와 동일하게하여 얻어진 방정식으로 선형 방정식 시스템을 풀음으로써 결정될 수있다 . k k r i k k k a nbi,jkkrikkkan

무증상

대한 닫힌 양식을 얻는 것이 일반적으로 쉬운 부분입니다. 함수를 생성 할 때이를 표현하면 (이 예제에서와 같이) 효율성이 빠르게 어려워집니다. 예는 위의 와 질문에 언급 된 Dyck 단어 수에 대한 예입니다.C ( Z )A(z)C(z)

계수에 대한 무증상을 얻기 위해 복잡한 분석기구, 특히 특이성 분석을 이용할 수있다; 버즈 워드에는 Darboux의 방법과 새들 포인트 방법이 포함됩니다. 이것들은 잔기 정리코시의 적분 공식 에 근거합니다 . 자세한 내용은 [6]을 참조하십시오.


  1. 지수 , Dirichlet기타 생성 함수를 사용 하여 유사한 작업을 수행 할 수 있습니다 . 가장 잘 작동하는 것은 사용중인 순서와 특히 필요한 닫힌 양식을 찾는 지 여부에 따라 다릅니다.
  2. 예를 들어 TCS 치트 시트 또는 [3]에서 확인할 수 있습니다.
  3. generatingfunctionology H. 윌프로 (1994, 2 판.) - 무료로 다운로드 할 수 있습니다
  4. RL Graham, DE Knuth 및 O. Patashnik의 콘크리트 수학 (1994, 2nd ed.)
  5. R. Sedgewick 및 P. Flajolet 의 알고리즘 분석 소개 (2013 년 2 판)-무료로 다운로드 가능
  6. P. Flajolet 및 R. Sedgewick의 분석 조합 (2009)-무료로 다운로드 가능

21

마스터 정리

마스터 정리 ( Master theorem) 는 소위 분할 및 정복 재발 의 솔루션에 대해 무증상을 제공합니다 . 그것들은 일반적으로 (재귀 적) 분할 및 정복 알고리즘을 분석 할 때 발생하므로 이름입니다. 정리는 종종 적용하기가 쉽기 때문에 인기가 있습니다. 반면에 다음과 같은 형태의 반복에만 적용 할 수 있습니다.

T(n)=aT(nb)+f(n)

함께 . 세 가지 경우가 있습니다a1,b>1

  1. fO(nlogb(a)ε)

    일부 ;ε>0

  2. fΘ(nlogbalogkn) ,

    일부 대해 ;k0

  3. fΩ(nlogb(a)+ε)

    일부ε>0

    af(nb)cf(n)

    일부 및 .n c<1n

그것은 무증상을 의미합니다

  1. TΘ(nlogba) ,
  2. TΘ(nlogbalogk+1n)
  3. TΘ(f) ,

각기. 기본 사례는 여기에 명시되거나 사용되지 않습니다. 우리는 점근 적 행동 만 조사한다는 점을 고려하면 의미가 있습니다. 우리는 자동으로 그들이 어떤 상수 (그들은 다른 무엇을 할 수 있습니다. 있다고 가정 어떤 우리가 관계가 표시되지 않습니다 상수, 그들은 모두에서 사라 .Θ

  1. 재발을 고려하십시오

    T(n)=4T(n3)+n 입니다.

    와 및 - 기록해 우리는 그 경우 하나를 참조 함께 적용 . 따라서 입니다.b = 3 log b a 1.26 ε = 0.25 T Θ ( n log 3 4 ) = Θ ( n 1.261 )f(n)=n,a=4b=3logba1.26ε=0.25TΘ(nlog34)=Θ(n1.261)

  2. 재발을 고려하십시오

    T(n)=2T(n/2)+n 입니다.

    하여 및 - 유의 우리는 두 경우에 적용되는 볼 . 따라서 입니다.b = 2 log b a = 1 k = 0 T Θ ( n log n )f(n)=n,a=2b=2logba=1k=0TΘ(nlogn)

  3. 재발을 고려하십시오

    T(n)=3T(n4)+n 입니다.

    와 및 - 기록해 우리는이 경우 세 개의 볼을 적용한다 및 . 따라서 입니다.b = 4 log b a 0.79 ε = 0.2 c = 1 T Θ ( n )f(n)=n,a=3b=4logba0.79ε=0.2c=1TΘ(n)

  4. 재발을 고려하십시오

    T(n)=16T(n4)+n!

    여기에 , 및-많은 표준 예는 다항식 를 갖지만 이것은 규칙이 아닙니다. 우리는 이고, case 3은 다시 적용됩니다. 이 경우 과 을 으로 선택할 수 있습니다모든 대해 . 따라서 .b = 4 f ( n ) = n ! f log b a = 2 ε c > 0 n ! Ω ( n k ) k T Θ ( n ! )a=16b=4f(n)=n!flogba=2εc>0n!Ω(nk)kTΘ(n!)

추가 자료

  • 마스터 정리의 사례 중 어느 것도 적용되지 않을 가능성이 높습니다. 예를 들어, 하위 문제는 크기가 같지 않거나 더 복잡한 형태 일 수 있습니다. 마스터 정리에는 Akra-Bazzi [1] 또는 Roura [2]와 같은 확장이 있습니다. 이산 재발 작동 (즉, 바닥과 셀들과 재귀 매개 변수에 사용되는) 버전도있다 하고 선명한 결과를 제공한다 [3].

  • 일반적으로, 마스터 정리를 적용하기 전에 실제 되풀이 관계를 마사지해야합니다. 무증상을 유지하는 일반적인 변형에는 바닥과 천장이 떨어지고 있다고 가정 합니다. 여기서 물건을 깨지 않도록주의하십시오. 자세한 내용은 [4] 섹션 4.6 과이 질문을 참조하십시오.n=bk


  1. M. Akra와 L. Bazzi 의 선형 재귀 방정식의 해법 (1998)
  2. S. Roura (1997)에 의한 분할 및 정복 재발 에 대한
    개선 된 마스터 정리 다른 개선 된 마스터 정리를 참조하십시오.
  3. M. Drmota와 W. Szpankowski (2011)의 불연속 분할 및 정복 재발대한 마스터 정리
  4. Cormen et al.의 알고리즘 소개 . (2009, 제 3 판)

이것은 어리석은 질문 일지 모르지만 a가 b와 같지 않을 때 종종 정신 모델을 유지하지 못합니다. 왜 그런지 모르겠지만 직감으로 나는 항상 머지 소트에서 문제를 나누는 것처럼 항상 둘 다 같아야한다고 생각합니다. 두 개의 동일한 (거의) 반과 각각 n / 2 개의 인스턴스가 있습니다. 또한 알고리즘을 3 개의 동일한 부분으로 나누면 입력도 3 개의 동일한 부분으로 나누어야하므로 다시 a와 b가 같아집니다. 이 잘못된 직감을 어떻게 깨뜨릴 수 있습니까?
CodeYogi

17

추측 및 증명

또는 " 기술" 이라고 부르는 방법 . 모든 종류의 아이덴티티에 적용 할 수 있습니다. 아이디어는 간단하다 :

솔루션을 추측하고 정확성을 증명하십시오.

이 방법은 일반적으로 창의성과 경험을 요구하지만 (보여주는 데는 좋지만) 역학이 거의없는 것 (우아한 외관)이기 때문에 널리 사용되는 방법입니다. 여기의 기술은 좋은 교육받은 추측을하는 것입니다. 증거는 (우리의 경우) 일반적으로 다소 간단한 유도입니다.

반복에 적용될 때 일반적으로 "추측"은

  • 재발을 두 번 확장 하고
  • 아웃 파악 앵커
  • 중간 패턴 ( ) 을 추측합니다 .

간단한 예

s0=s1=s2=1sn=5sn3+6n2

의 정의를 몇 번 확장 해 봅시다 :sn

sn=5sn3+6=5(5sn6+6)+6=5(5(5sn9+6)+6)+6 =5(5(5(51n÷3 times+6)+6)+6)+6n÷3 times

여기에서 패턴을 쉽게 발견 할 수 있으며 주장으로 이어집니다.

sn=5n3+6i=0n315i=525n364

이제 우리는 귀납법으로 정체성을 증명합니다. 를 들어 , 우리는 각각의 값에 연결하여 정확성을 설정할 수 있습니다. 신원을 가정하면 모두 보유하고 임의하지만 고정을 위해 , 우리가 계산n{0,1,2}nnn3

sn+3=5sn+6=5(525n364)+6=525n3+164=525n+3364

이것은 유도의 힘으로 정체성을 증명합니다.

보다 관련성 높은 반복에서이 기능을 사용하려고하면이 방법의 가장 큰 단점이됩니다. 패턴 을 보기 어려우 거나 멋진 닫힌 형태로 압축 할 수 있습니다.

무증상

무증상에도이 방법을 사용할 수 있습니다. 그러나 모든 대한 경계 설정하는 상수가 하나 있어야하기 때문에 Landau 심볼 의 상수를 추측해야합니다 . 즉, 상수 인자는 유도 중에 변경 될 수 없습니다. n

예를 들어 ¹ 인 경우 단순화 된 Mergesort 런타임 반복을 고려하십시오 .n=2k

T(1)=T(0)=0T(n)=2T(n/2)+n1n1

우리는 추측 것이 상수 , 즉, . 우리는 이상의 유도에 의해 이것을 증명 한다. 유도 단계는 다음과 같습니다.T(n)O(nlogn)c=1T(n)nlognk

T(n)=2T(n/2)+n12n2logn2+n1=nlognnlog2+n1<nlogn


  1. 자연의 비 감소 서열의 경우, 모든 무한 서브 서열은 원래 서열과 동일한 점근 성장을 갖는다.

15

아크라 바지 방법

Akra-바치는 방법은 : 폼의 재발에 대해 점근 제공 여기에는 일반적인 분할 및 정복 반복과 분할이 다른 경우도 포함됩니다. 예를 들어 "퍼지 용어" 는 정확하게 나오지 않는 구간을 수용 할 수 있습니다. 적용 조건은 다음과 같습니다.

T(x)=1ikaiT(bix+hi(x))+g(x)for xx0
hi(x)
  • 재발을하기에 충분한 기본 사례가 있습니다.
  • 및 모든 상수aibi
  • 모든 경우iai>0
  • 모든 에 대해i0<bi<1
  • |g(x)|=O(xc) 일부 상수 경우cx
  • 모든 에 대해i|hi(x)|=O(x/(logx)2)
  • x0 은 상수입니다

참고 및 톱니파 함수로서 대체 0과 1 사이에 항상 (또는 적절한 )는 의 조건을 충족 .bix=bix{bix}{u}=uubixbixhi

다음 과 같이 찾으십시오 . 그러면 와 같은 의 점근 적 행동은 다음과 같이 주어집니다 : 와 "충분한", 즉 거기 되도록 모든 .p

1ikaibip=1
T(x)x
T(x)=Θ(xp(1+x1xg(u)up+1du))
x1k1>0
(2)g(x/2)k1g(x)
x>x1

예 A

예를 들어, 의 재귀를 사용하십시오 . 여기서 : 조건이 만족되면 : 운이 좋으면 입니다. 따라서 우리는 : n5T(0)=T(1)=T(2)=T(3)=T(4)=17

T(n)=9T(n/5)+T(4n/5)+3nlogn
p
9(15)p+(45)p=1
p=2
T(n)=Θ(n2(1+3n3uloguu3du))=Θ(n2)

와 이후 우리는 성취 모든 . 과 같은 다른 상수 를 하한값 으로 사용하더라도 적분이 수렴되기 때문에 적분도 사용 하는 것이 합법적입니다. 차이점은 에서 사라집니다 .k112(1log2log3)(2)x31Θ

실시 예 B

대한 또 다른 예는 다음과 같습니다 . 우리는 확인하십시오. 우리는 체크 아웃 하는 단일 , 있습니다. 가정하면 정말 및 / 또는 , 암시 또한 체크 아웃. 그래서 우리는 필요 따라서, , 및 : n2

T(n)=4T(n/2)+n2/lgn
g(n)=n2/lnn=O(n2)a1=4b1=1/2n/2n/2n/2hi(n)
a1b1p=4(1/2)p=1
p=2
T(n)=Θ(n2(1+2nu2duu3lnu))=Θ(n2(1+2nduulnu))=Θ(n2lnlnn)
위와 유사한 기법을 적용합니다. 적분의 하한 은 적분이 수렴하지 않기 때문에 만 사용 합니다.21

( 대수와 함께 maxima 의 도움에 감사드립니다)


1
원본 용지를 확인했습니다. 적분의 하한에 대한 기술적 제한이 있습니다. 귀하의 버전 (Mehlhorn의 설문 조사를 인용합니까?)은 반드시 통합이 수렴되어야합니다. 원래 상태를 확인하기가 더 쉽다고 생각하므로 진술과 예제를 변경하여 확인하십시오.
Raphael

1
더욱이, 원본 논문은 ; Leighton의 원고에서 가져온 것입니까? 이에 대한 동료 검토 참조가 있습니까? Akra & Bazzi의 1998 년 논문에 제공된 버전으로 이동해야합니까? hi
Raphael

1
나는 정리에서 불일치 한 것으로 보이는 것을 우연히 발견했다 . 아마도 당신은 답을 알고 있습니까?
라파엘

11

요약

종종 형식의 반복이 발생하는데 여기서 은 모노톤입니다. 이 경우에, 우리는 확장 할 수 등 시작 값의 소정의 추정하기 위해, 합 을 추정해야합니다 .

T(n)=T(n1)+f(n),
f(n)
T(n)=T(c)+m=c+1nf(m),
T(c)T(n)f(c+1)++f(m)

비 감소f(n)

경우 단조 비 - 감소, 우리는 명백한 경계가 이러한 경계는 상수 함수에 대한 상한과 단계 함수에 대한 하한 ( , 및 과 같은 일부 함수에 대해 엄격한 의미에서 가장 적합합니다. 용 ). 그러나 대부분의 경우 이러한 추정치는 그다지 도움이되지 않습니다. 예를 들어 인 경우 하한은 이고 상한은 이므로 상당히 멀리 떨어져 있습니다.f(n)

f(n)m=c+1nf(m)(nc)f(n).
f(m)=1mnf(m)=0m<nf(m)=mn(nc)n

완성

더 나은 추정치는 적분에 의해 주어진다 : 들면 이 순서 조건을 낮출 합까지의 정확한 값을 제공한다 : 하면 우리는 명시 합을 계산할 수 있지만, 많은 경우에 명시 적 계산은 어렵다. 예를 들어, 경우 의 파생 파생 성분 은 이므로

cnf(x)dxm=c+1nf(m)c+1n+1f(x)dx.
f(m)=m
12n212c2m=c+1nm12(n+1)212(c+1)2.
f(m)=mf(m)=mlogmf(1/2)x2logx(1/4)x2
m=c+1nmlogm=12n2logn±Θ(n2).

오일러 - Maclaurin은 공식은 더 나은 견적을 제공합니다. 예를 들어이 공식은 합계 을 추정하여 강력한 형태의 스털링 공식을 증명하는 데 사용할 수 있습니다 .logn!=m=1nlogm

비 증가f(n)

경우에 따라, 은 증가하지 않는 모노톤입니다. 사소한 추정치는 되고, 적분 추정치는 예를 들어, , 을 사용하여 얻습니다. f(n)

f(1)m=c+1nf(m)(nc)f(1),
c+1n+1f(x)dxm=c+1nf(m)cnf(x)dx.
f(m)=1/mf(m)=logm
m=c+1n1m=logn±Θ(1).

이 답변은 재발을 해결하는 것이 아니라 합계를 추정하는 데 유용합니다 (재발을 해결하는 데 유용 할 수 있음). 이 기술은 Riemann 합계 의 이중입니다 . 상수 대해 와 같은 다른 형식과도 작동해야합니다 . T(nd)d
Raphael

맞습니다, 도 이런 식으로 풀 수 있습니다. T(n)=cT(nd)+f(n)
Yuval Filmus

9

Sedgewick과 Flajolet은 분석 조합 에서 광범위한 작업을 수행했으며 ,이를 통해 생성 함수와 복잡한 분석의 조합을 사용하여 재발을 무증상으로 해결할 수 있습니다. 그들의 작업은 많은 재발을 자동으로 해결하고 일부 컴퓨터 대수 시스템에서 구현되었습니다.

이 주제에 관한이 교과서 는 Flajolet과 Sedgewick이 작성했으며 훌륭한 참고 문헌입니다. Sedgewick과 Flajolet이 작성한 이 텍스트 는 알고리즘 분석을위한 응용 프로그램을위한 다소 간단한 설명 입니다.

도움이 되었기를 바랍니다!


4
이것은 좋은 참고 자료이지만 접근 가능한 방식으로 메소드를 수집하려고합니다. 하나의 특정 방법을 자세히 제시 할 수 있습니까?
라파엘

9

와 같이 이상한 재발이 발생할 수 있습니다. 당신이 나와 같다면, 마스터 정리를 사용할 수 없다는 것을 알게 될 것입니다. " 흠 ... 아마도 반복 트리 분석이 효과가있을 것입니다. " 그러면 나무가 엄청나게 빨라지기 시작합니다. 인터넷에서 검색 한 후 Akra-Bazzi 방법 이 작동합니다! 그런 다음 실제로 조사를 시작하고 모든 수학을하고 싶지 않다는 것을 깨닫습니다. 이 시점까지 나와 같은 경험을했다면 더 쉬운 방법이 있다는 것을 알게되어 기쁩니다.

T(n)={cn<72T(n5)+4T(n7)+cnn7


고르지 못한 분할 정리 1 부

와 를 양의 상수라고 하자 .ck

그런 다음 를 과 같은 양의 상수로 .{a1,a2,,ak}1kai<1

또한 위의 예와 같이 양식이 반복되어야합니다.

T(n)c0<n<max{a11,a21,,ak1}T(n)cn+T(a1n)+T(a2n)+T(akn)nmax{a11,a21,,ak1}

청구

그런 다음 이라고 주장합니다. 여기서 는 상수입니다 (예 : 무정형 선형).T(n)bnb

b=c1(1kai)

유도에 의한 증거

기준 :n<max{a11,a21,,ak1}T(n)c<b<bn

유도 : 어떤 마찬가지 가정 , 우리는이n<n

T(n)cn+T(a1n)+T(a2n)++T(akn)cn+ba1n+ba2n++bakncn+ba1n+ba2n++bakn=cn+bn1kai=cncn1kai1(1kai)+cn1kai1(1kai)=cn1(1kai)=bn

그런 다음 입니다.T(n)bnT(n)=O(n)

T(n)={cn<72T(n5)+4T(n7)+cnn7
먼저 재귀 호출 내부의 계수가 1보다 작은 지 확인합니다.
1>1kai=15+15+17+17+17+17=25+47=3435

그런 다음 기본 사례가 계수의 역수의 최대 값보다 작은 지 확인합니다.

n<max{a11,a21,,ak1}=max{5,5,7,7,7,7}=7

이러한 조건이 충족되면 여기서 는 다음과 같습니다. 따라서 다음과 같습니다 : T(n)bnb

b=c1(1kai)=c13435=35c
T(n)35cnT(n)cnT(n)=Θ(n)


고르지 못한 분할 정리 2 부

마찬가지로 때 경계를 증명할 수 있습니다 . 증명은 거의 같은 형식을 따릅니다.1k=1

하자 그리고 일 양성되도록 상수 .ckk>1

그런 다음 를 과 같은 양의 상수로 .{a1,a2,,ak}1kai=1

또한 위의 예와 같이 양식이 반복되어야합니다.

T(n)c0<n<max{a11,a21,,ak1}T(n)cn+T(a1n)+T(a2n)+T(akn)nmax{a11,a21,,ak1}

청구

그런 다음 ( 는 재귀 트리의 분기 인자 이므로 base 선택합니다 ) 여기서 및 는 상수입니다 (예 : ) ) 그런 :T(n)αnlogkn+βnlogkkαβ

β=c
α=c1kailogkai1

유도에 의한 증거

기준 :n<max{a11,a21,,ak1}T(n)c=β<αnlogkn+βn

유도 : 어떤 마찬가지 가정 , 우리는이n<n

T(n)cn+T(a1n)+T(a2n)++T(akn)cn+1k(αainlogkain+βain)=cn+αn1k(ailogkain)+βn1kai=cn+αn1k(ailogknai1)+βn=cn+αn1k(ai(logknlogkai1))+βn=cn+αn1kailogknαn1kailogkai1+βn=αn1kailogkn+βn=αnlogkn+βn

그런 다음 입니다.T(n)αnlogkn+βnT(n)=O(nlogn)

이전 예제에서 조금만 사용하도록 수정하자 :

T(n)={cn<352T(n5)+4T(n7)+T(n35)+cnn35

먼저 재귀 호출 내부의 계수가 1인지 확인합니다.

1=1kai=15+15+17+17+17+17+135=25+47+135=3535

그런 다음 기본 사례가 계수의 역수의 최대 값보다 작은 지 확인합니다.

n<max{a11,a21,,ak1}=max{5,5,7,7,7,7,35}=35

이러한 조건이 충족되면 여기서 이고 는 다음과 같은 상수입니다. 따라서 우리는 다음을 가지고 있습니다 : T(n)αnlogn+βnβ=cα

b=c1kailogkai1=c2log755+4log777+log735351.048c
T(n)1.048cnlog7n+cnT(n)=O(nlogn)


6

이 게시물을 다시 확인한 후 아직 여기에 있지 않은 것에 놀랐습니다.

도메인 변환 / 변수 변경

재발을 처리 할 때 재귀 스택이 얼마나 깊을 지 확실하지 않은 경우 도메인을 변경하는 것이 유용 할 때가 있습니다.

예를 들어 다음과 같은 반복을 수행하십시오.

T(n)=T(22loglogn)+logloglogn

어떻게 해결할 수 있을까요? 우리는 시리즈를 확장 할 수는 있지만 이것이 정말로 빠를 것이라고 약속합니다. 대신, 각 호출마다 입력이 어떻게 변하는 지 생각해 보자.

우리는 먼저 :

  1. n 이면
  2. 22loglogn 이면
  3. 22loglog(22loglogn) 등.

도메인 변환의 목표는 위의 전환 대신 를 갖도록 반복을 동등한 로 변경 하는 것입니다 .S(k)k,k1,k2,

예를 들어, 하면 위와 같은 재발에 대해 얻게됩니다. 그러면 간단히 다음과 같이 다시 작성할 수 있습니다. 그런 다음 를 으로 다시 변환하면 다음 과 같이 얻을 수 있습니다. n=2222k

T(2222k)=T(22loglog2222k)+logloglog(2222k)=T(2222k1)+2k
T(k)=T(k1)+2k=i=1k2k=2k+11
kn
T(n)=2(loglogloglogn)+11=O(logloglogn)


이 예에서는 이제 목표를 볼 수 있습니다.

가정 일부 상수 및 함수 및 .

T(n)={h(1)n=1aT(f(n))+h(n)otherwise
af(n)h(n)

우리는 이제 어떤 함수 과 을 찾으려고 노력 합니다. g(k)=nf(g(k))=g(k1)

T(g(k))=aT(f(g(k)))+h(g(k))=aT(g(k1))+h(g(k))

보다 일반적으로, 우리가 원하는 의 반복 애플리케이션이다 에서 , 번. (예 : ). 이것은 가 "iteating"기능으로 작용할 수있게한다 . 재귀의 깊이 에서 수행되는 작업은 단순히 입니다.f(i)(n)=g(ki)f(i)(n)fnif(2)(n)=f(f(n))g(k)ih(g(ki))

그러면 쉽게 이것을 변환 할 수 되도록 그렇다면 우리는 걱정할 필요 주어진 까지의 모든 대해 를 합산합니다 . 즉, S(k)=T(g(k))

S(k)=aS(k1)+h(g(k))
h(g(k))k
S(k)=i=g1(1)kakih(g(i))

우리가 결정할 수 있다면 약간 닫힌 폼 함수, 우리는 결정할 수 같은 S(k)=γ(k)γT(n)

T(n)=γ(g1(n))

그런 다음 이것을 사용하여 위의 다른 방법 중 하나를 통해 에 바인딩합니다 . 이 방법을 사양에 따라 약간 수정할 수는 있지만 일반적으로 반복 함수 를 찾아 을 간단한 재귀로 변환하려고합니다.T(n)g(k)T(n)

나는 이 시점에서 를 결정하는 정확한 방법을 모르지만, 그것에 대해 계속 생각하고 명확 해지면 업데이트 할 것입니다 (또는 어떤 주석 작성자가 팁을 가지고 있다면!). 나는 과거에 시행 착오를 통해 내 함수를 주로 발견했습니다 here , here , herehere 참조 ).g(k)g(k)


1
, 및 / 또는 에 대한 제한이 있습니까? Landau 표기법이 포함될 때 유사한 민속 대체 기법이 때때로 실패 하기 때문에 구체적으로 묻고 있습니다. 이 항상 정답 인지를 걱정하게 만듭니다 . fghγg1
라파엘

@Raphael, 이것은 내가 완전히 확신하지 못하는 부분입니다. 동등성을 확립하기 위해 몇 가지 고려해야 할 사항이 있습니다. 1) 재귀 깊이는 동일하며 및 으로 보장 할 수 있습니다 . 2) 각 재귀 수준에서 수행 된 작업은 동일하며 의해 집행 된 다음 됩니다. 이것의 기본 아이디어는 단순히 을 합으로, 즉 로 바꾸는 것 입니다. 에서 변환 하기 나는 (내가 증거가없는)하지만 것이다 이유는 볼 수 없습니다 또한의 100 % 확신 잘못되었습니다. 생각? f(g(k))=g(k1)g(k)=ng(k)=nh(g(k))=h(n)T(n)i=ckh(g(i))γ(k)γ(g1(n))
라이언

@Raphael 당신은 또한 대신 경우를 고려할 수 있습니다 . 그런 다음 것이 더 간단해야합니다 앞으로. 당신이 요약에서 동등성을 보여 주면 생각하기 쉽습니다. 여기서 Landau 표기법으로 재미있는 문제를 겪을 수도 있지만 Landau를 빠져 나와 정확한 평등 만 고수한다면 괜찮을 것이라고 생각합니다. S(k)=γ(k)ΘT(n)=γ(g1(n))
라이언

@Raphael 나는 평등만을 사용하도록 편집 했으므로 landau 표기법은 이것을 망쳐서는 안됩니다. 또한 조금 더 일반화했습니다. 상수 대신 함수를 사용하도록 좀 더 일반화 할 수도 있습니다. 그런 다음 합계에서 대신 . β(n)aakiβ(g(i))
라이언

5

간단한 재발 관계에 적용되는 또 하나의 접근 방법이 있습니다. Wolfram Alpha 에 요청 하여 재발을 해결하십시오.

예를 들어 f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2)Wolfram Alpha를 입력하십시오 . 피보나치 번호로 연결되는 솔루션을 얻게됩니다. 또는 시도 f(1)=1, f(n)=f(n-1)+n하거나 f(1)=1, f(n)=2*f(n-1)+3*n또는 f(n)=f(n-1) + 2 f(n-2), f(1)=1, f(2)=3다른 예는. 그러나 Wolfram Alpha는 매우 간단한 재발을 해결할 수 있지만 더 복잡한 재발에 대해서는 분리됩니다.

이 접근법은 버그 나 기능으로 볼 수있는 사고의 필요성을 피합니다.


3
내가 않는 이 사이트의 목적을 설명하는 것입니다 생각 하는 방법을 컴퓨터 대수가 장님 사용을 옹호하지,이 같은 일을한다. 그러나이 도구 유용하므로 실제로 "실제"시간 ( "실제") 시간 전에 항상 도구를 사용해보아야합니다.
Raphael

내 경험에 비추어 볼 때 "하드"또는 "쉬운"에 대한 의미 없이 컴퓨터 대수를 사용하려고 시도해도 크게 도움이되지 않습니다. 특히 알고리즘 분석에서 일부 마사지가 필요할 수 있습니다. 재발을 스스로 해결하는 방법을 모르면 어떻게하는지 모르겠습니다. (이 사이트의 목적에 관해서는 여러 가지 관점이 있습니다. 사실 : 지금까지 "이것은 누군가에게 유용했습니다 "는 게시물을 정당화하기에 충분하지 않았습니다.
Raphael

5

보통 한 바와 같이 마스터 정리의 케이스 (2)는, 폼의 재발 처리 되는 대한 . Jeffrey Leon 의 유인물 에서 가져온 다음 정리 는 음수 대한 답을 제공합니다 .T(n)=aT(n/b)+f(n)f(n)=Θ(nlogablogkn)k0k

적절한 기본 사례와 함께 재발 을 고려하십시오.T(n)=aT(n/b)+f(n)

  1. 경우 대한 후, .f(n)=O(nlogbalogc1n)c<0T(n)=Θ(nlogba)

  2. 만약 에 대한 다음 .f(n)=Θ(nlogbalogc1n)c=0T(n)=Θ(nlogbaloglogn)

  3. 만약 위한 다음 ).f(n)=Θ(nlogbalogc1n)c>0T(n)=Θ(nlogbalogcn

증명은 이제 우리가 스케치하는 것처럼 반복되는 대체 방법을 사용합니다. 가정이 과 . 그런 다음 의 제곱의 경우 이제 사례를 하나씩 살펴 보겠습니다. 일 때 수렴되므로 입니다. 경우 , 합계 고조파 합이다 등f(n)=nlogbalogbc1nT(1)=0nb

T(n)=i=0logbn1ai(nbi)logbalogbc1(nbi)=i=0logbn1nlogba(logbni)c1=nlogbaj=1logbnjc1.
c<0j=0jc1T(n)=Θ(nlogba)c=0Hlogbn=log(logbn)+O(1)T(n)=Θ(nlogbaloglogn) 입니다. 경우 , 우리는 일체 사용 합에 근사 할 수 따라서 .c>0
j=1logbn0logbnxc1dx=xcc|0logbn=logbcnc,
T(n)=Θ(nlogbalogcn)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.