이 증거는 귀납에 의한 증거이며 다음과 같습니다.
P (n)은 "Quicksort가 길이 n의 모든 입력 배열을 올바르게 정렬합니다"라는 주장입니다.
기본 사례 : 길이가 1 인 모든 입력 배열이 이미 정렬되었습니다 (P (1) 보유)
유도 단계 : 고정 n => 2. 길이 n의 일부 입력 배열을 고정합니다.
P (k)가 모든 k <n을 유지하면 P (n)도 유지됩니다.
그런 다음 피벗 p 주위에 분할 된 배열 A를 그립니다. 따라서 p를 그리고 첫 번째 부분으로 <p 인 배열 부분을 호출하고> p 인 부분을 두 번째 부분으로 호출합니다. 파트 1의 길이는 k1이고 파트 2의 길이는 k2입니다. Partition 서브 루틴 (앞에서 증명)의 정확성 증명으로 피벗 p가 올바른 위치로 감 깁니다.
귀납적 가설을 통해 : 1 차, 2 차 부품은 재귀 호출에 의해 올바르게 정렬됩니다. (P (K1), P (k2) 사용)
따라서 재귀 호출 후 전체 배열이 올바르게 정렬됩니다.
QED
내 혼란 : 나는 이것이 어떻게 그것이 정확성을 증명하는지 정확하게 보는 데 많은 문제가 있습니다. 따라서 우리는 실제로 모든 자연수 k <n에 대해 P (k)를 유지한다고 가정합니다.
내가 지금까지 본 대부분의 유도 증명은 다음과 같습니다. 기본 사례를 증명하고 P (n) => P (n + 1). 그들은 일반적으로 일종의 대수 조작을 포함했습니다. 이 증거는 매우 다른 것처럼 보이며 유도 개념을 적용하는 방법을 이해하지 못합니다. 파티션 서브 루틴의 정확성이 핵심이라고 다소 추론 할 수 있습니다. 정확성에 대한 추론은 다음과 같습니다. 우리는 각 재귀 호출이 배열을 피벗 주위로 분할한다는 것을 알고 있습니다. 이 피벗은 올바른 위치에있게됩니다. 그러면 각 하위 배열이 피벗 주위로 더 분할되고 해당 피벗이 올바른 위치에있게됩니다. 이것은 길이 1의 하위 배열을 얻을 때까지 계속 진행됩니다.
그러나 우리는 P (k)가 모든 k <n ...을 보유한다고 가정하지 않습니다. 우리는 실제로 그것을 보여줍니다 (파티션 서브 루틴은 항상 하나의 요소를 올바른 위치에 배치하기 때문에) P를 가정하지 않습니다 (k) 모든 k에 대해 보유