Tại sao NFA được gọi là Không xác định?


14

Tôi có câu hỏi [loại buồn cười] này trong đầu. Tại sao máy tự động hữu hạn không xác định được gọi là không xác định trong khi chúng tôi xác định các chuyển đổi cho đầu vào. Chà, mặc dù có nhiều chuyển tiếp và epsilon , chúng được xác định có nghĩa là máy có tính quyết định cho các chuyển đổi đó. Điều đó có nghĩa là nó mang tính quyết định.


12
Không đặc biệt như được sử dụng trong khoa học máy tính lý thuyết là khác nhau từ ngẫu nhiên.
adrianN

10
Đó là sự lựa chọn giữa các chuyển đổi không đặc thù.
Revierpost

NFA là gì? (Dành cho những người không được làm sáng tỏ trong chúng ta)
DarcyThomas

@DarcyThomas, phần giới thiệu đầu tiên tôi có là swtch.com/~rsc/regapi/regapid1.html . Đây là một bài đọc tốt, đó không phải là mục đích của bài viết để giới thiệu NFA, nhưng nó làm rất tốt khi thảo luận về các biểu thức thông thường.
tự đại diện

Câu trả lời:


22

"Xác định" có nghĩa là "nếu bạn đặt hệ thống trong cùng một tình huống hai lần, nó được đảm bảo để đưa ra lựa chọn giống nhau cả hai lần".

"Không xác định" có nghĩa là "không xác định", hay nói cách khác, "nếu bạn đặt hệ thống trong cùng một tình huống hai lần, nó có thể hoặc không thể đưa ra lựa chọn giống nhau cả hai lần".

Một máy tự động hữu hạn không xác định (NFA) có thể có nhiều chuyển tiếp ra khỏi trạng thái. Điều này có nghĩa là có nhiều lựa chọn cho những gì nó có thể làm trong tình huống đó. Nó không bị buộc phải luôn luôn chọn cùng một; trên một đầu vào, nó có thể chọn quá trình chuyển đổi đầu tiên và trên một đầu vào khác, nó có thể chọn cùng một quá trình chuyển đổi.

Ở đây bạn có thể nghĩ về "tình huống" là "trạng thái của NFA, cùng với biểu tượng nào đang được đọc tiếp theo từ đầu vào". Ngay cả khi cả hai đều giống nhau, một NFA vẫn có thể có nhiều hiệu ứng chuyển tiếp phù hợp có thể được đưa ra khỏi trạng thái đó và nó có thể chọn tùy ý nên chọn cái nào. Ngược lại, một DFA chỉ có một chuyển đổi phù hợp có thể được thực hiện trong tình huống đó, vì vậy nó không có lựa chọn nào - nó sẽ luôn tuân theo cùng một chuyển đổi bất cứ khi nào trong tình huống đó.


"nó có thể chọn tùy ý cái nào sẽ lấy." Vì vậy, về cơ bản nó có một tính chất xác suất?
Trilarion

@Trilarion, không, nó phụ thuộc vào việc nó có dẫn đến trạng thái chấp nhận hay không. Trong thực tế FA xác suất là một khái quát cho NFA.
rus9384

"Không xác định" có nghĩa là "không xác định", hay nói cách khác, "nếu bạn đặt hệ thống trong cùng một tình huống hai lần, nó có thể hoặc không thể đưa ra lựa chọn giống nhau cả hai lần". điều này có nghĩa là máy có thể chấp nhận và từ chối cùng một chuỗi trong hai trường hợp khác nhau.
Madhusoodan P

3
@MadhusoodanP Trực giác của bạn là chính xác từ những gì được viết ở đây và điều đó dẫn chúng ta đến những gì còn thiếu trong câu trả lời này: Khi phân tích NFA, chúng tôi luôn xem xét tất cả các đường dẫn thực hiện có thể . Miễn là bất kỳ đường dẫn nào trong máy đó dẫn đến trạng thái chấp nhận, chúng tôi coi đầu vào là được chấp nhận. Vì vậy, nó hoàn toàn không phải về xác suất, nó chỉ đơn giản là liệu trạng thái chấp nhận có thể đạt được hay không. Trực giác này trở nên rõ ràng hơn khi suy nghĩ về cách giảm NFA thành DFA: Chúng ta phải mô phỏng tất cả các thực thi có thể có của NFA, dẫn đến sự bùng nổ theo cấp số nhân trong quá trình xây dựng.
ComicSansMS

