Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

분할 정복 반복에 대한 고급 마스터 정리

<시간/>

분할 및 정복 쉽게 풀 수 있는 유사한 유형의 여러 하위 문제로 재귀적으로 분기하는 문제를 기반으로 하는 패러다임에서 작동하는 알고리즘입니다.

예시

분할 정복 기법에 대해 자세히 알아보기 위해 예를 들어 보겠습니다. −

function recursive(input x size n)
   if(n < k)
      Divide the input into m subproblems of size n/p.
      and call f recursively of each sub problem
   else
      Solve x and return

모든 하위 문제의 결과를 결합하고 원래 문제에 대한 솔루션을 반환합니다.

설명 − 위의 문제에서 문제 세트는 쉽게 해결할 수 있는 더 작은 하위 문제로 세분화됩니다.

분할과 정복을 위한 마스터스 정리 재귀 관계 알고리즘에 대한 빅 0 값을 결정하는 데 사용할 수 있는 분석 정리입니다. 알고리즘에 필요한 시간을 구하여 점근적 표기 형태로 나타내기 위해 사용합니다.

위의 예에서 문제의 런타임 값의 예 -

T(n) = f(n) + m.T(n/p)

대부분의 재귀 알고리즘에 대해 마스터의 정리를 사용하여 알고리즘에 대한 시간 복잡도를 찾을 수 있지만 일부 경우 마스터의 정리가 적용되지 않을 수 있습니다. 이것은 마스터의 정리가 적용되지 않는 경우입니다. 문제 T(n)이 단조롭지 않은 경우(예:T(n) =sin n). 문제 함수 f(n)은 다항식이 아닙니다.

이러한 경우 시간 복잡도를 찾는 마스터 정리가 효율적이지 않기 때문에 재귀 반복을 위한 고급 마스터 정리가 설계되었습니다. −

형식의 반복 문제를 처리하는 디자인입니다.
T(n) = aT(n/b) + ø((n^k)logpn)

여기서 n은 문제의 크기입니다.

a =재귀의 하위 문제 수, a> 0

n/b =각 하위 문제의 크기 b> 1, k>=0이고 p는 실수입니다.

이러한 유형의 문제를 해결하기 위해 다음 솔루션을 사용합니다.

  • 만약>bk , T(n) =∅(nlogba)
  • a =bk인 경우 , 그럼
    • p> -1이면 T(n) =∅(nlogba log p+1 n)
    • p =-1이면 T(n) =∅(nlogba loglogn)
    • p <-1이면 T(n) =∅(nlogba )
  • 만약k , 그럼
    • p> =0이면 T(n)=∅(nk 로그p n)
    • p<0이면 T(n) =∅(nk)

고급 마스터 알고리즘을 사용하여 일부 알고리즘의 복잡성을 계산합니다.

이진 검색 − t(n) =θ(logn)

병합 정렬 − T(n) =θ(nlogn)