Các từ có cùng sản phẩm liên kết phải và trái


9

Tôi đã bắt đầu nghiên cứu automata không xác định bằng cách sử dụng cuốn sách Hopcroft và Ullman . Tôi bị mắc kẹt trong một vấn đề mà tôi thấy rất thú vị:

Đưa ra một máy tự động hữu hạn không xác định chấp nhận tất cả các chuỗi có cùng giá trị khi được đánh giá từ trái sang phải từ phải sang trái bằng cách nhân theo bảng sau:

×abcaaacbcabcbca

Vì vậy, nếu chúng ta có chuỗi , sản phẩm từ trái sang phải là (a \ lần b) \ lần c = a \ lần c = c và sản phẩm từ phải sang trái là a \ lần (b \ lần c) = a \ lần b = a( a × b ) × c = a × c = c a × ( b × c ) = a × b = aabc
(a×b)×c=a×c=c
a×(b×c)=a×b=a

Vì vậy, abc không nên được chấp nhận cho automata. Đối với tôi rõ ràng là bất kỳ chuỗi aa hoặc bb hoặc cc là một chuỗi có thể chấp nhận được (đánh giá bên phải và bên trái của họ hoạt động trên cùng một chuỗi một phần). Thật dễ dàng để đưa ra một NFA mô tả đánh giá từ trái sang phải nhưng vấn đề là nếu máy cố gắng tính toán đánh giá từ phải sang trái tôi nghĩ rằng nó cần phải biết độ dài của chuỗi (vì vậy cần có bộ nhớ vô hạn).

Vậy làm thế nào một automata không xác định có thể đánh giá từ phải sang trái để so sánh với đánh giá từ trái sang phải?

Câu trả lời:


6

Thủ thuật đầu tiên ở đây là nghĩ về bảng nhân như bảng chuyển tiếp của máy tự động với mỗi trạng thái đại diện cho một chữ cái trong bảng nhân của bạn, nhưng không lo lắng về việc chấp nhận. Vì vậy, các chữ cái ở bên trái và trong phần thân của bảng thực sự là các trạng thái - sẽ chính xác hơn nếu viết chúng là , nhưng tôi sẽ không. Các chữ cái trên đầu là đầu vào.q a , q b , q cAqa,qb,qc

Sau đó, xây dựng máy tự động (" " cho chuyển vị) để nhân ngược bằng cách hoán vị : T AATTA

ATabcaacbbaacccba

Vì vậy, đưa bạn đến trạng thái và tương tự chuyển sang trạng thái của , như bạn lưu ý.c A T ( c b a ) a A TA(abc)cAT(cba)aAT

Tuy nhiên, giả định rằng bạn đang đi từ phải sang trái và chúng tôi vẫn muốn đi từ trái sang phải. Vì vậy, mẹo thứ hai là đảo ngược máy tự động (không phải là phép nhân, thứ sẽ khiến chúng ta quay lại khi chúng ta bắt đầu), bằng cách đảo ngược tất cả các mũi tên, dẫn đến máy tự động không xác định được đưa ra bởi bảng chuyển đổi bên dưới, với các tập hợp con được biểu thị bằng các chữ cái được nối để giữ cho gà gãi xuống, vì vậy thực sự là . (hy vọng tôi hiểu tất cả - có vẻ hiệu quả).A T R a c { a , c }ATATRac{a,c}

ATRabcaabbcbcaccabababbcacbccacabcacabcabbcabcabcabcabc

Bạn có thể diễn giải điều này như một máy tự động không xác định chỉ có ba hàng phía trên dòng hoặc một phiên bản xác định có tất cả 8 hàng.

Cuối cùng, cỗ máy giải quyết vấn đề là máy tự động sản phẩm chéo của và ban đầu , đó là để thực hiện hành vi giao nhau của hai automata (chúng tôi không cần bất kỳ hơn). có các trạng thái là các cặp như . Hàm chuyển đổi chạy độc lập và . Một trạng thái bắt đầu duy nhất đi vào dưới đầu vào , vào dưới đầu vào , v.v. Một T R A × A T R A T A × A T Rmột , một c Một Một T R1 , 1 một , một một b , b bAATRA×ATRATA×ATRa,acAATR1,1a,aab,bb

Các trạng thái chấp nhận trong phiên bản không xác định là v.v ... Trong phiên bản xác định, các trạng thái chấp nhận là các cặp trong đó thành phần đầu tiên là bộ thành phần thứ hai, chẳng hạn như hoặc .một , một b , b c a,aa,ab,bc

25 = 3 8 + 1 10 = 3 3 + 1A×ATR tăng và xác định như hiển thị có trạng thái, vì vậy hãy tha thứ cho tôi nếu tôi không viết chi tiết. Nhưng phiên bản không xác định chỉ có trạng thái.25=38+110=33+1