3
Một cách để hình dung nó là giả định rằng, trong đó có thể chọn nhiều chuyển đổi, NFA thực hiện tất cả các chuyển đổi. Bạn tạo một cấu trúc giống như cây của tất cả các trạng thái đạt được bởi một chuỗi đầu vào và nếu bất kỳ nhánh nào kết thúc ở trạng thái chấp nhận, chuỗi đó được chấp nhận. Nói cách khác, với DFA, bạn đang hỏi " trạng thái đạt được của đầu vào của tôi có phải là trạng thái chấp nhận không?", Trong khi với NFA, bạn đang hỏi "có trạng thái nào có thể đạt được bởi đầu vào của tôi là trạng thái chấp nhận không?".
Harrison Paine

8

Lấy ví dụ về máy tự động này, đó là NFA và nó chấp nhận chuỗi . Để có tính mô phạm hơn, nó chấp nhận các chuỗi kết thúc bằng 10 .011010

Ví dụ automaton, nguồn: /cs/61159/what-is-the-difference-b between-following-two-fininite-automata / 61208

Để thấy rằng chúng ta chỉ cần kiểm tra xem nó có đạt đến trạng thái chấp nhận hay không.

q01q00q11q20

Bây giờ trong đường đỏ có một khả năng, đó là khi đọc thứ hai Tôi có thể ở lại trong q 0 và sau đó ở lại q 0 khi đọc cuối cùng 0 . Automata không có bộ nhớ, vì vậy không có cách nào để 'lưu' trạng thái và kiểm tra lại sau nếu chuỗi của tôi kết thúc bằng 10 , giống như NFA này, hãy đoán xem chuỗi kết thúc bằng 10 trước khi phân nhánh đến trạng thái chấp nhận được. Chủ nghĩa không thuyết phục ở đây đang đưa ra rất nhiều sự lựa chọn và luôn luôn đưa ra những lựa chọn đúng đắn.1q0q001010

Việc xây dựng một NFA dễ dàng hơn so với việc xây dựng một DFA, điều tốt là cả hai đều tương đương nhau .


Có, tôi biết phần lý thuyết của NFA. Nhưng những gì tôi đã hỏi là mặc dù có nhiều chuyển đổi cho một ký tự đầu vào, máy có tính quyết định về tất cả các trạng thái mà nó có thể đạt được (nói bằng cách tạo chủ đề). Do đó, theo nghĩa đen là DFA. [Hoặc bạn có nghĩ rằng tôi đang hiểu sai ý nghĩa của chủ nghĩa quyết định ]
Madhusoodan P

1
Ví dụ có thể được cải thiện với một NFA phức tạp hơn một chút, vì một DFA cho cùng mục đích sẽ sử dụng cùng một số trạng thái như NFA của bạn và sẽ không đặc biệt phức tạp. Ngược lại, khớp một biểu thức chính quy phức tạp hơn có thể yêu cầu một DFA phức tạp và lộn xộn nhưng lại không quan trọng trong một NFA.
supercat

@supercat, ít nhất sẽ tốt khi thấy -transitions. ε
rus9384

1
@Aristu Nếu bạn đang triển khai NFA bằng ngôn ngữ lập trình yêu thích của mình, các chủ đề là một lựa chọn tồi tệ . Thay vào đó, bạn chỉ nên theo dõi tập hợp các trạng thái mà máy tự động "có thể ở" sau khi đọc từng ký tự đầu vào. Mã kết quả sẽ nhanh như việc triển khai các DFA.
David Richerby

1
ε

5

