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


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=0nCiCn−i

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

    T(1)=T(0)=0T(n)=T(⌊n/2⌋)+T(⌈n/2⌉)+n−1

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

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

만큼 잘

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

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


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

답변:


35

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

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

T(n)=n+1n∑k=1n(T(k−1)+T(n−k))
knT(n)T(k)k<n

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

nT(n)=n2+2∑k=1n−1T(k)
T(n−1)
(n−1)T(n−1)=(n−1)2+2∑k=1n−2T(k)⟹nT(n)−(n−1)T(n−1)=(2n−1)+2T(n−1)⟹nT(n)=(2n−1)+(n+1)T(n−1)⟹T(n)n+1=2n−1n(n+1)+T(n−1)n

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

t(n)=Θ(1/n)+t(n−1).
t(n)=Θ(Hn)=Θ(log⁡n)HnnT(n)=Θ(nlog⁡n)

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∗(n−1)Θ(n)n
— JeffE

28

함수 생성하기

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

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

방법

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

A(z)=∑n=0∞anzn

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

C(z)=1−1−4z2z .

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

a0=c0⋮ak−1=ck−1an=f(n)+∑i=1kbian−i,n≥k

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

A(z)=∑n=0∞anzn=c0z0+c1z1+⋯+ck−1zk−1+∑n=k∞[f(n)+(∑i=1kbian−i)]zn

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

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

예

치다

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

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

A(z)=∑n=0∞anzn=1+2z+∑n=2∞[3an−1−2an−2+5n]zn=1+2z+3∑n=2∞an−1zn−2∑n=2∞an−2zn+5∑n=2∞nzn=1+2z+3z∑n=1∞anzn−2z2∑n=0∞anzn+5∑n=2∞nzn=1+2z+3z(A(z)−a0)−2z2A(z)+5(z(1−z)2−z)=1−6z+(3z−2z2)A(z)+5z(1−z)2

이 해결

A(z)=1−3z+13z2−6z3(1−2z)(1−z)3=161−2z−51−z−5(1−z)2−5(1−z)3=16∑n=0∞2nzn−5∑n=0∞zn−5∑n=0∞(n+1)zn−5∑n=0∞(n+1)(n+2)2zn

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

an=16⋅2n−5−5(n+1)−52(n+1)(n+2)=2n+4−52n2−252n−15

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

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

바로 가기

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

a0=c0⋮ak−1=ck−1an=∑i=1kbian−i,n≥k

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

zk−b1zk−1−b2zk−2−⋯−bk

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

