Có, bạn là máy tính chính xác là tự động xác định. Các mô hình không xác định hữu ích hơn cho mục đích lý thuyết, đôi khi giải pháp xác định không rõ ràng đối với định nghĩa (hoặc nói tuyên bố vấn đề) và rất khó tìm giải pháp. Sau đó, một cách tiếp cận là đầu tiên thiết kế một mô hình không xác định có thể tương đối dễ thiết kế và sau đó cố gắng chuyển đổi nó thành mô hình xác định. Dưới đây, tôi đã cố gắng chứng minh những gì tôi muốn nói với một ví dụ. Xem xét biểu thức chính quy:
(01)*01(0 + 1)*
Bây giờ, giả sử, nếu bạn được yêu cầu vẽ DFA cho ngôn ngữ được tạo bởi RE ở trên.
Với kiến thức của tôi về thiết kế FA, tôi biết rằng (1) khi một *
món quà trong biểu thức chính quy chỉ ra tôi cần vòng lặp tương ứng trong các hoạt động nối FA (2) như a.b
có nghĩa là gì đó như : .(q0)─a→(q1)─b→(q2)
Vì vậy, với nỗ lực đầu tiên của mình, tôi sẽ vẽ một NFA như:
Nghĩ rằng đây không phải là một giải pháp xác định nhưng trông FA rất đơn giản có thể dễ dàng thiết kế bằng cách sử dụng biểu thức chính quy định. Kiểu tương tự của tôi để thể hiện sự tương đồng giữa biểu thức chính quy ở trên và NFA của tôi như sau:
- Vòng lặp ở trạng thái q 0 nên dành cho
(01)*
01
(sau (01)*
) cho(q0)─0→(q1)─1→(q2)
(0 + 1)*
đưa ra một vòng lặp tự ở trạng thái q 2 cho nhãn 0, 1
Theo sự tương tự của tôi, tôi nghĩ FA tôi đã vẽ ở trên tương đối đơn giản để rút ra từ RE đã cho. Và may mắn là trong lớp automata hữu hạn, mọi mô hình Không xác định có thể được chuyển đổi thành mô hình xác định tương đương. Chúng tôi có phương pháp thuật toán để chuyển đổi NFA thành DFA . Vì vậy, tôi có thể dễ dàng chuyển đổi NFA trên thành DFA:
Thật không may, phần này không phải lúc nào cũng có thể chuyển đổi một mô hình không xác định thành mô hình xác định, ví dụ lớp cho tự động đẩy xuống xác định là tập hợp con của lớp tự động đẩy xuống xác định " sơ đồ venn " và bạn luôn không thể chuyển đổi NPDA thành một thiết bị PDA.
Thông thường khi không thể chuyển đổi một giải pháp không xác định thành một giải pháp xác định sau đó với sự trợ giúp của giải pháp không xác định, chúng tôi xác định giải pháp xác định trong miền phụ (hoặc nói một phần miền) thay vì miền hoàn chỉnh. Hoặc chúng tôi xác định giải pháp theo một số cách khác (ví dụ: cách tiếp cận tham lam) mà khóa học có thể không cung cấp cho bạn một giải pháp tối ưu .
Đôi khi, tính không xác định là một cơ chế hiệu quả để mô tả một số vấn đề / giải pháp phức tạp một cách chính xác và hiệu quả, ví dụ, các máy không xác định có thể đóng vai trò là mô hình của thuật toán tìm kiếm và quay lui (đọc: Cách xử lý chuỗi trong mô hình không xác định bằng cách sử dụng backtrack ). Các mô hình xác định đối lập tốt hơn đại diện cho các giải pháp hiệu quả, tối thiểu hóa và ít dự phòng.
Ở đây tôi cũng muốn trích dẫn từ Wikipedia Sử dụng thuật toán không điều kiện :
Trong thiết kế thuật toán, các thuật toán không xác định thường được sử dụng khi vấn đề được giải quyết bằng thuật toán vốn đã cho phép nhiều kết quả (hoặc khi có một kết quả duy nhất với nhiều đường dẫn mà kết quả có thể được phát hiện, mỗi kết quả đều có thể được phát hiện, mỗi cách đều thích hợp hơn). Điều quan trọng, mọi kết quả mà thuật toán không xác định tạo ra là hợp lệ, bất kể lựa chọn nào thuật toán đưa ra trong khi chạy.
Một số lượng lớn các vấn đề có thể được khái niệm hóa thông qua các thuật toán không xác định, bao gồm câu hỏi chưa được giải quyết nổi tiếng nhất trong lý thuyết điện toán, P vs NP.
Như @keshlam cũng đã đề cập trong bình luận của mình : "Nondeterminism" trong thực tế được sử dụng để chỉ bất kỳ sự khó lường nào trong kết quả của một quá trình. Ví dụ, các chương trình đồng thời thể hiện hành vi không xác định - hai lần thực hiện của cùng một chương trình có cùng đầu vào có thể tạo ra kết quả khác nhau (nếu cơ chế kiểm soát tương tranh không được áp dụng). Đọc thêm về điều này trong "Hữu ích của chủ nghĩa không quyết đoán" .
Tôi cũng đề nghị bạn đọc các liên kết sau:
1. Sự khác biệt giữa tính không xác định và tính ngẫu nhiên là gì?
2. 9.2.2 Các mô hình không xác định so với xác suất: (a). Không điều kiện: Tôi không biết bản chất sẽ làm gì. (b). Xác suất: Tôi đã quan sát thiên nhiên và thu thập số liệu thống kê.
3. Lập trình không điều kiện