Tôi nghe các cách giải thích khác nhau của âm thanh và đầy đủ . Tôi hiểu rằng sự đầy đủ có nghĩa là tìm một giải pháp nếu có. Ý nghĩa của thuật toán là âm thanh .
Có nghĩa gì khi nói một thuật toán là Âm thanh và Hoàn thành?
Tôi nghe các cách giải thích khác nhau của âm thanh và đầy đủ . Tôi hiểu rằng sự đầy đủ có nghĩa là tìm một giải pháp nếu có. Ý nghĩa của thuật toán là âm thanh .
Có nghĩa gì khi nói một thuật toán là Âm thanh và Hoàn thành?
Câu trả lời:
Đây là những thuật ngữ rất cụ thể liên quan đến logic.
Dưới đây là một số điểm bắt đầu:
http://en.wikipedia.org/wiki/Soundness
http://en.wikipedia.org/wiki/Completity_(logic)
Về cơ bản, âm thanh (của một thuật toán) có nghĩa là thuật toán không mang lại bất kỳ kết quả nào không đúng sự thật. Ví dụ, nếu tôi có một thuật toán sắp xếp mà đôi khi không trả về danh sách đã sắp xếp, thuật toán không có âm thanh.
Mặt khác, tính đầy đủ có nghĩa là thuật toán giải quyết tất cả các đầu vào có thể và không bỏ lỡ bất kỳ. Vì vậy, nếu thuật toán sắp xếp của tôi không bao giờ trả về một danh sách chưa sắp xếp, mà chỉ từ chối làm việc trên các danh sách có chứa số 7, thì nó sẽ không hoàn thành.
Nó hoàn chỉnh và hợp lý nếu nó hoạt động trên tất cả các đầu vào (có giá trị về mặt ngữ nghĩa trong thế giới của chương trình) và luôn nhận được câu trả lời đúng.
Tôi thấy câu trả lời của Erik Dietrich hơi khó hiểu. Sau đây là tốt hơn:
Một thuật toán là âm thanh nếu, bất cứ khi nào nó trả lời một câu trả lời, câu trả lời đó là đúng. Một thuật toán hoàn tất nếu nó đảm bảo trả về một câu trả lời đúng cho bất kỳ đầu vào tùy ý nào (hoặc, nếu không có câu trả lời nào tồn tại, nó đảm bảo sẽ trả về thất bại).
Hai điểm quan trọng:
Xem xét ví dụ về thuật toán sắp xếp A nhận đầu vào là danh sách các số. Chúng tôi nói rằng A là âm thanh nếu mỗi lần nó trả về một kết quả thì kết quả là một danh sách được sắp xếp. Tương tự như vậy, chúng tôi nói rằng A hoàn thành nếu đảm bảo trả về một danh sách được sắp xếp bất cứ khi nào chúng tôi cung cấp cho nó một danh sách các số.
Các thuật ngữ này xuất phát từ lý thuyết tính toán, vì vậy chúng có ý nghĩa hơn trong bối cảnh của lý thuyết tính toán so với bối cảnh của công nghệ phần mềm
Trong hầu hết các mô hình tính toán tiêu chuẩn, các vấn đề điện toán được biểu diễn dưới dạng ngôn ngữ . Một ngôn ngữ là một tập hợp các chuỗi. Sau đó, một thuật toán chỉ là một hệ thống hoặc thủ tục quyết định xem một chuỗi đã cho là thành viên của một số ngôn ngữ (bằng cách trả về đúng hay sai). Trong thuật ngữ công nghệ phần mềm, lý thuyết tính toán đặc biệt quan tâm đến các hàm trông như thế này, giả sử các chuỗi là bất biến:
boolean some_function(string argument){...}
Chúng tôi gọi hàm này là hoàn thành nếu nó trả về đúng cho mọi đối số là thành viên của ngôn ngữ. Chúng tôi gọi nó là âm thanh nếu nó trả về false cho mọi đối số không phải là thành viên của ngôn ngữ.
Nói cách khác, nó hoàn thành nếu nó luôn trả về true khi chúng ta muốn nó trả về true và âm thanh nếu nó luôn trả về false khi chúng ta muốn nó trả về false.
Làm thế nào điều này dịch sang các loại chức năng khác? Khi nó bật ra, hầu như luôn luôn có thể nhét một lượng dữ liệu tùy ý vào một chuỗi và khôi phục nó bên trong hàm. Vì vậy, hạn chế về loại đối số và arity không gì khác hơn là đơn giản hóa về mặt lý thuyết. Tuy nhiên, hạn chế về loại trả lại là quan trọng hơn. Các vấn đề đòi hỏi một kết quả boolean được gọi là các vấn đề quyết định . Nhiều lý thuyết tính toán liên quan đến các vấn đề quyết định; các bộ P và NP bị hạn chế trong các vấn đề quyết định (và ít nhất, NP, không thể được xác định một cách hợp lý nếu không có hạn chế này). Vấn đề tạm dừng là một ví dụ khác về vấn đề quyết định được nghiên cứu nhiều.
Theo ý kiến của tôi, các điều khoản này không khái quát bên ngoài phạm vi của các vấn đề quyết định, vì vậy sự khác biệt giữa chúng không thực sự có ý nghĩa khi thảo luận về một chức năng chung.
Có nhiều câu trả lời tốt hơn tại SO . Về cơ bản, bạn cung cấp một số thu thập dữ liệu và tiêu chí để tìm kiếm. Thuật toán âm thanh bắt bạn chỉ những con cá phù hợp với tiêu chí nhưng nó có thể bỏ lỡ một số mục dữ liệu. Thuật toán hoàn chỉnh tạo ra một siêu kết quả được yêu cầu, có nghĩa là bạn nhận được một số rác trên đầu kết quả được yêu cầu. Thuật toán âm thanh là bảo thủ hơn.
Nhà thống kê có thể nói rằng thuật toán âm thanh bị sai lệch các lỗi loại I (nó không chấp nhận các ứng cử viên chính xác), trong khi thuật toán hoàn chỉnh lại thiên về các lỗi loại II (để chấp nhận các ứng cử viên sai).