an=∑i=1l∑j=1ribi,j⋅nj−1⋅λ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)=a⋅T(nb)+f(n)

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

  1. f∈O(nlogb⁡(a)−ε)

    일부 ;ε>0

  2. f∈Θ(nlogb⁡alogk⁡n) ,

    일부 대해 ;k≥0

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

    일부 및ε>0

    af(nb)≤cf(n)

    일부 및 .n → ∞c<1n→∞

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

  1. T∈Θ(nlogb⁡a) ,
  2. T∈Θ(nlogb⁡alogk+1⁡n) 및
  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=3logb⁡a≈1.26ε=0.25T∈Θ(nlog3⁡4)=Θ(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=2logb⁡a=1k=0T∈Θ(nlog⁡n)

  3. 재발을 고려하십시오

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

    와 및 - 기록해 우리는이 경우 세 개의 볼을 적용한다 및 . 따라서 입니다.b = 4 log b a ≈ 0.79 ε = 0.2 c = 1 T ∈ Θ ( n )f(n)=n,a=3b=4logb⁡a≈0.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!flogb⁡a=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=5sn−3+6n≥2

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

sn=5sn−3+6=5(5sn−6+6)+6=5(5(5sn−9+6)+6)+6 ⋮=5(5(5(…5⋅1⏟n÷3 times+6…)+6)+6)+6⏟n÷3 times

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

sn=5⌊n3⌋+6⋅∑i=0⌊n3⌋−15i=52⋅5⌊n3⌋−64

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

sn+3=5sn+6=5⋅(52⋅5⌊n3⌋−64)+6=52⋅5⌊n3⌋+1−64=52⋅5⌊n+33⌋−64

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

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

무증상

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

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

T(1)=T(0)=0T(n)=2T(n/2)+n−1n≥1

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

T(n)=2T(n/2)+n−1≤2n2log⁡n2+n−1=nlog⁡n−nlog⁡2+n−1<nlog⁡n


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

15

아크라 바지 방법

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

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

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

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

∑1≤i≤kaibip=1
T(x)x→∞
T(x)=Θ(xp(1+∫x1xg(u)up+1du))
x1k1>0
(2)g(x/2)≥k1g(x)
x>x1

예 A

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

T(n)=9T(⌊n/5⌋)+T(⌈4n/5⌉)+3nlog⁡n
p
9(15)p+(45)p=1
p=2
T(n)=Θ(n2(1+∫3n3ulog⁡uu3du))=Θ(n2)

와 이후 우리는 성취 모든 . 과 같은 다른 상수 를 하한값 으로 사용하더라도 적분이 수렴되기 때문에 적분도 사용 하는 것이 합법적입니다. 차이점은 에서 사라집니다 .k1≤12(1−log⁡2log⁡3)(2)x≥31Θ

실시 예 B

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

T(n)=4T(n/2)+n2/lg⁡n
g(n)=n2/ln⁡n=O(n2)a1=4b1=1/2n/2⌊n/2⌋⌈n/2⌉hi(n)
a1b1p=4⋅(1/2)p=1
p=2
T(n)=Θ(n2(1+∫2nu2duu3ln⁡u))=Θ(n2(1+∫2nduuln⁡u))=Θ(n2ln⁡ln⁡n)
위와 유사한 기법을 적용합니다. 적분의 하한 은 적분이 수렴하지 않기 때문에 만 사용 합니다.21

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


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

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

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

11

요약

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

T(n)=T(n−1)+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)≤(n−c)f(n).
f(m)=1m≥nf(m)=0m<nf(m)=mn(n−c)n

완성

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

∫cnf(x)dx≤∑m=c+1nf(m)≤∫c+1n+1f(x)dx.
f(m)=m
12n2−12c2≤∑m=c+1nm≤12(n+1)2−12(c+1)2.
f(m)=mf(m)=mlog⁡mf(1/2)x2log⁡x−(1/4)x2
∑m=c+1nmlog⁡m=12n2log⁡n±Θ(n2).

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

비 증가f(n)

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

f(1)≤∑m=c+1nf(m)≤(n−c)f(1),
∫c+1n+1f(x)dx≤∑m=c+1nf(m)≤∫cnf(x)dx.
f(m)=1/m∫f(m)=log⁡m
∑m=c+1n1m=log⁡n±Θ(1).

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

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

9

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

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

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


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

9

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

