Khi bạn nhìn vào một mạng sắp xếp chung, bạn có thể không biết làm thế nào để chứng minh rằng nó sắp xếp mọi chuỗi giá trị (có độ dài phù hợp cho mạng sắp xếp) một cách chính xác. Nhưng tôi đã học được về thủ thuật hay này, cách đơn giản hóa nhiệm vụ:
Nguyên tắc 0-1
Khi một mạng sắp xếp sắp xếp mọi chuỗi (có độ dài phù hợp) chỉ bao gồm "0" và "1" một cách chính xác, thì nó sẽ sắp xếp bất kỳ chuỗi nào (có độ dài phù hợp) một cách chính xác. Tất nhiên "0" và "1" là giữ chỗ cho bất kỳ yếu tố riêng biệt nào trong miền của mạng sắp xếp.
Vì vậy, bạn có thể xây dựng một bằng chứng như thế này:
- Lấy hai phần tử riêng biệt từ miền của mạng sắp xếp và gọi chúng là "0" và "1", sao cho "0" <"1"
- Xây dựng tất cả các chuỗi nhị phân với độ dài chính xác của mạng sắp xếp
- Trong các chuỗi này thay thế 0 bit và 1 bit bằng "0" và "1"
- Áp dụng các chuỗi này cho mạng sắp xếp
- Mỗi chuỗi phải được sắp xếp theo thứ tự như 000..01 ... 1
2n
n2nn
Chúng ta có thể làm nó rẻ hơn không?
Thật không may, có lẽ chúng tôi không thể có được giá rẻ hơn nhiều so với thử nghiệm toàn diện, ít nhất là khi sử dụng máy Turing để xây dựng các bằng chứng. Tất nhiên khi bạn xem một mạng sắp xếp cụ thể, bạn có thể có một ý tưởng sáng tạo làm thế nào để đưa ra một bằng chứng đơn giản. Nhưng nói chung, một thuật toán để xây dựng các bằng chứng như vậy rất có thể phức tạp như kiểm tra tất cả các chuỗi nhị phân. Lý do cho điều này là mạng phân loại bằng chứng có liên quan đến lớp phức tạp hoàn chỉnh NP như được nêu trong các câu trả lời khác.
2n√
Triển vọng / Outlook
Bộ não của bạn có phải là máy Turing không
Một hậu quả triết học là: Khi bạn tin rằng bạn có thể tìm thấy bằng chứng sáng tạo cho tính chính xác của từng mạng sắp xếp, thì bạn cũng tin rằng bộ não của bạn rất có thể không phải là máy Turing.
Sắp xếp song song
"Nguyên tắc 0-1" cũng được sử dụng để chứng minh tính đúng đắn của các thuật toán sắp xếp song song. Tôi có một bài thuyết trình hay (hy vọng) về điều này trên Github .
Sửa mạng sắp xếp
Nếu một trong các chuỗi được sắp xếp không chính xác (vì vậy bạn đã chứng minh mạng sắp xếp sai), bạn có thể sử dụng chuỗi này để xây dựng một mạng sắp xếp mà không gặp lỗi đó. Chỉ cần thêm một so sánh bổ sung về vị trí của "đường viền 1-0" trong chuỗi kết quả sai.