Cố gắng để hiểu bằng chứng Quicksort Correctness này


10

Bằng chứng này là một bằng chứng bằng cảm ứng, và đi như sau:

P (n) là khẳng định rằng "Quicksort sắp xếp chính xác mọi mảng đầu vào có độ dài n."

Trường hợp cơ sở: mọi mảng đầu vào có độ dài 1 đã được sắp xếp (P (1) giữ)

Bước quy nạp: fix n => 2. Khắc phục một số mảng đầu vào có độ dài n.

Cần hiển thị: nếu P (k) giữ cho tất cả k <n, thì P (n) cũng giữ

Sau đó, anh ta vẽ một mảng A được phân vùng xung quanh một số trục p. Vì vậy, anh ta vẽ p và gọi phần của mảng là <p là phần thứ nhất và phần đó là> p là phần thứ hai. Độ dài của phần 1 = k1 và chiều dài của phần 2 là k2. Bằng chứng chính xác của chương trình con Phân vùng (đã được chứng minh trước đó), trục p cuộn lên ở vị trí chính xác.

nhập mô tả hình ảnh ở đây

Theo giả thuyết quy nạp: phần 1, 2 được sắp xếp chính xác bằng các cuộc gọi đệ quy. (Sử dụng P (K1), P (k2))

Vì vậy: sau các cuộc gọi đệ quy, toàn bộ mảng được sắp xếp chính xác.

QED

Sự nhầm lẫn của tôi : Tôi có rất nhiều vấn đề khi xem chính xác làm thế nào điều này chứng minh tính đúng đắn của nó. Vì vậy, chúng tôi giả sử rằng P (k) thực sự giữ cho tất cả các số tự nhiên k <n.

Hầu hết các bằng chứng cảm ứng mà tôi đã thấy cho đến nay đều đi một cái gì đó như: Chứng minh trường hợp cơ sở và cho thấy P (n) => P (n + 1). Họ cũng thường liên quan đến một số loại thao tác đại số. Bằng chứng này có vẻ rất khác biệt và tôi không hiểu làm thế nào để áp dụng khái niệm Cảm ứng cho nó. Tôi có thể phần nào lý do rằng tính chính xác của chương trình con Phân vùng là chìa khóa. Vì vậy, lý do cho tính chính xác của nó như sau: Chúng tôi biết rằng mỗi cuộc gọi đệ quy, nó sẽ phân vùng mảng xung quanh một trục. Trục này sau đó sẽ ở vị trí hợp pháp của nó. Sau đó, mỗi phân đoạn sẽ được phân vùng tiếp theo xung quanh một trục và trục đó sẽ ở vị trí hợp lý của nó. Điều này cứ lặp đi lặp lại cho đến khi bạn có được một phân đoạn có độ dài 1, được sắp xếp một cách tầm thường.

Nhưng sau đó, chúng tôi không cho rằng P (k) giữ cho tất cả k <n .... chúng tôi thực sự HIỂN THỊ nó (vì chương trình con Phân vùng sẽ luôn đặt một phần tử ở vị trí hợp lý của nó.) Chúng tôi không cho rằng P (k) giữ cho tất cả k


"QUE" là gì? Ý bạn là "QED"? (Latin Quod Erat Demonstrandum không chứa bất kỳ từ nào bắt đầu từ U )
Bakuriu

1
Tôi thực sự có nghĩa là QED. Tôi đoán sự nhầm lẫn của tôi đã dẫn đến việc tôi viết "CÁI GÌ?" bằng tiếng Tây Ban Nha
FrostyStraw

Câu trả lời:


13

P(k)k<nP(n1)P(n)

Bằng chứng bạn mô tả được gọi là nguyên tắc cảm ứng toán học mạnh mẽ và có dạng

P(n)n{1,2,}

  1. P(1)

  2. (k<n[P(k)])P(n)

P(n)n1

nknk1

k<nnk1<n


2
P(1)n=1k<1,P(k)P(1)

Được rồi vì vậy ... để rõ ràng ... Chúng tôi ASSUME P (k) là đúng cho tất cả k <n. Và cách chúng ta HIỂN THỊ rằng P (k) ==> P (n) (với mọi k <n) là thông qua sự kết hợp của việc biết rằng trục sẽ chắc chắn ở đúng vị trí của nó và thông qua giả định (giả thuyết quy nạp ) rằng các tập hợp con bên trái và bên phải cũng được sắp xếp. Kết hợp điều đó với trường hợp cơ sở (trong đó k = 1 <n), và bằng chứng đã hoàn thành?
FrostyStraw

tôi đoán rằng sẽ không đủ để biết rằng trục xoay ở đúng vị trí của nó, nhưng cũng có thể là phân khúc bên phải lớn hơn trục và bên trái là ít hơn
FrostyStraw

@FrostyStraw Đó là tiếng thì thầm của Trung Quốc.
Raphael

1
@FrostyStraw Hehe, ý tôi là chiến lược chứng minh. :)
Raphael

7

Bằng chứng này sử dụng nguyên tắc cảm ứng hoàn toàn :

Giả sử rằng:

  • P(1)
  • n>1P(1),,P(n1)P(n)

P(n)n1

Q(m)P(1) and P(2) and  and P(m)

Bây giờ, hãy sử dụng cảm ứng hoàn chỉnh để chứng minh rằng phiên bản Quicksort sau đây sắp xếp chính xác đầu vào của nó:

Quicksort(A, n)
    if n = 1 then:
        return
    else:
        let X[1...x] consist of all elements of A[2],...,A[n] which are at most A[1]
        let Y[1...y] consist of all elements of A[2],...,A[n] which are larger than A[1]
        call Quicksort(X, x)
        call Quicksort(Y, y)
        set A to the concatenation of X, A[1], Y

Đây A[1],...,A[n]là mảng đầu vào, và nlà chiều dài của nó. Tuyên bố mà chúng tôi muốn chứng minh như sau:

An1AB

  1. A
  2. π1,,πn1,,nB[i]=A[πi]
  3. B[1]B[2]B[n]

P(n)

An1BQuicksort(A, n)B[1]B[2]B[n]

nn=1n>1X,x,Y,yQuicksortx,y<n

X[1]X[2]X[x]Y[1]Y[2]Y[y]
XYX[x]A[1]<Y[1]
X[1]X[x]A[1]<Y[1]Y[y].
B[1]B[n]P(n)

4

Phần còn thiếu của đối số là tính siêu việt của '<' - tức là thuộc tính mà nếu a <b và b <c, thì a <c. Bằng chứng là mảng cuối cùng được sắp xếp giống như thế này:

Đặt A [i], A [j] là các phần tử của sắp xếp hậu mảng, trong đó i <j. Sau đó A [i] <A [j] xuất phát từ một trong các trường hợp vị trí sau (và không có trường hợp nào khác):

(a) i và j nằm trong phân vùng đầu tiên - A [i] <A [j] theo sau đệ quy / cảm ứng.

(b) i và j nằm trong phân vùng thứ hai - A [i] <A [j] theo sau đệ quy / cảm ứng.

(c) i nằm trong phân vùng đầu tiên và j là chỉ số của trục - A [i] <A [j] theo sau bằng chứng về thủ tục phân vùng.

(c) i là chỉ số của trục và j nằm trong phân vùng thứ hai - A [i] <A [j] theo sau bằng chứng về thủ tục phân vùng.

(e) i nằm trong phân vùng thứ nhất và j nằm trong phân vùng thứ hai - sau đó theo thủ tục phân vùng, A [i] <p Pivot và p xoay <A [j]. Vì vậy, bằng độ xuyên sáng, A [i] <A [j].

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.