T(n)={cn<72T(n5)+4T(n7)+cnn≥7


고르지 못한 분할 정리 1 부

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

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

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

T(n)≤c0<n<max{a1−1,a2−1,…,ak−1}T(n)≤cn+T(a1n)+T(a2n)+…T(akn)n≥max{a1−1,a2−1,…,ak−1}

청구

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

b=c1−(∑1kai)

유도에 의한 증거

기준 :n<max{a1−1,a2−1,…,ak−1}⟹T(n)≤c<b<bn

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

T(n)≤cn+T(⌊a1n⌋)+T(⌊a2n⌋)+⋯+T(⌊akn⌋)≤cn+b⌊a1n⌋+b⌊a2n⌋+⋯+b⌊akn⌋≤cn+ba1n+ba2n+⋯+bakn=cn+bn∑1kai=cn−cn∑1kai1−(∑1kai)+cn∑1kai1−(∑1kai)=cn1−(∑1kai)=bn◻

그런 다음 입니다.T(n)≤bn⟹T(n)=O(n)

예

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

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

n<max{a1−1,a2−1,…,ak−1}=max{5,5,7,7,7,7}=7

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

b=c1−(∑1kai)=c1−3435=35c
T(n)≤35cn∧T(n)≥cn∴T(n)=Θ(n)


고르지 못한 분할 정리 2 부

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

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

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

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

T(n)≤c0<n<max{a1−1,a2−1,…,ak−1}T(n)≤cn+T(a1n)+T(a2n)+…T(akn)n≥max{a1−1,a2−1,…,ak−1}

청구

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

β=c
및
α=c∑1kailogk⁡ai−1

유도에 의한 증거

기준 :n<max{a1−1,a2−1,…,ak−1}⟹T(n)≤c=β<αnlogk⁡n+βn

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

T(n)≤cn+T(⌊a1n⌋)+T(⌊a2n⌋)+⋯+T(⌊akn⌋)≤cn+∑1k(αainlogk⁡ain+βain)=cn+αn∑1k(ailogk⁡ain)+βn∑1kai=cn+αn∑1k(ailogk⁡nai−1)+βn=cn+αn∑1k(ai(logk⁡n−logk⁡ai−1))+βn=cn+αn∑1kailogk⁡n−αn∑1kailogk⁡ai−1+βn=αn∑1kailogk⁡n+βn=αnlogk⁡n+βn◻

그런 다음 입니다.T(n)≤αnlogk⁡n+βn⟹T(n)=O(nlog⁡n)

예

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

T(n)={cn<352T(n5)+4T(n7)+T(n35)+cnn≥35

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

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

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

n<max{a1−1,a2−1,…,ak−1}=max{5,5,7,7,7,7,35}=35

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

b=c∑1kailogk⁡ai−1=c2log7⁡55+4log7⁡77+log7⁡3535≈1.048c
T(n)≤1.048cnlog7⁡n+cn∴T(n)=O(nlog⁡n)


6

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

도메인 변환 / 변수 변경

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

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

T(n)=T(22log⁡log⁡n)+log⁡log⁡log⁡n

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

우리는 먼저 :

  1. n 이면
  2. 22log⁡log⁡n 이면
  3. 22log⁡log⁡(22log⁡log⁡n) 등.

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

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

T(2222k)=T(22log⁡log⁡2222k)+log⁡log⁡log⁡(2222k)=T(2222k−1)+2k
T(k)=T(k−1)+2k=∑i=1k2k=2k+1−1
kn
T(n)=2(log⁡log⁡log⁡log⁡n)+1−1=O(log⁡log⁡log⁡n)


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

가정 일부 상수 및 함수 및 .

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

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

T(g(k))=aT(f(g(k)))+h(g(k))=a⋅T(g(k−1))+h(g(k))

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

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

S(k)=a⋅S(k−1)+h(g(k))
h(g(k))k
S(k)=∑i=g−1(1)kak−ih(g(i))

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

T(n)=γ(g−1(n))

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

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


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

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

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

@Raphael 나는 평등만을 사용하도록 편집 했으므로 landau 표기법은 이것을 망쳐서는 안됩니다. 또한 조금 더 일반화했습니다. 상수 대신 함수를 사용하도록 좀 더 일반화 할 수도 있습니다. 그런 다음 합계에서 대신 . β(n)aak−iβ(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)=Θ(nloga⁡blogk⁡n)k≥0k

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

  1. 경우 대한 후, .f(n)=O(nlogb⁡alogc−1⁡n)c<0T(n)=Θ(nlogb⁡a)

  2. 만약 에 대한 다음 .f(n)=Θ(nlogb⁡alogc−1⁡n)c=0T(n)=Θ(nlogb⁡alog⁡log⁡n)

  3. 만약 위한 다음 ).f(n)=Θ(nlogb⁡alogc−1⁡n)c>0T(n)=Θ(nlogb⁡alogc⁡n

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

T(n)=∑i=0logb⁡n−1ai(nb−i)logb⁡alogbc−1⁡(nb−i)=∑i=0logb⁡n−1nlogb⁡a(logb⁡n−i)c−1=nlogb⁡a∑j=1logb⁡njc−1.
c<0∑j=0∞jc−1T(n)=Θ(nlogb⁡a)c=0Hlogb⁡n=log⁡(logb⁡n)+O(1)T(n)=Θ(nlogb⁡alog⁡log⁡n) 입니다. 경우 , 우리는 일체 사용 합에 근사 할 수 따라서 .c>0
∑j=1logb⁡n≈∫0logb⁡nxc−1dx=xcc|0logb⁡n=logbc⁡nc,
T(n)=Θ(nlogb⁡alogc⁡n)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.