정교한 재귀 알고리즘의 예


14

나는 유명한 결정 론적 선형 시간 선택 알고리즘 (중위 알고리즘의 중간 값 알고리즘)을 친구에게 설명하고있었습니다.

이 알고리즘의 재귀는 (매우 단순하지만) 매우 정교합니다. 각각 다른 매개 변수를 가진 두 개의 재귀 호출이 있습니다.

흥미로운 재귀 알고리즘의 다른 예를 찾으려고했지만 찾을 수 없었습니다. 내가 생각해 낼 수있는 모든 재귀 알고리즘은 단순한 꼬리 재귀 또는 간단한 나누기와 정복입니다 (두 호출이 "동일한").

정교한 재귀의 예를 들어 줄 수 있습니까?


넓이 우선 검색을 사용하여 미로 또는보다 일반적으로 그래프를 탐색하는 것은 흥미로운 재귀의 간단한 예입니다.

utdiscant, BFS는 큐와 while 루프를 사용하여 쉽고 자연스럽게 구현 할 수 있기 때문에 내 질문에 적합하지 않다고 생각합니다.
elektronaj

퍼즐을 풀고 파싱하는 역 추적은 어떻습니까? 랭킹 및 언 랭킹 알고리즘에도 비표준 재귀가 있습니다.
uli

메모 알고리즘?
Kaveh

2
@vzn : 대기열 이 스택을 대체 할 수 없습니다 . BFS는 특별한 경우입니다.
라파엘

답변:


15

