Làm thế nào để chứng minh tính đúng đắn của thuật toán xáo trộn?


24

Tôi có hai cách để tạo một danh sách các mục theo thứ tự ngẫu nhiên và muốn xác định xem chúng có công bằng như nhau không (không thiên vị).

Phương pháp đầu tiên tôi sử dụng là xây dựng toàn bộ danh sách các phần tử và sau đó thực hiện xáo trộn trên nó (giả sử là xáo trộn Fisher-Yates). Phương thức thứ hai là phương pháp lặp nhiều hơn, giữ cho danh sách được xáo trộn ở mỗi lần chèn. Trong mã giả, hàm chèn là:

insert( list, item )
    list.append( item )
    swap( list.random_item, list.last_item )

Tôi quan tâm đến cách người ta thể hiện sự công bằng của sự xáo trộn đặc biệt này. Những lợi thế của thuật toán này, nơi nó được sử dụng, là đủ để ngay cả khi hơi không công bằng thì nó vẫn ổn. Để quyết định tôi cần một cách để đánh giá sự công bằng của nó.

Ý tưởng đầu tiên của tôi là tôi cần tính toán tổng số hoán vị có thể theo cách này so với tổng số hoán vị có thể có cho một tập hợp độ dài cuối cùng. Tuy nhiên, tôi hơi thua lỗ về cách tính toán hoán vị do thuật toán này. Tôi cũng không thể chắc chắn đây là cách tiếp cận tốt nhất hay dễ nhất.


Bạn có thể thực hiện một mẫu thống kê qua một số lượng lớn các thuật toán của bạn và so sánh nó với giá trị mong đợi hoặc thực hiện một số loại thử nghiệm ngẫu nhiên trên nó.
Dave Clarke

Bạn muốn kiểm tra phân phối. Là nó phân phối đồng đều, hoặc sai lệch. Tôi nghi ngờ, tuy nhiên, bạn sẽ cần phải chạy nó nhiều lần.
Dave Clarke

Tôi không rõ làm thế nào tôi làm điều đó. Đó không phải là tính ngẫu nhiên của nội dung tôi theo sau, mà là tính ngẫu nhiên của đơn hàng. Phương pháp nào có thể đo lường sự phân phối của đơn đặt hàng?
edA-qa mort-ora-y

Ah, ngớ ngẩn với tôi, tôi có thể sử dụng một bộ đầu vào cố định và sử dụng vị trí cuối cùng của mỗi phần tử để có được một bản phân phối. Tuy nhiên, tôi thực sự sẽ thích một bằng chứng logic hơn là một mô phỏng.
edA-qa mort-ora-y

@ edA-qamort-ora-y: Mong muốn của bạn là mệnh lệnh của tôi. ;)
Raphael

Câu trả lời:


22

Đầu tiên, chúng ta hãy đưa ra hai giả định có thể rõ ràng, nhưng quan trọng:

  1. _.random_item Có thể chọn vị trí cuối cùng.
  2. _.random_itemchọn mọi vị trí có xác suất .1n+1

Để chứng minh tính chính xác của thuật toán của bạn, bạn cần một đối số quy nạp tương tự như đối số được sử dụng ở đây :

  • Đối với danh sách đơn lẻ chỉ có một khả năng, vì vậy nó được lựa chọn thống nhất.
  • Giả sử rằng danh sách có phần tử được chọn thống nhất (từ tất cả các hoán vị), cho thấy rằng phần tử có phần tử thu được bằng kỹ thuật của bạn được chọn thống nhất.n + 1nn+1

Từ đây trở đi, bằng chứng là sai. Vui lòng xem bên dưới để có bằng chứng chính xác; Tôi để điều này ở đây vì cả lỗi và các bước sau (có âm thanh) có thể mang tính giáo dục.

Nó rất hữu ích để lấy được một thuộc tính cục bộ (tức là yếu tố khôn ngoan) phải nắm giữ, bởi vì tranh luận về toàn bộ hoán vị là đau đớn. Quan sát rằng một hoán vị được chọn thống nhất nếu mọi phần tử có xác suất bằng nhau ở mỗi vị trí, nghĩa là

πPermnPr(L=π)=1n!i=1n j=1nPr(Li=j)=1n(1)

trong đó và chúng tôi giả sử vì đơn giản hóa công chứng mà chúng tôi chèn { 1 , Lọ , n } vào danh sách.n=|L|{1,,n}

Bây giờ, hãy cho chúng tôi xem kỹ thuật của bạn làm gì khi chèn phần tử thứ . Chúng tôi phải xem xét ba trường hợp (sau khi trao đổi):n+1

  1. Một trong các phần tử trong danh sách, không được hoán đổi, tức là j { 1 , Lỗi , n }i{1,,n}j{1,,n}
  2. Một trong các phần tử trong danh sách, được hoán đổi, tức là j { 1 , Lỗi , n }i=n+1j{1,,n}
  3. Yếu tố mới, tức là j = n + 1i{1,,n+1}j=n+1