Cảm ơn, nó thực sự đã giúp tôi câu trả lời của bạn để hiểu ý tưởng đằng sau sự không xác định và "sự đảo ngược" của một automata. Tôi đã gặp vấn đề trong việc hiểu các khái niệm này khi sử dụng cuốn sách Hopcroft, hiện tại tôi đang sử dụng cuốn sách của Sipser "Giới thiệu về Lý thuyết tính toán".
Ông Ariel

Hãy xem xét đầu vào . di chuyển đến sau đầu vào , rồi đến dưới đầu vào , vì vậy không được chấp nhận, nhưng nên được? 1 , 1 b , b b c , một b mộtba1,1b,bbc,aba
hỏa táng

8

L L R L() Nếu là ngôn ngữ thông thường, thì , ngôn ngữ bao gồm đảo ngược tất cả các từ trong , cũng là ngôn ngữ thông thường. Hãy coi đây là một bài tập.LLRL

Làm thế nào điều này giúp chúng ta giải quyết vấn đề? Đặt là các ngôn ngữ bao gồm tất cả các chuỗi ước lượng cho khi đánh giá từ trái sang phải. Ngôn ngữ bạn quan tâm là Điều này cho thấy rằng nếu bạn biết cách chứng minh , thì bạn có thể tạo NFA cho ngôn ngữ được đề cập.La,Lb,Lca,b,c

(LaLaR)(LbLbR)(LcLcR).
()

Trên thực tế, nếu bạn sử dụng ý tưởng về bằng chứng của , thì có lẽ bạn chỉ cần tiếp tục và xây dựng máy tự động. Vì vậy, hãy xem xét điều này. Cụ thể, chúng ta hãy thử xây dựng một NFA cho , ngôn ngữ của tất cả các chuỗi đánh giá đến khi được đánh giá từ phải sang trái.()LaRa

Ý tưởng là thế này. Giả sử rằng chữ cái đầu tiên bạn nhìn thấy là . Sau đó, phần còn lại của chuỗi phải ước tính cho (vì ngụ ý ). Lý luận tương tự áp dụng khi chữ cái đầu tiên là . Tuy nhiên, khi chữ cái đầu tiên là , phần còn lại có thể đánh giá là hoặc hoặc là null. Với một NFA, chúng tôi có thể đoán (và sau đó xác minh dự đoán của chúng tôi).bbbx=ax=bcaab

Gợi ý này sẽ cung cấp cho bạn đủ để suy nghĩ và hy vọng giải quyết vấn đề.


Cách tốt đẹp để chứng minh điều đó với công thức - upvote cho điều đó. Đối với ý tưởng "đoán và xác minh không xác định" thay thế, điều đó thường ổn đối với một bằng chứng, nhưng thực sự khá khó để thực hiện, như các vấn đề yêu cầu. Tôi nghĩ rằng có rất nhiều chi tiết bị thiếu ở đây, chẳng hạn như làm thế nào để theo dõi chuỗi hình thành mặt sau.
David Lewis

@David, các chi tiết bị thiếu trên mục đích.
Yuval Filmus

@Yuval - anh ấy không nói đó là bài tập về nhà - chúng tôi tin tưởng mọi người ở đây, đúng không? Tôi cũng nghĩ rằng bằng chứng tồn tại này sẽ dẫn đến một cỗ máy khá lớn, có thể lớn hơn nhiều so với mức cần thiết.
David Lewis

@DavidLewis: Gilles đã đưa ra một câu trả lời đầy đủ hơn cho thấy NFA thực sự không quá lớn; nondeterminism làm điều đó cho bạn. DFA tương ứng có thể là rất lớn, mặc dù.
Raphael

@MohamedAbbas Có lẽ, tôi không định kiểm tra.
Yuval Filmus

6

Dễ thương.

Đầu tiên, xây dựng một máy tự động tính toán sản phẩm từ trái sang phải. Dễ dàng! Đặt một chuyển đổi bất cứ khi nào . Có ba trạng thái đại diện cho ba sản phẩm có thể. Bắt đầu ở trạng thái thứ tư với cho tất cả . Trạng thái cuối cùng là khi và chỉ khi tích của từ đầu vào từ trái sang phải là .xyzxy=z{a,b,c}11xxxxx

Bây giờ, hãy xây dựng một máy tự động tính toán sản phẩm từ phải sang trái. Điều này sẽ không xác định. làm sao chúng ta làm việc đó bây giờ? Đơn giản để đi theo hướng khác, chỉ cần đảo ngược mọi thứ : mũi tên và hướng của sản phẩm.

