빠른 정렬을 위해 2N lnN 비교 이해


13

Sedgewick 's Algorithms book에서 quicksort 분석을 진행했습니다. 그는 N 개의 개별 항목 배열을 정렬하는 동안 빠른 정렬에서 비교 횟수에 대해 다음과 같은 반복 관계를 작성합니다.

여기에 이미지 설명을 입력하십시오

나는 이것을 이해하는 데 어려움을 겪고 있습니다 ... 어떤 요소가 피벗이 될 때 1 / N 확률이 필요하다는 것을 알고 있으며 k가 피봇이되면 왼쪽 하위 배열에 k-1 요소와 오른쪽 하위- 배열에는 Nk 요소가 있습니다.

1. 파티셔닝 비용은 어떻게 N + 1이됩니까? 분할을 수행하는 데 N + 1 비교가 필요합니까?

2. Sedgewick에 따르면 k의 각 값에 대해 그 값을 더하면 분할 요소가 k + 두 하위 배열의 비용이 될 확률은 위의 방정식을 얻습니다.

  • 수학 지식이 적은 사람들이 이해할 수 있도록 누군가 이것을 설명 할 수 있습니까?
  • 구체적으로 방정식의 두 번째 항을 어떻게 얻습니까?
  • 그 용어는 정확히 무엇을 의미합니까?

1
답변의 일부는 en.wikipedia.org/wiki/Quicksort 에서 복사 한 것입니다. "따라서 가능한 모든 분할에 대해 평균 을 구하고 파티션에 대한 비교 횟수는 n-1이며 입력의 모든 순열에 대한 평균 비교 횟수는 n-1입니다. 재발 관계를 해결함으로써 순서를 정확하게 추정 할 수있다.
Job

답변:


7

C퀵 정렬 의 비용 기능 은 두 부분으로 구성됩니다. 첫 번째 부분은 배열을 두 개의 '반쪽'으로 분할하는 비용입니다. 두 번째 부분은이 두 반쪽을 정렬하는 비용입니다.

  1. (N + 1)용어는 실제로 요약 된 용어이며 용어에서 나옵니다.

    (N - 1) + 2
    

    이는 빠른 정렬에서 분할 비용입니다. N-1피벗 값과 비교하고 분할의 일부 경계 조건으로 인해 2 개의 추가 비교가 필요합니다.

  2. 방정식의 두 번째 부분은 피벗 값의 양쪽에서 두 개의 '반쪽'을 정렬하는 비용으로 구성됩니다 k.

    피벗 값을 선택한 후 두 개의 정렬되지 않은 '반쪽'이 남습니다. 이 '반쪽'을 정렬하는 비용은 크기에 따라 다르며 비용 함수를 재귀 적으로 적용하는 것으로 가장 쉽게 설명됩니다 C. 피벗이 가장 작은 경우 N의 값, 두 '절반'를 각각 구분하기위한 비용이 각각 인 C(0)C(N-1)(0 요소 배열 및 하나의 정렬 비용 정렬 비용 N-1요소). 피봇 두 '절반'를 각각 구분하기위한 다섯 번째로 작은하고 비용이 경우 각각 인 C(5)C(N-6)(5 개 요소 배열 및 하나의 정렬 비용 정렬 비용 N-6요소). 다른 모든 피벗 값도 마찬가지입니다.

    그러나 피벗 값을 모르는 경우이 두 '반쪽'을 정렬하는 데 비용이 얼마나 듭니까? 이것은 피벗의 가능한 각 값에 대한 비용을 가져 와서 특정 값이 나타날 확률을 곱하여 수행됩니다.

    각 피벗 값이 동일하게 적용될 수 있으므로 특정 피벗 값을 선택할 가능성 1/NN요소 가있는 경우 입니다. 이것을 이해하려면 주사위를 굴리는 것에 대해 생각하십시오. 적절한 주사위를 사용하면 각면이 위로 향할 확률이 동일하므로 1을 굴릴 확률은 1/6입니다.

    이를 결합하면 피벗의 각 가능한 값 k에 대해 비용 ( C(k-1) + C(N-k))에 기회 ( 1/N)를 곱한 합산 항을 제공합니다.

  3. 2N lnN제목 에 대한 질문에서 합산 ​​공식의 추가 도출은 여기에서 세부 사항을 설명하기에는 너무 많은 수학이 필요하지만, N요소 의 배열을 정렬하는 비용 ( C(N))을 정렬하는 관점에서 표현할 수 있다는 이해 N-1요소의 배열 ( C(N-1)) 및에 직접 비례하는 요소 N.


2
  1. 분할 단계에 대한 비교 횟수로서 N + 1은이 책의 오류 인 것 같습니다. 피벗보다 작거나 큰 N-1 비 피벗 요소 각각에 대해 하나의 비교가 필요합니다. 따라서 N + 1이 아니라 총 N–1 비교. (가장 간단한 경우 N = 2, 즉 하나의 피벗과 다른 요소를 고려하십시오 . 두 요소 사이에 세 가지 비교 를 수행 할 공간이 전혀 없습니다 .)

  2. 선택한 피벗이 가장 작은 요소 (k = 1) 인 경우를 고려하십시오. 즉, 배열이 왼쪽의 빈 부분 (피벗보다 작은 요소는 없음)과 피벗을 제외한 모든 요소를 ​​포함하는 오른쪽의 부분 (다른 모든 요소는 피벗보다 큼)으로 나뉩니다. ). 이는 이제 재귀 적으로 해결하려는 하위 문제의 크기가 각각 0과 N–1 (k-1과 N–k)이며 C (0)과 C (N–1) 비교가 필요함을 의미합니다. 따라서 총 C (0) + C (N–1)입니다.

    피벗이 두 번째로 작은 요소 (k = 2) 인 경우 하위 문제 크기는 1과 N–2 (k-1과 N–k, 왼쪽에있는 하나의 요소입니다. 피벗). 따라서 이러한 하위 문제를 재귀 적으로 해결하려면 C (1) + C (N–2) 비교가 필요합니다. 피벗이 세 번째로 작은 요소 인 경우, 네 번째 등인 경우도 마찬가지입니다. 이들은 분자의 표현입니다.

    피벗은 N 개의 요소 중에서 무작위로 선택되므로 각 경우 (피벗이 가장 작고 피벗이 두 번째로 가장 작은 등)는 동일한 확률 1 / N으로 발생합니다. 그것이 분모의 N이 나오는 곳입니다.

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