Đối với mỗi trường hợp, chúng tôi tính xác suất của phần tử ở vị trí i ; tất cả phải trở thành 1ji (là đủ vì(1)). Đặtpn=11n+1(1) là xác suất của một trongnphần tửđầu tiênở bất kỳ vị trí nào trong danh sách cũ (giả thuyết cảm ứng) vàps=1pn=1nn xác suất của bất kỳ vị trí nào được chọn bởi(giả định 1, 2). Lưu ý rằng coice của danh sách cónphần tử và chọn vị trí hoán đổi làcác sự kiện độc lập, do đó xác suất của yếu tố sự kiện chung, ví dụ:ps=1n+1random_itemn

Pr(Li=j,i swapped)=Pr(Li=j)Pr(i swapped)=pnps

cho . Bây giờ cho các tính toán.i,j{1,,n}

  1. Chúng tôi chỉ xem xét các yếu tố cũ . Một phần tử j như vậy ở vị trí i khi và chỉ khi nó ở đó trước lần chèn cuối cùng và tôi không được chọn làm vị trí hoán đổi, đó là njii

    .Pr(Ltôi= =j)= =pn(1-pS)= =1nnn+1= =1n+1

  2. Ở đây chúng tôi xem xét rằng một trong những yếu tố cũ được hoán đổi đến vị trí cuối cùng. Phần tử có thể đã ở bất kỳ vị trí cũ nào, vì vậy chúng tôi tổng hợp tất cả các xác suất mà j ở vị trí itôi được chọn làm vị trí hoán đổi, đó làjjtôitôi

    .Pr(Ln+1= =j)= =Σtôi= =1npnpS= =Σtôi= =1n1n1n+1= =1n+1

  3. Phần tử mới kết thúc tại vị trí khi và chỉ khi tôi được chọn làm vị trí hoán đổi, đó làtôitôi

    .Pr(Ltôi= =j)= =pS= =1n+1

Tất cả hóa ra tốt, chiến lược chèn của bạn thực sự bảo tồn tính đồng nhất. Bằng sức mạnh của cảm ứng, điều đó chứng tỏ rằng thuật toán của bạn tạo ra các hoán vị phân bố đồng đều.

Một lời cảnh báo: bằng chứng này bị phá vỡ nếu các yếu tố được chèn không theo cặp khác nhau. phân biệt, bởi vì sau đó phương trình đầu tiên không còn hiệu lực. Nhưng thuật toán của bạn vẫn hợp lệ; mọi hoán vị với các bản sao được tạo bởi cùng một số lần thực hiện ngẫu nhiên. Bạn có thể chứng minh điều này bằng cách đánh dấu các bản sao (nghĩa là làm cho chúng có thể phân biệt được), thực hiện các bằng chứng trên và loại bỏ các đánh dấu (hầu như); bước cuối cùng thu gọn các bộ hoán vị có kích thước bằng nhau.


Như Steven đã nhận xét chính xác trong các ý kiến, bằng chứng trên về cơ bản là thiếu sót vì không giữ được; bạn có thể xây dựng các bản phân phối trên tập hợp hoán vị hoàn thành bên tay phải, nhưng không phải bên trái.(1)

random_itemL(k){1,Giáo dục,k}

π'Permn+1{1,Giáo dục,n+1}

π'= =(π(1),π(2),Giáo dục,π(tôi-1),n+1,π(tôi+1),Giáo dục,π(n),π(tôi))

πPermntôi{1,Giáo dục,n+1}Pr(L(n)= =π)= =1n!random_itemtôi1n+1πtôi

Pr(L(n+1)= =π')= =Pr(L(n)= =π)Pr(tôi hoán đổi)= =1(n+1)!

mà chúng tôi đã phải thể hiện. Bằng sức mạnh của cảm ứng, điều đó chứng tỏ rằng thuật toán của bạn tạo ra các hoán vị phân bố đồng đều.


  1. {(1,2,3,4),(2,3,4,1),(3,4,1,2),(4,1,2,3)}140

4
'Quan sát rằng một hoán vị được chọn thống nhất nếu mọi yếu tố có xác suất tương đương ở mỗi vị trí' - điều này không đúng. Chẳng hạn, tập hợp bốn hoán vị trên bốn phần tử {(1, 2, 3, 4), (2, 3, 4, 1), (3, 4, 1, 2), (4, 1, 2, 3 )} thỏa mãn ràng buộc của bạn, nhưng rõ ràng không phải là tập hợp của tất cả các hoán vị. Thật không may, bạn phải sử dụng các thuộc tính toàn cầu cho phép hoán vị của mình vì không có điều kiện địa phương nào đủ để xác định tính đồng nhất.
Steven Stadnicki
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.