Trong trường hợp chúng tôi đã có trước khi , bây giờ chúng ta hãy : khi chúng ta tiêu thụ từ từ trái sang phải, chúng ta đi từ một sản phẩm sang yếu tố bên tay phải. Hay nói cách khác, .xyxyxyxyxyyx

Thêm một nút bị ngắt kết nối vì lợi ích của từ trống. Tất cả các nút là ban đầu.1

Bây giờ chúng ta cần tính toán cả hai đường dẫn với nhau, vì vậy chúng tôi lấy sản phẩm của hai automata: iff và . Đặt bốn trạng thái là ban đầu và bốn trạng thái là cuối cùng. Một từ được công nhận bởi thiết bị tự động không xác định này, sản phẩm của nó từ trái sang phải và sản phẩm của nó từ phải sang trái là cùng .(x1,x2)y(z1,z2)x1yz1x2yz2(1,x)(x,x)x


Tôi có một chút rắc rối mò mẫm điều này. Bạn không phải xác minh rằng dẫn đến tập trạng thái hữu hạn? IAC, nó không chỉ đơn giản như "đảo ngược mọi thứ", vì bạn vẫn phải tiêu thụ từ trái sang phải, mà nhân lên từ phải sang trái, và tôi không chắc bạn đã làm điều đó. xyyx
David Lewis

@DavidLewis Tập trạng thái là hữu hạn, tôi đã xác định nó là . Tôi đã đảo ngược thứ tự của phép nhân (bỏ thêm lỗi chính tả). {overleftarrowa,b,b,1}
Gilles 'SO- ngừng trở nên xấu xa'

5

Có vẻ như vấn đề chính của bạn là sử dụng thuyết không điều kiện, vì vậy hãy để tôi giải thích về điều đó.

Ý tưởng cơ bản mà những người khác sử dụng là một cỗ máy không xác định có thể đoán được kết quả cuối cùng.

Hãy để chúng tôi xem xét ví dụ nhỏ của bạn và ý tưởng xây dựng của Gilles. Máy tính tự động "tính toán" sản phẩm từ phải sang trái đoán kết quả ngay từ đầu và xác minh nó. Vì vậy, có ba khả năng:abc

  • Đoán : Vì symol đầu tiên là , sản phẩm rl của phải là hoặc . a b c a baabcab
    • Đoán : Vì ký hiệu thứ hai là , ký hiệu cuối cùng phải là . b babb
      • (Đoán :) Đó là , vì vậy đừng chấp nhận.cbc
    • Đoán : Vì ký hiệu thứ hai là , ký hiệu cuối cùng phải là . b cbbc
      • (Đoán :) Nó thực sự là , vì vậy chúng tôi chấp nhận.ccc
  • Đoán : Vì symol đầu tiên là , điều này là không thể, vì vậy đừng chấp nhận.aba
  • Đoán : Vì symol đầu tiên là , sản phẩm rl của phải làa b c ccabcc
    • (Đoán :) Vì ký hiệu thứ hai là , ký hiệu cuối cùng phải làb acba
      • (Đoán :) Đó là , vì vậy đừng chấp nhận.cac

Như bạn có thể thấy, NFA có thể đoán và kiểm tra mọi tính toán từ dưới lên có thể . Bởi vì ngôn ngữ được chấp nhận được định nghĩa là tập hợp các chuỗi được chấp nhận bởi ít nhất một lần chạy , tất cả các lần chạy không chấp nhận trên đầu vào đều bị bỏ qua; NFA "luôn luôn đoán đúng".

Bây giờ thật dễ dàng để NFA này nhớ lựa chọn đầu tiên của mình cho đến khi kết thúc. Nếu nó chấp nhận, nó có thể so sánh biểu tượng đã nhớ với sản phẩm lr (xác định) thu được song song (cách giao tiếp ngôn ngữ liên quan đến NFA chắc chắn được bao phủ trong Ullman / Hopcroft và bất kỳ sách giáo khoa cơ bản nào khác).


Ý tưởng đoán một chuỗi là kỳ lạ đối với tôi, nhưng tôi đã đọc cuốn sách của Sipser và tôi nghĩ đó là một lời xin lỗi tốt hơn cho những người mới như tôi trong lý thuyết tính toán.
Ông Ariel

Hãy suy nghĩ về việc đoán như là giả mạo với đầu vào giả định. Nhưng cần phải cẩn thận với các chiến lược đoán - đảm bảo rằng mọi lưu trữ cần thiết để đoán được giới hạn đồng đều cho tất cả các luồng rẽ nhánh, nếu không bạn sẽ không có máy tự động hữu hạn nữa. Ngoài ra, cần một đồng phục ràng buộc vào số lượng các chủ đề rẽ nhánh hoạt động. Tôi nghĩ rằng mô tả của Raphael ở đây hoạt động, nhưng nó cần được đề cập ít nhất.
David Lewis
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.