Có nghĩa gì khi nói một thuật toán là Âm thanh và Hoàn thành?


33

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 đề nghị bạn đánh giá lại câu trả lời nào bạn chấp nhận cho rằng câu trả lời sai.
BlackJack

Chỉ cần làm vậy :)
mutelogan

Câu trả lời:


49

Đâ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.


Cảm ơn. Tôi đã thực sự bối rối về những gì đúng đắn phương tiện. Tôi đã nhận được nhiều câu trả lời.
mutelogan

Hạnh phúc nếu điều đó giúp ... :)
Erik Dietrich

13
Một ví dụ sẽ là Tìm kiếm nhị phân, Đó là âm thanh, nhưng nó chưa hoàn thành. Nó không thể làm việc trên các danh sách không được sắp xếp.
Malfist

3
@Malfist nhưng không phải là danh sách 'thế giới của chương trình' được sắp xếp?
Andres

1
Một thuật toán không đúng về thuật toán trên các đầu vào không hợp lệ.
Blaisorblade

15

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:

  1. Soundness là một đảm bảo yếu. Nó không hứa rằng A sẽ chấm dứt.
  2. Soundness và Complete là các khái niệm liên quan; nguyên vẹn chúng là sự đối thoại logic của nhau. tức là Soundness nói rằng nếu một câu trả lời được trả về thì câu trả lời đó là đúng. Tính đầy đủ nói rằng một câu trả lời là đúng nếu nó được trả lại.

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ố.


Tại sao bạn lại Nhâm lâ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." có nghĩa giống như "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." Những điều này có nghĩa là điều tương tự. Đối với định nghĩa (rất ngắn gọn) của bạn về Tính đầy đủ, nó không khớp với gì trong liên kết wikipedia và bạn không trích dẫn tài liệu tham khảo nào của riêng bạn. Tôi phải nói rằng, định nghĩa của Erik thực tế hữu ích hơn. Nếu bạn là chính xác, bạn phải cung cấp bằng chứng tốt hơn và nhiều thịt hơn.
itbruce

1
Chỉ cần làm rõ, khi bạn nói "Hoàn thành nói rằng một câu trả lời là đúng nếu nó được trả lại", bạn có nghĩa là câu trả lời là "đúng" phải không?
Dois

1
Câu trả lời là đúng nếu câu trả lời có nghĩa đen giống như câu nếu câu trả lời được trả về thì đó là câu đúng. Ngoài ra, câu trả lời không thể là đúng sự thật, chỉ đúng. softwareengineering.stackexchange.com/a/311649/21277 thì đúng hơn.
Blaisorblade

2

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.


-2

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).

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

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.