두 개의 재귀 호출로 재발 관계 해결


10

나는 그것이하지 않을 것이라는 조건 퀵의 최악의 경우 런타임을 공부하고 매우 의 정의를 변화시키는 불균형 파티션을 아주 .

이렇게하려면 런타임 가 퀵 정렬이 항상 일부 분수 에서 요소는 왼쪽 파티션에 있고 은 오른쪽 파티션에 있습니다 ( 중앙에 요소, 피벗을 남김 ).T(n,p)0<p12p(n1)(1p)(n1)1

분수가 파티션 은보다 균형이 잡히고 런타임이 더 작기 때문에 는 가 최대 불균형 허용 파티션 인 최악의 경우 상한을 제공 한다는 것을 알기 어렵지 않아야 합니다. 모든 분획물 허용되지 않는다.T(n,p)p>p<p

가 가장 좋은 경우이고 이 가장 빠른 퀵 정렬의 경우임이 분명합니다 . 둘 다 모든 교육 자료에서 찾을 수있는 쉬운 반복 관계를 가지고 있습니다. 그러나 나는 일반적으로 를 공부하는 방법에 대한 실마리가 없습니다 . 명백한 관계는 다음과 같습니다.T(n,12)T(n,0)T(n,p)

T(n,p)=n+T(p(n1),p)+T((1p)(n1),p)

여기에 붙어 있습니다. 검색을 시도했지만 분할 및 정복 알고리즘에 대해 이해할 수있는 모든 문헌은 문자 그대로 "분할" 을 수행하고 분할의 크기가 항상 동일하다는 용어를 사용하여 분석을 "속임수" 했습니다. 일정한.

나는 두 개의 재귀 호출을 처리하는 방법을 모르고 반올림을 제거하는 것이 안전한지 알 수 없습니다. 이것이 분석적으로 해결할 수 있습니까? 그렇다면 어떻게합니까?

추신 : 나는 무증상에 관심이 없습니다 상수 대해 를 표시하기 쉽습니다 ). 가 작아 질수록 퀵 정렬이 얼마나 느려지는 지에 관심이 있습니다. 예를 들어 비율 T (n, 0.25) \ over T (n, 0.5)에 관심이 있습니다.Θ(nlogn)ppT(n,0.25)T(n,0.5)

PPS : 학부생으로서 내가 너무 길거나 설명 할 수없는 사소한 것들을 분명히했다면 사과드립니다. 그리고 나는 그것이 다른 SE 사이트들처럼 많이 내려다 보았는지 모르겠지만, 이것은 숙제가 아니라 개인적인 관심입니다.

답변:


9

언급했듯이 Akra-Bazzi 정리 는 모든 에 대해 재귀 가 임을 나타냅니다 . 그러나 이것은 에 대한 의존의 본질을 드러내지 않습니다 . 후자를 결정하기 위해 재귀 트리 접근법을 사용할 수 있습니다.T(n,p)O(nlogn)p(0,1)p

재귀 트리의 루트에는 간격이 있습니다. 두 자식은 및 간격 이며, 총 길이는 다시 입니다. 이러한 각 노드에는 두 개의 자식이 있습니다 ( 이 충분히 크다고 가정 ). 간단히하기 위해 반올림 오류를 무시합니다. 즉, 이 정수 라고 가정합니다 . 이것은 단지 기술적 인 것이므로 걱정하지 않아도됩니다. 노드의 길이가 최대 일 때마다 프로세스를 중지합니다 . 알고리즘의 복잡성은 트리의 총 간격 길이에 비례합니다. 때 의 {1,n}{1,,pn}{pn+1,,n}nnpn1p1/2 (프로세스를 중지하는 노드)의 깊이가 다르므로 전체적인 복잡성을 결정하기가 더 어려워집니다.

트리는 최대 레벨을 으로써 간단한 상한을 얻을 수 있습니다. 각 노드는 적어도 부모보다 작습니다. 에 대한 분석에서와 마찬가지로 , 모든 수준의 간격의 최대 길이는 최대 이며, 의 상한을 구합니다 . 시간을 실행. 이후 와 작은 경우 , 이것을 로 쓸 수 있습니다 .log1p(1/n)1pp=1/2nO(nlog1p(1/n))log1p(1/n)=logn/log(1p)1log(1p)1=log(1p)=p±O(p2)pO(nlogn/p)