Hàm chuyển đổi của NFA chỉ định các chuyển đổi được phép tại bất kỳ thời điểm nào. Có thể có nhiều hơn một lựa chọn và NFA chọn một quá trình chuyển đổi không nhất định với mục tiêu cuối cùng sẽ đạt đến trạng thái chấp nhận.

Có lẽ bạn nên đợi cho đến khi bạn tìm hiểu về máy Turing không điều kiện. Nondeterminism có nghĩa là điều tương tự trong cả hai trường hợp.


bạn có thể vui lòng nhấn mạnh rằng "một quá trình chuyển đổi không đặc biệt". Và cũng xin vui lòng xem lại câu trả lời của tôi
Madhusoodan P

Tôi nghĩ rằng cả hai câu trả lời của chúng tôi đều không tốt, mặc dù trực giác của bạn là âm thanh.
Yuval Filmus

3

Bắt đầu với một Automaton hữu hạn. Nó có trạng thái và trạng thái chấp nhận và chuyển tiếp.

Bây giờ, cung cấp cho nó nhiều hơn một quy tắc chuyển đổi của mỗi trạng thái và nói rằng nó chấp nhận nếu tồn tại một tập hợp các quy tắc chuyển đổi được chọn sau khi thực tế dẫn đến trạng thái chấp nhận được đưa ra một chuỗi đầu vào.

Khi bạn có chuỗi đầu vào của mình, sẽ có một tập hợp chuyển tiếp cụ thể và trạng thái nó đi qua (mỗi lần một) để chấp nhận chuỗi đó. Nhưng quá trình chuyển đổi nó chọn chỉ được chọn ở cuối chuỗi . Trong khi chuỗi đang được đọc, đường dẫn nào sẽ không được xác định.

Nó không mang tính quyết định. Nó sẽ chọn đường dẫn của nó thông qua biểu đồ sau khi bạn đưa ra toàn bộ vấn đề, chứ không phải khi nó đọc đầu vào.


Bây giờ, chúng tôi chính thức hóa điều này khác với thử nghiệm suy nghĩ này, nhưng điều này mang lại cho bạn động lực tại sao nó có tên đó.

Điều này giải thích làm thế nào nó có tên ở nơi đầu tiên. Có, bạn có thể mô hình hóa NDFA theo cách hoàn toàn xác định, nhưng tên bị dính . Một khi bạn đã gọi một cái gì đó Bob, có một chi phí liên lạc để đổi tên nó thành một cái gì đó khác vì không ai biết bạn đang nói gì khi bạn gọi nó là Alice.


Đúng! Tôi đồng ý với lời giải thích của bạn về NFA. Nhưng câu hỏi của tôi là về lý do tại sao nó không mang tính quyết định mặc dù tập hợp các trạng thái được xác định cho một đầu vào duy nhất
Madhusoodan P

@MadhusoodanP Nó được gọi là không xác định vì cách nó được phát minh / hình dung. Và tên là dính, ngay cả sau khi chúng tôi xác định nhiều cách xác định đầy đủ để mô hình hóa nó.
Yakk

1

Từ wikipedia , cách tốt nhất để suy nghĩ về điều này là bắt đầu với các máy trạng thái hữu hạn xác định (DFA). Đối với DFA, mỗi chuyển đổi được xác định duy nhất bởi trạng thái hiện tại và ký hiệu đầu vào được xử lý. Máy trạng thái hữu hạn không điều kiện (NFA) chỉ đơn giản là những gì bạn nhận được khi bạn nới lỏng quy tắc xác định này để cho phép chuyển đổi không được xác định duy nhất. Đó là những gì bạn nhận được khi xóa quy tắc xác định khỏi DFA.


Nó phức tạp hơn một chút, vì thuyết không điều kiện cũng là một điều kiện chấp nhận cụ thể.
Yuval Filmus

1

NFA và DFA đều được sử dụng để (trong số những thứ khác) nhận ra các chuỗi nhất định.

Máy tự động hữu hạn không xác định hoạt động giống như nó có ảnh hưởng đến các quyết định của nó - nó có thể "chọn" để đi theo một con đường, hoặc không.

Ví dụ NFA