내가 가장 좋아하는 반복은 커크 패트릭과 세이 델이 먼저 볼록 껍질을 계산하기위한 출력 감지 알고리즘에 나타나고 나중에 다른 사람들도 반복합니다. 하자 의 볼록 선체 계산 시간 나타내고 N 볼록 선체를 갖는 평면에서 점 H 정점. (값 H는 사소한 바운드 제외하고, 사전에 공지되지 않은 H N 커크 패트릭 및 자이 델의 알고리즘이 반복 산출한다.) T ( N , H를 ) = { O ( N ) 경우 (,h)hhh 경우n1,n23n/4n1+n2=nh1+h2=h입니다.

(,h)={영형()만약  또는 h(1,h1)+(2,h2)+영형()그렇지 않으면
1,2/41+2=h1+h2=h

용액은 . h 가 균등하게 분할되는 매개 변수가 아니기 때문에 이것은 조금 놀라운 일 입니다. 그러나 사실, 재발 의 최악의 경우는(,h)=영형(로그h)h h 2 가 모두 약 h / 2. 어떻게 든 마술 적으로 h 1 이 항상 일정하다면, 해는 T ( n , h ) = O ( n ) 입니다.h1h2h/2h1(,h)=영형()

난이 재발의 변형을 사용하는 제 1 연산 토폴로지 논문 중 하나 :

T(n,g)={영형()만약  또는 =0(1,1)+(2,2)+영형({1,2})그렇지 않으면
g 1 + g 2 = g 입니다. 다시 말하지만, 해는 O ( n log g ) 이며,최악의경우는 n g 가 항상 균등하게 분할될 때 발생합니다.1+2=1+2=영형(로그)

"if 또는 h = O ( 1 ) " 조건에 문제가 있습니다 . 여기서 O 는 무엇을 의미합니까? nh 가 하나의 경우를 위해 끝내기 위해 전역 적으로 제한되는 상수가 있습니까 (그리고 저자는 그것들을 포기하지 않습니다). 문자 그대로 읽은 경우 (즉 , 동일한 행의 O ( n ) 와 동일한 방식으로 O ( 1 ) 모두 해석 ) 경우 2는 절대 또는 항상 발생하지 않습니다 (심지어 확실하지 않습니다). 표기법의 남용이 너무 멀었습니다. =영형(1)h=영형(1)영형hO(1)O(n)
라파엘

1
죄송합니다. 설명을 명확하게하기 위해 답변을 수정했습니다. 은 "좋아하는 상수"를 의미했습니다. 내 개정판에서 3 을 사용 했지만O(1)3잘 작동했을 것입니다. 1010100!
JeffE

계산 토폴로지 논문에서 이러한 다이어그램을 어떻게 그리셨습니까?
user119264

12

Aggarwal 등의 저의 논문 인 "볼록 다각형의 보로 노이 다이어그램을 계산하기위한 선형 시간 알고리즘" 에서 사용한 재귀 역시 상당히 복잡합니다.

여기 우리 논문의 알고리즘에 대한 설명이 있습니다. 설명에서 명확하지 않은 경우, 3 단계에서 빨간색 점이 크림슨 지점과 가닛 지점으로 분할됩니다. 1, 3, 6 단계는 모두 선형 시간입니다. 또한 이 총 포인트 수인 경우 | B | α n , | R | β nn|B|αn|R|βn 일부 α , β , γ > 0 .|C|γnα,β,γ>0

전체 알고리즘에 선형 시간이 걸리는 이유를 알아 보겠습니다.

  1. 원래 지점을 파란색과 빨간색 세트 B와 R로 분할하십시오.
  2. 파란색 점의 볼록 껍질을 재귀 적으로 계산합니다.
  3. 파란색 선체의 구조를 사용하여 크림슨 점 C를 선택하십시오.
  4. 한 번에 하나씩 파란색 선체에 크림슨 포인트를 추가하십시오.
  5. 가닛 점 G의 볼록 껍질을 재귀 적으로 계산합니다.
  6. 이 가넷 선체를 4 단계의 확장 된 파란 선체와 병합하십시오.

알고리즘을 선형으로 만드는 것은 점당 일정한 비용으로 빨간색 선분의 고정 된 부분을 파란색 선체에 추가하는 기능입니다. 추가 된 포인트는 크림슨 포인트입니다.

재귀 따라서이다 당신이 모르는 | B | | G | 그러나 보장 | B | + | G | ( 1 - γ ) n .

T(n)=T(|B|)+T(|G|)+O(n)
|B||G||B|+|G|(1γ)n

7

하프 플레인을 사용하여 범위를 검색 할 때 발생하는 중앙값 찾기 재귀에 변형이 있습니다. 재발 자체는 형태입니다

중간 규명 재발 유사하다. 이에 대한 자세한 내용은Jeff Erickson의 강의 노트와 특히 섹션 4를 참조하십시오.

T(n)=T(n/2)+T(n/4)+cn

1
여기 내 대답 ( cs.stackexchange.com/questions/332/… )은 실행 시간에 대해 똑같은 반복이 발생합니다 :)
Alex ten Brink

6

RNA 2 차 구조 예측에 사용되는 멋진 재귀 알고리즘 [1], [2]이 많이 있습니다. 자체 장치에 남겨두면 RNA 가닥이 자체와 염기쌍을 형성합니다. [3]의 비교적 간단한 예는 RNA 문자열이 자체적으로 형성 할 중첩 된 쌍을 이루는 염기의 최대 수를 계산합니다.

M(i,j)=maxik<jLmin{M(i,k1)+M(k+1,j1)+1M(i,j1)


  1. 열역학 및 보조 정보를 사용하여 큰 RNA 서열을 최적으로 컴퓨터 접기M. Zuker, P. Stiegler (1981)의 를

  2. E. Rivas, SR Eddy에 의한 유사 노트포함한 RNA 구조 예측을위한 동적 프로그래밍 알고리즘 (1999)

  3. R. Nussinov, AB Jacobson (1980) 의 단일 가닥 RNA의 2 차 구조 예측을위한 빠른 알고리즘


여기 에 제안 된 관련 내용 은 상호 의존적 (동적 프로그래밍) 재귀를 3 번 ​​수행하기 때문에 매우 복잡합니다.
Raphael

4

나는 아직도 "정교한 재귀"의 의미를 이해하지 못한다. 예를 들어, FFT 알고리즘의 재귀 단계는 정교합니다!

그러나 더 복잡한 재귀 를 찾으려면 상호 재귀 가 가능한 대답 일 수 있습니다. 상호 재귀는 함수형 프로그래밍 언어로 작업 할 때 유용 합니다 . 상호 재귀는 재귀 하강 파서 의 주요 기능입니다 .


글쎄요, FFT (가장 단순한 형태의 Cooley-Tukey)의 재귀는 "표준"나누기와 정복입니다. 이것은 O (nlogn) 복잡성에서 분명합니다. 재귀 호출 2 개 (짝수 1 개, 확률 1 개)는 다소 "동일"합니다.
elektronaj

3

내 머리 꼭대기에서 McCarthy 91 기능

F(N) = 
    n - 100    if n > 100
    F(F(n+11)) if n <= 100

그리고 Ackermann 기능

A(m, n) = 
    n + 1             if m = 0
    A(m-1, 1)         if m > 0 and n = 0
    A(m-1, A(m, n-1)) if m > 0 and n > 0

완구적이고 재귀적인 기능이기는하지만 색다른 것으로 계산 될 수 있습니다.

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