보다 정확한 계산은 다음과 같습니다. 레벨 고려하십시오 . 작은 간격에 도달했을 때 프로세스를 중지하지 않는다고 가정하십시오. 우리는 단계 를 취하여 임의의 정점을 생성 할 수 있습니다 . 각 단계에서 확률 로 왼쪽으로 (예) 확률 오른쪽으로 (예) 이동 합니다. 왼쪽 단계를 수행 할 때마다 간격 길이의 가 감소하고, 오른쪽 단계를 수행 할 때마다 합니다. 정점은 길이의 로그의 실제 트리에 최대 만큼 감소합니다 . 레벨 의 간격 총계ttp1plogplog(1p)lognt이 프로세스에 따라 생성 된 정점이 최대 의 감소에 해당 할 확률은 정확히 트리입니다 . 그 경우, 인 동일하다 분포 확률과 및 행 확률 및 다음, 독립적 레벨 의 총 가중치 는 입니다. 슈퍼 전율 , 랜덤 변수 대략 정상의 평균과 분산 및 분산 선형lognDlogpplog(1p)1p엑스1,,엑스홍보[엑스1++엑스로그]엑스1++엑스[로그(1)로그(1)]그래서 대한 만족 가령 확률은 아주 가까이하는 것 에 대한 동안 만족 말하자면 매우 0에 가까울 것이다. 정의 (이진 엔트로피 함수라고도 함), 우리는 실행 시간 인 결론 ( 균일 , ). 으로 우리는이 우리의 이전 추정치는 꽉이었고, 그래서.[로그(1)로그(1)](로그)/21[로그(1)로그(1)]2로그h()=로그(1)로그(1)Θ(로그/h())0h()로그

동일한 분석을 보는 다른 방법은 무한 독립 확률 변수의 서열을 갖는 것입니다 전과를, 및 정지 시간을 정의 처음으로 되도록 . 실행 시간은 비례합니다 . 기초 갱신 이론 은 임을 나타냅니다. 구간의 총 크기는 . 더 정확하게, 모든 상수 대해 간격의 총 크기는 . 여기서엑스1,엑스2,엑스1++엑스로그nE[T]limnE[T]/logn=1/E[D]=1/h(p)(1+o(1))nlogn/h(p)p(1+αp(n))nlogn/h(p)αp(n)=o(n) 입니다. 기본 갱신 정리의 수렴은 시간 매개 변수 (이 경우 에서 지수 이므로 다항식 , 즉 합니다. 수렴은 아마도 모든 대해 대해 균일 할 것입니다 .logα()=영형()(δ,1δ)δ>0


요약하면, 실행 시간에 비례하는 재귀 트리의 전체 간격 길이는 모든 에 대해 다음과 같은 형식입니다 . 여기서 및 는 같은 기준으로, 함수에 따라 인 및 경향을 으로 .

(,)=(1+영형(1))로그h(),
로그h()=로그(1)로그(1)영형(1)0

또한 모든 및 경우 전체 간격 길이가 형식 여기서 및 숨겨진 큰 O 상수는 에만 의존합니다 . 특히 모든 상수 , 수렴은 다항식으로 빠릅니다.δ>0(δ,1δ)

(,)=(1+영형(δ))로그h(),
δ>0δ1,2
limnT(n,p1)T(n,p2)=h(p2)h(p1),

빠른 답변 Yuval에 감사드립니다. 를 요약에 사용했다는 사실에 약간 혼란스러워 합니다. 는 상수이며 ? I는 쓰게 작은 테스트 프로그램 을위한 것으로 보여 비교 분석 방법 및 계산 한 0.03 사이의 오차를 주었다. 다소 큰 것 같습니까, 아니면 이것이 예상됩니까? Θh(p)Θn=100000000000000T(n,0.1)/T(n,0.5)
orlp

의 상수는 에서 균일 합니다. 더 정확하게, 일부 상수 의 경우, 각 에 대해 가 존재 하여 , . 각 고정 에 대해 형식의 더 강력한 문장을 얻을 수 있습니다 . 여기서 작은 o는 ( 그러나 의존 할 수있다 ); 는 의존 해서는 안됩니다 . Θpc,CpNpnNpcnlogn/h(p)T(n,p)Cnlogn/h(p)T(n,p)=(1+o(1))Cnlogn/h(p)pnpCp
Yuval Filmus

한계 컨버전스에 따라 달라 당신이해야 할 수도 있으므로, 정말 좋은 근사치를 얻기 위해 큰 수. 반면 0.03의 상대 오차는 그렇게 크게 들리지 않습니다. 을 수정 하고 실행 시간을 의 함수로 플로팅하여 와 비교할 수 있습니다. lognlognnp1/h(p)
Yuval Filmus

아 죄송합니다. 0.03의 상대 오류는 아니지만 절대 오류 (2.13222 대 2.10339)를 의미했습니다. 대해 의 함수로 를 플로팅 하면 가 96 % 인 4 %의 상대적인 차이가 나타납니다. 입니다. T(n,p)p1/h(p)T(1011,0.05)h(0.05)T(1011,0.4)h(0.4)
orlp

1
초상 수는 관련 변수 (이 경우 ) 와 관련하여 무한대 경향이있는 함수 입니다. 과 동일 합니다. nω(1)
Yuval Filmus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.