Trên hình ảnh ở trên, khi chúng ta đang xử lý chuỗi "00111", lưu ý rằng khi gặp "1" đầu tiên, có hai cách có thể làm theo. Người ta có thể ở "p" hoặc đi đến "q". Nếu automata chuyển sang "q", nó sẽ không chấp nhận chuỗi (vì không có cạnh nào xuất hiện từ "q"). Nhưng chuỗi này có thể được tự động chấp nhận bằng cách đi đến "q" chỉ với 1 cuối cùng, trong khi vẫn ở "p" cho mọi thứ khác (và đó là những gì đang xảy ra).

NFA làm cho nó trông giống như automata "biết" những gì phía trước, và chọn theo đó.

Tất nhiên là không rồi. DFA và NFA tương đương về sức mạnh (bạn có thể giảm NFA thành DFA và làm cho DFA (có thể) đơn giản hơn khi sử dụng NFA), nhưng NFA rất hữu ích, vì nó cho phép xác định cùng ngôn ngữ với DFA trong khi vẫn giữ đồ thị nhiều ngắn hơn và dễ đọc hơn

Không có gì ngẫu nhiên trong đó. Phần không xác định đặt trọng tâm vào thực tế là có một số "sự lựa chọn", nhưng sự thật là automata không đưa ra bất kỳ quyết định nào.


0

Vâng, đây là sự pha trộn của một số nội dung từ cuốn sách [Giới thiệu về ngôn ngữ chính thức và Automata của Peter Linz 4E] và sự hiểu biết của tôi.

Hãy xem xét một chương trình chơi trò chơi trong đó máy cần đưa ra quyết định cho bước tiếp theo [nói cho tic-tac-toe]. Vì có thể có nhiều di chuyển, chúng tôi nhất định chọn từng di chuyển và đánh giá di chuyển và lựa chọn cho di chuyển tốt nhất. Mặc dù quá trình lựa chọn mang tính quyết định và có nhiều động thái khả thi, bước cuối cùng được thực hiện là một bước duy nhất và được chọn là nước đi tốt nhất trong khi che giấu tất cả các tính toán di chuyển đã cố gắng từ đối thủ. [Ở đây chúng tôi giả định rằng quá trình đánh giá của từng nước đi có thể bị ẩn khỏi đối thủ].

Do đó, chỉ có một lựa chọn được đưa ra và đối thủ được đưa ra một ảo ảnh sao cho việc di chuyển là không xác định.

Chà, nếu bạn chưa bị thuyết phục bằng cách hỏi rằng nước đi tốt nhất là sản phẩm của một số tính toán xác định thì bạn phải xem xét cỗ máy thực hiện các bước di chuyển hoàn toàn ngẫu nhiên (có thể là máy mất nhưng đó là NFA).


1
Một cách khác để đặt điều này: với đối thủ , sự lựa chọn của bạn là không xác định. Khi mô hình hóa hệ thống theo quan điểm của đối thủ, di chuyển của bạn là một lựa chọn không xác định, trừ khi đối thủ đã tìm ra quy trình xác định đằng sau nó.
Revierpost

@reinierpost chính xác những gì tôi muốn nói
Madhusoodan P

Một ví dụ thú vị hơn có thể là một trò chơi chuyển động có thông tin hạn chế (ví dụ như kiểu "cảnh sát và tên cướp"). Một người chơi di chuyển một tên cướp xung quanh một mê cung trong khi người chơi khác di chuyển cảnh sát. Bất cứ lúc nào cảnh sát có thể nhìn thấy một tên cướp, trạng thái của tên cướp sẽ là vị trí của nó, nhưng bất cứ khi nào cảnh sát không nhìn thấy tên cướp, tên cướp có thể chuyển sang bất kỳ ô vuông nào gần vị trí của nó và cảnh sát có thể Không thấy tại thời điểm đó.
supercat

@supercat Đẹp một, nhưng quá trình chuyển đổi luôn là một trạng thái duy nhất và nếu bạn che giấu tính toán của nước đi tốt nhất thì có vẻ như không xác định
Madhusoodan P
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.