Các thuật toán mạnh mẽ mà quá khó để thực hiện, làm thế nào để chắc chắn rằng chúng đúng?


9

Tôi đang đề cập đến câu hỏi ở đây: các thuật toán mạnh mẽ quá phức tạp để thực hiện .

Nếu một thuật toán mạnh, nhưng quá phức tạp để thực hiện, làm thế nào bạn có thể chắc chắn rằng thuật toán này đúng? Nếu không triển khai, bạn sẽ không thể kiểm tra thuật toán trong kịch bản trong thế giới thực và thuật toán phức tạp như vậy có thể chứa lỗi, có thể làm mất hiệu lực thuật toán.

Đây là những gì tôi không hiểu; Nếu bạn có các kỹ thuật để chứng minh tính đúng đắn của một thuật toán, thì bạn sẽ có thuật toán để thực hiện nó chưa, phải không? Hoặc nếu không thì làm thế nào chúng ta có thể chắc chắn rằng kỹ thuật chứng minh là chính xác?

Tôi xin lỗi nếu tôi nghe tiểu học!

Cập nhật từ Kaveh (được sao chép ở đây vì đối số tốt hơn!):

Nếu bạn có thể chính thức chứng minh tính đúng đắn của thuật toán trong một hệ thống chính thức như Coq thì bạn cũng có thể trích xuất thuật toán (vì về cơ bản bạn đã triển khai thuật toán), nhưng thực tế chính là đối với hầu hết các thuật toán, chúng tôi không đưa ra bằng chứng chính thức về tính chính xác cho thuật toán, chúng tôi sử dụng bằng chứng không chính thức về tính chính xác. Bằng chứng có thể sai, đôi khi nó xảy ra và thậm chí một bằng chứng chính thức về tính đúng sẽ không làm cho chúng tôi hoàn toàn chắc chắn rằng thuật toán là chính xác.


6
Đây là lý do tại sao chúng tôi có các kỹ thuật để chứng minh tính chính xác của các thuật toán, ngay cả khi việc thực hiện (chính xác) trên một máy thật là khó.
Raphael

9
Tôi đồng ý với Raphael. Có vẻ như câu hỏi dựa trên một giả định rằng tính chính xác của thuật toán thường được chứng minh bằng cách thực hiện nó, nhưng thực tế không phải vậy. Chứng minh tính đúng đắn của một thuật toán và thực hiện một thuật toán là những điều hoàn toàn khác nhau, và một điều không bao hàm điều khác theo một trong hai hướng.
Tsuyoshi Ito

8
Các thuật toán đơn giản với các bằng chứng phức tạp về tính chính xác - làm thế nào để bạn biết rằng chúng đúng? Chỉ vì một thuật toán hoạt động trên các ví dụ thử nghiệm không có nghĩa là nó hoạt động trên tất cả các đầu vào.
Peter Shor

2
Tôi đồng ý với hầu hết các ý kiến, nhưng tôi nghĩ rằng họ đang thiếu một điểm quan trọng. Nếu bạn có thể chính thức chứng minh tính đúng đắn của thuật toán trong một hệ thống chính thức như Coq thì bạn cũng có thể trích xuất thuật toán (vì về cơ bản bạn đã triển khai thuật toán), nhưng thực tế chính là đối với hầu hết các thuật toán, chúng tôi không đưa ra bằng chứng chính thức về tính chính xác cho thuật toán, chúng tôi sử dụng bằng chứng không chính thức về tính chính xác. Bằng chứng có thể sai, đôi khi điều đó xảy ra và thậm chí một bằng chứng chính thức về tính đúng sẽ không làm cho chúng tôi hoàn toàn chắc chắn rằng thuật toán là chính xác.
Kaveh

5
"Hãy coi chừng các lỗi trong đoạn mã trên; tôi chỉ chứng minh nó đúng, không thử nó." ~ Donald Knuth
Lev Reyzin

Câu trả lời:


11

Vài năm trước, đã có một cuộc tranh luận (khá gay gắt) về một chủ đề tương tự như thế này. Tất cả bắt đầu khi một số bằng chứng phức tạp hóa ra không chính xác, và một số nhà nghiên cứu bắt đầu nghi ngờ về bản chất của bằng chứng (tốt, tôi nên nói là "mật mã có thể chứng minh được", nhưng vì lý do chung chung, tôi đã không làm vậy) . Cả hai bên của cuộc tranh luận đã buộc tội bên kia để hiểu sai các khái niệm. Đây là một liên kết để biết thêm .

Bằng chứng là các công cụ (toán học) của chúng tôi để chứng minh các định lý / thuật toán là chính xác, nhưng khi chúng trở nên quá phức tạp, chúng tôi có thể trượt và chứng minh những điều sai là đúng. Bằng chứng 100 trang gần đây trên P ≠ NP là một ví dụ tuyệt vời. Tuy nhiên, điều này không loại trừ bản chất của bằng chứng: Không có gì sai với họ.

Một điểm cuối cùng: Tôi nghĩ rằng nghiên cứu triết lý của khoa học sẽ cho chúng ta cái nhìn sâu sắc hơn về điều này. (Trong liên kết đã cho, hãy xem dấu đầu dòng " Làm thế nào để chúng ta biết liệu một bằng chứng toán học có đúng không? ")

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.