BÁO CÁO MÔN HỌC LÝ THUYẾT OTOMAT VÀ NGÔN NGỮ HÌNH THỨC tên đề tài máy turing

65 29 0
BÁO CÁO MÔN HỌC LÝ THUYẾT OTOMAT VÀ NGÔN NGỮ HÌNH THỨC tên đề tài máy turing

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC  BÁO CÁO MÔN HỌC LÝ THUYẾT OTOMAT VÀ NGƠN NGỮ HÌNH THỨC Tên đề tài: Máy Turing Nhóm thực hiện: Nhóm Hà Nội, 05 - 2019 Mục lục Lời nói đầu……………………………………………………………3 Chương 1: Kiến thức bản…………………………………… … 1.1 Mở đầu………………………………………………………………… 1.2 Mơ hình định nghĩa máy Turing………………………………… 1.3 Biểu diễn máy Turing………………………………………………… 1.4 Thiết kế máy Turing………………………………………………… 13 1.5 Ngơn ngữ đốn nhận “Hàm tính được”…………………………….15 1.6 Máy Turing không đơn định……………………………………….… 20 1.7 Luận đề Church – Turing………………………………………….… 20 1.8 Sự tương đương văn phạm loại máy Turing…………….….21 1.9 Otomat tuyến tính giới nội văn phạm cảm ngữ cảnh………….… 25 1.10 Bài toán dừng máy Turing……………………………………… 32 1.11 Lớp toán NP đầy đủ……………………………………….… 37 Chương 2: Ứng dụng máy Turing………………………………43 2.1 Ứng dụng máy Turing việc đánh giá độ phức tạp thuật toán………………………………………………….………………………… 43 2.2 Ứng dụng máy Turing việc thay phần cứng phần mềm…………………………………………………………………………… 45 Chương 3: Các thuật toán…………………………………………….47 3.1 Các thuật toán liên quan đến máy Turing………………………………47 3.2 Các thuật tốn chương trình học………………………………….50 Kết luận………………………………………………………………65 LỜI NÓI ĐẦU Năm 1936, chiến tranh lần nổ bầu trời châu Âu, nhà toán học người Anh, Alan Turing, phát minh máy tính số đại Ý tưởng Turing máy tính số có ý nghĩa cịn quan trọng nhiều so với việc xây dựng máy tính vật lý cụ thể Cơng cụ thử nghiệm Turing, ơng gọi "máy tính đa năng", máy đơn giản Cơ bản, có khả đọc ghi ký hiệu hay cuộn giấy dài Nó thực hành động lúc, đọc hay ghi ký hiệu, nhớ việc làm, với thời gian khơng giới hạn thực vô số hành động Turing tạo "một máy tái cách xác hành vi máy tính khác" Bất kỳ tính tốn nào, dù phức tạp đến đâu, phân thành loạt bước đơn giản riêng rẽ – thuật tốn hay chương trình – thực với máy Turing Điều có ý nghĩa: "Về ngun tắc tất máy tính số tương đương nhau; máy đếm, ghi nhận làm theo câu lệnh thực chức tính toán nào" Yêu cầu thực tế máy tính đa kích thước nhớ tốc độ mà thực phép tính truyền kết Với nhớ đủ lớn tốc độ đủ nhanh, phát minh Turing hàm ý máy tính đơn với chương trình phần mềm đảm đương việc thực tất máy tính vật lý khác giới Bỏ qua yếu tố phần cứng cơng nghệ hành tốn giải máy tính phải có thuật tốn để xử lý theo Alan Turing, tất thuật toán mơ tả lại mơ hình máy Turing, việc đánh giá thuật toán máy Turing cho kết xác cơng Vì nhóm chúng em chọn đề tài báo cáo môn học lý thuyết Otomat ngôn ngữ hình thức là: Máy Turing Trong báo cáo gồm có phần: - Phần kiến thức xung quanh máy Turing - Phần ứng dụng máy Turing - Phần thuật toán máy Turing thuật tốn chương trình học Nhóm chúng em gồm có thành viên: - Bùi Tiến Tùng (Đảm nhiệm cơng việc tìm tài liệu, viết slide, thuyết trình, hỗ trợ code - Phạm Việt Dũng (Đảm nhiệm cơng việc code thuật tốn liên quan đến máy Turing - Vũ Mạnh Quang (Đảm nhiệm công việc code thuật tốn liên quan đến máy Turing - Phan Thanh Dinh (Đảm nhiệm cơng việc code thuật toán liên quan đến 14 thuật toán - Hồng Bảo Linh (Đảm nhiệm cơng việc tìm tài liệu, viết báo cáo, hỗ trợ code) Với mục đích nghiên cứu, tìm hiểu, tập lớn cịn có nhiều thiếu sót nhiều phần cịn chưa đề cập đầy đủ Vì vậy, nhóm chúng em mong muốn góp ý chân thành giáo CHƯƠNG 1: KIẾN THỨC CƠ BẢN 1.1 Mở đầu Khi thiết kế cài đặt phần mềm tin học cho vấn đề đó, ta cần phải đưa phương pháp giải mà thực chất thuật toán giải vấn đề Rõ ràng rằng, khơng tìm phương pháp giải khơng thể lập trình Chính thế, thuật tốn khái niệm tảng hầu hết lĩnh vực tin học Ta hiểu khái niệm thuật toán sau: Nếu cho trước toán cách giải tốn phân định thành số hữu hạn bước, có kết thúc cuối đạt kết mong muốn gọi thuật toán Về mặt lịch sử, năm 30 kỷ trước, khoa học công nghệ phát triển, nhân loại nêu nhiều toán mà khơng tìm thấy lời giải Có nghĩa khơng tìm thuật tốn để giải chúng Người ta phải tìm cách định nghĩa xác khái niệm thuật tốn Năm 1936, Alan Turing đưa cơng cụ tốt để mơ tả thuật tốn mà ngày người ta gọi máy Turing Để ghi nhớ công lao này, Hội Tin học Mỹ (ACM) đặt giải thưởng Turing tin học Cho đến nay, giải thưởng Turing giải thưởng tin học lớn giới Tiếp theo Turing, số nhà khoa học khác đưa cơng cụ xác hố khái niệm thuật tốn Đó khái niệm hàm đệ quy, thuật toán Marcop, văn phạm sinh N Chomsky Những khái niệm sở phát triển việc nghiên cứu ứng dụng thuật toán Mặt khác nhờ khái niệm này, người ta xác định tốn khơng thể giải thuật toán A Turing đề xuất khái niệm máy Turing nhằm xác hố khái niệm thuật tốn Thực tế chứng tỏ máy Turing cơng cụ tốt để mơ tả thuật tốn Trải qua nhiều thập niên, lý thuyết máy Turing phát triển khơng ngừng đóng góp cơng sức nhiều nhà khoa học, có cơng trình tảng Hartmanis, Lewis, Stearns, Minsky, Blum, Hopcroft, Ullman Thực chất, máy Turing mơ hình máy Nó phân rã tồn q trình hoạt động thành bước thao tác đơn giản Bản thân máy Turing mơ hình khái qt đơn giản mơ hình hố q trình tính tốn Máy Turing mơ hình tốn học cho máy tính tổng quát, tảng q trình xử lý máy tính đại Nói cách khác, máy Turing mơ hình tất khả tính tốn máy tính, nghĩa thực tính tốn máy tính Ngày nay, máy Turing coi mơ hình tốn học thích hợp để diễn tả khái niệm thuật tốn nhờ đó, khái niệm "sự tính được", "giải được" hay tính “quyết định” xác định cách hình thức 1.2 Mơ hình định nghĩa máy Turing Máy Turing MT gồm điều khiển với tập hữu hạn thạng thái Q đầu đọc/ghi (R/W), chuyển động băng vơ hạn hai phía Băng chia thành ô, ô chứa ký hiệu thuộc bảng ký hiệu hữu hạn , bao gồm ký hiệu trắng B (Blank) Máy MT có bảng chữ vào ,    B   Tại thời điểm bắt đầu hoạt động, liệu vào MT dãy ký tự thuộc , ghi liền băng, cịn lại băng ghi ký hiệu trắng B, đầu đọc nhìn ký tự bên trái dãy ký tự vào điều khiển trạng thái khởi đầu q0 sau chuyển sang trạng thái Ví dụ mơ tả hoạt động máy Turing hình Hình – Mơ tả máy Turing Mỗi bước chuyển máy Turing, phụ thuộc vào ký hiệu đầu R/W đọc từ băng liệu trạng thái điều khiển, máy thực bước sau: Ghi ký hiệu băng ô duyệt (nghĩa thay ký hiệu đọc băng ký hiệu đó) Dịch chuyển đầu R/W (sang trái (L), sang phải (R) đứng yên ()) Chuyển sang trạng thái Như vậy, băng xem vừa kênh vào / vừa nhớ vô hạn tiềm Những khác máy Turing loại ơtơmát khác mơ tả vắn tắt sau Một ơtơmát hữu hạn có nhớ xác định tập trạng thái hữu hạn, băng vào không dùng nhớ bổ sung Trong ôtômát đẩy xuống, việc nhận thông tin nhớ ngồi bị hạn chế Do đó, rõ ràng máy Turing tổng quát mơ hình tính tốn khác mà ta nghiên cứu Việc khẳng định máy Turing mơ hình toán học đủ tổng quát cho khái niệm trực giác tính hiệu giải thường gọi luận đề Church, đề cập phần sau Một cách hình thức, ta định nghĩa máy Turing sau: Định nghĩa 1: Máy Turing hệ thống gồm thành phần MT = (Q, ∑, , , q0, B, F), đó:  Q: tập khác rỗng, hữu hạn trạng thái  : tập khác rỗng, hữu hạn ký tự phép viết băng  B: ký hiệu thuộc , ký hiệu trắng (Blank) băng  ∑: tập ký tự đầu vào tập , B    : hàm chuyển: Q    Q    {L, R, } Q    ^ (Q    {L, R, }) (đơn định) (đa định) Trong đó, L R biểu diễn “trái” hay “phải” hướng di chuyển đầu đọc  q0  Q trạng thái bắt đầu  F  Q tập trạng thái kết thúc Lưu ý: + () hàm phận, khơng xác định số phần tử Q   + Dãy ký tự xem kết tính tốn (xâu đốn nhận được) MT chuyển từ trạng thái bắt đầu đạt tới trạng thái kết thúc 1.3 Biểu diễn máy Turing Máy Turing mơ tả theo ba cách: (i) (ii) (iii) 1.3.1 Các mô tả trạng Bảng chuyển trạng thái Biểu đồ (đồ thị) chuyển trạng thái Biểu diễn mô tả thời Một ảnh chụp (Snapshot) hoạt động MT sử dụng để mơ tả máy Turing Những ảnh mơ tả thời MT Định nghĩa 2: Một mô tả trạng (thể hiện) (ID) máy Turing MT dãy  q , q trạng thái thời MT;    * nội dung có băng, tính từ đầu băng (những ký hiệu khác B) ký hiệu khác B (Blank) bên phải băng đầu đọc nhìn ký tự bên trái  Giả sử ký hiệu đầu R/W a, ký hiệu ,  dãy ký hiệu bên trái a Nếu  =  ký hiệu đầu đọc B Ví dụ Xét thể MT cho hình Hình – Một mơ tả tức thời máy Turing Ký hiệu đầu R/W a1 trạng thái thời MT q2 Những ký hiệu khác B dãy a4a1a2a3 ghi bên trái q2 ký hiệu khác dấu B bên phải a1 a2a4a3 Vậy mô tả trạng MT Hoạt động máy Turing M Tương tự ôtômát đẩy xuống, hàm chuyển MT thay đổi trạng thái đọc ký hiệu băng liệu mơ tả trạng thay đổi theo Tại bước, máy MT trạng thái q, đầu đọc nhìn ký tự s, hoạt động máy phụ thuộc vào chuyển xác định hàm chuyển () Hoạt động bao gồm việc ghi ký tự đè lên ký tự mà đầu đọc nhìn, chuyển đầu đọc sang phải hay sang trái ô, đồng thời điều khiển chuyển sang trạng thái Phép chuyển thể MT định nghĩa sau: Định nghĩa 3: Giả sử (q, xi) = (p, y, L) x1 x2 xi-1 q xi xn mô tả thời ID MT Sau xử lý xi MT chuyển sang thể x1 x2 xi-2 p xi-1 y xi+1 xn - Nếu i > biến đổi trạng MT viết sau: x1 x2 xi-1 q xi xn ⊢M x1 x2 xi-2 p xi-1 y xi+1 xn - Nếu i - = n xi B - Nếu i =1 khơng có ID kế tiếp, nghĩa đầu đọc không phép vượt qua cận trái băng + Tương tự, (q, xi) = (p, y, R) thể MT biến đổi sau: x1 x2 xi-1 q xi xn ⊢M x1 x2 xi-1 y p xi+1 xn + Trường hợp (q, xi) = (p, y, ) thực sau: x1 x2 xi-1 q xi xn ⊢M x1 x2 xi-1 p y xi+1 xn 1.3.2 Biểu diễn đồ thị chuyển trạng thái Máy Turing MT biểu diễn đồ thị định hướng gắn nhãn, + Tập đỉnh tập trạng thái + Từ đỉnh qi có cung nối với qj gắn nhãn (, , ) (qi , ) = (qj , , ) + Đỉnh bắt đầu ứng với trạng thái bắt đầu, có mũi tên vào đỉnh kết thúc đánh dấu hai vòng tròn bao Ví dụ Cho máy MT biểu diễn đồ thị chuyển trạng thái hình 8.3, xác định dãy tính tốn MT để xử lý đầu vào 0011 Hình – Đồ thị chuyển trạng thái MT 10 Var i : integer; q : Q; q = q0; For i =1 to length() q = (q, [i]); Accepted = q F; } Ví dụ minh họa 3.2.2 NFA đốn nhận xâu Phát biểu toán: Đầu vào xâu NFA có sẵn, ta tiến hành kiểm tra xem xâu đầu vào có đốn nhận NFA hay khơng, đốn nhận, kết trả “Accept”, ngược lại, kết trả “Reject” Input: NFA, xâu Output: Accept/ Reject Ý tưởng Hoạt động đoán nhận từ  = x1x2 … xn NFA mơ tả sau:  Khi bắt đầu làm việc máy trạng thái ban đầu q0 đầu đọc nhìn vào kí tự xâu x1 Trạng thái q0 tác động x1 chuyển thành trạng thái tập trạng thái {q1} = (q0, x1) đầu đọc dịch chuyển sang ô  Tiếp tục tác động kí tự x ơtơmat chuyển từ trạng thái tập {q1} sang trạng thái tập {q2} = (q1, x2) đầu đọc tiếp tục dịch chuyển Quá trình lặp lại đầu đọc chuyển đến cuối xâu, tác động xn ôtômat chuyển từ trạng thái {qn-1}sang trạng thái {qn} = (qn1, xn) ôtômat dừng  Nếu qn  F ≠  ta gọi ơtơmat đốn nhận xâu  ngược lại Thuật toán Boolean Accepted(M: NFA; : string) { Var i: integer; q : Q; S = {q0}; For i=1 to length() S = ∪q ∈ S (q ,[i]) ; 51 Accepted = S  F  ; } Ví dụ minh họa 3.2.3 Convert NFA to DFA Phát biểu toán: Cho NFA, xây dựng DFA đốn nhận ngơn ngữ trùng với lớp ngơn ngữ mà NFA đốn nhận (NFA chứa cung rỗng khơng có cung rỗng) Input: NFA Output: DFA Ý tưởng Để tổng quát, ta xây dựng DFA với lớp NFA có cung rỗng (cung ɛ) Nhắc lại kiến thức bao đóng : xây dựng hàm tính bao đóng Procedure _closure(S) { Var stack : STACK; push(S, stack); (S) = S; While !empty(stack) { pop(stack, q); For với q’ = (q, ) if q’  stack then { push(q’, stack); //bổ sung q’ vào Stack (S) = (S)  {q’}; //bổ sung q’ vào (S) } } } Bắt đầu xuất phát từ trạng thái q0’ = (q0), ta di chuyển qua kí tự bảng chữ, xuất trạng thái mới, ta thêm vào tập trạng thái Q’ Khi xét hết trạng thái Q’ mà không xuất trạng thái nữa, ta dừng thuật tốn Thuật tốn 52 Có NFA = < Q, A, , q0, F>, DFA = < Q’, A’, ’, q0’, F’> Ta có : A’ = A Q’  2Q q0’ = (q0) F’ = { q’  Q’ | q’  F  } ’ = δ ¿ Q’ xây dựng thuật toán sau : Procedure Build_DFA(N: NFA) { Var stack : STACK, q, q’ : 2Q; q’ = (q0); push(q, stack); Q’ = {q’}; While !empty(stack) { pop(stack, q); For với x  A { q’ = δ ¿ (q, x); if q’  Q’ then { push(q’, stack); Q’ = Q’  {q’}; } } } Ví dụ minh họa 3.2.4 Minimize DFA Phát biểu toán : Cho DFA , xây dựng DFA tối thiểu hóa đốn nhận ngơn ngữ với DFA cho Input: DFA Output: Minimized DFA Ý tưởng Từ định nghĩa trạng thái tương đương , ta suy tập trạng thái tương đương Xét tập ban đầu tất trạng thái, ta tách thành tập : trạng thái kết thúc không kết thúc Tiếp tục xét tập, sau qua kí tự 53 bảng chữ cái: Nếu tập qua tất kí tự mà tập khơng thay đổi, tập tương đương Trong trường hợp, qua kí tự mà tập ban đầu chuyển thành tập mới, ta tách tập thành tập tiếp tục xét tiếp Kết thu dãy tập, tập nhãn trạng thái DFA cần xây dựng Thuật toán Procedure BUILD_DFA { Var Q1, Q2 : Set Stack : STACK For q thuộc Q, If q thuộc F, Q1.Add(q) If q không thuộc , Q2.Add(q) Push(Q1, Stack); Push(Q2, Stack); While (!empty(STACK)) { Pop(Q, Stack); For(với kí tự a thuộc A) Q0 = ( Q, a ) If Q0 không tập Q, tách Q = Q1 + Q2 Push(Q1, Stack); Push (Q2, Stack) If Q0  Q với a thuộc A, Q’ = Q’  Q; } } Ví dụ minh họa 3.2.5 Xây dựng NFA đốn nhận ngơn ngữ quy cho biểu thức quy Phát biểu tốn: Input: Biểu thức quy r biểu diễn ngơn ngữ L(r) Output: DFA đốn nhận nhận ngơn ngữ L( r) 54 Ý tưởng Từ biểu thức quy r xây dựng NFA (sử dụng thuật toán Thompson) Bước 1: Đơn giản hóa biểu thức quy ( loại bỏ yếu tố khó xây dựng NFA Kết thúc bước BTCQ phép chọn ( | ), phép lặp ( *) , phép nối(.)) Bước 2: Xây dựng NFA cho ký hiệu (ký hiệu rỗng, ký hiệu thường) Bước 3: Ghép NFA theo quy tắc chuyển đổi phép toán (phép nối, phép chọn, phép lặp) Thuật tốn Ví dụ minh họa 3.2.6 Xây dựng biểu thức quy cho ngơn ngữ quy đoán nhận bới FA (NFA, DFA) Phát biểu toán: Input : FA Output : RE Ý tưởng : Thuật toán Kleene Thuật toán : (triển khai thuật toán code) + Từ bảng chuyển FA, ta xây dựng bảng có dạng sau + Xử lí bảng Loại bỏ dần trạng thái Procedure BUILD_RE (Var T : Table) { For (chọn trạng thái i để loại bỏ): T[x, y] = T[x, i] + T[i, i] + T[i, y]; 55 RE = T[0, F] với F trạng thái kết thúc } Ví dụ minh họa 56 3.2.7 Bài tốn xây dựng văn phạm tuyến tính phải thành văn phạm tuyến tính trái Lý thuyết: Định nghĩa văn phạm tuyến tính trái Một văn phạm G=(Σ, Δ, s, p) gọi văn phạm tuyến tính trái (VPTTT) tất sản xuất có dạng ABw hay Aw với A,BΔ; wΣ*  Ví dụ: SS a | S b | a  Định nghĩa văn phạm tuyến tính phải Một văn phạm G=(Σ, Δ, s, p) gọi văn phạm tuyến tính phải (VPTTP) tất sản xuất có dạng AwB hay Aw với A,BΔ; wΣ*  Ví dụ: Sa A Aa A | b A |  Ý tưởng thực tốn: Văn phạm tuyến tính phải văn phạm tuyến tính trái văn phạm quy, điểm khác nằm trình chuyển (biến thực trình chuyển VPTTP nằm bên phải cịn VPTTT nằm bên trái) Vì muốn chuyển VPTTP thành VPTTT, ta cần chuyển vị trí biến q trình chuyển Các bước thực toán: B1: Xác định thuộc tính văn phạm tuyến tính phải bao gồm: tập ngôn ngữ, tập biến, xác định biến bắt đầu, tập trình B2: Xác định số trình chuyển ứng với biến bắt đầu B3: Đối với trình chuyển tương ứng với biến, thực đảo xâu trình chuyển 57 (vd aB → Ba) B4: Xác định văn phạm tuyến tính trái sau thực q trình chuyển Ví dụ: Chuyển Gp sau thành Gt tương ứng: Gp: Gt: S → aA | bB S → Aa | Bb A → bC → A → Cb B → bA B → Ab C → aC | aB |  C → Ca | Ba |  Code: Input: Gp = (Σ, Δ, s, p) (văn phạm tuyến tính phải (p phải)) Output: Gt = (Σ, Δ, s, p) (văn phạm tuyến tính trái (p trái)) Giả mã: public static int n; public static string NN; public static List xicma = new List(); public static int d; public static string DT; public static List dental = new List(); public static int t; public static string[] TT = new string[100]; public static List F = new List(); public static List L = new List(); //tập ngôn ngữ static void Xicma() {} //tập trạng thái dental static void DenTal(){} //tập hàm chuyển tetal static void Tetal(){} // đảo xâu static void DaoXau() { int l; string str; 58 for (int i = 0; i < TT.Length; i++) { string X = ""; str = TT[i]; l = TT[i].Length - 1; while (l >= 0) { X = X + str[l]; l ; } TT[i] = X; } } //GT //tập hàm chuyển sau đảo static void TetalGt() { for (int i = 0; i < d; i++) { Console.WriteLine("\nbien bat dau {0}", dental[i]); Console.Write("so qua trinh/ham chuyen: "); t = Convert.ToInt32(Console.ReadLine()); for (int j = 0; j < t; j++) { Console.Write("{0} -> {1} ", dental[i], TT[j]); } } } 3.2.8 Bài tốn xây dựng văn phạm tuyến tính phải thành NFA (Nondeterministic Finite Automata) Lý thuyết: Định nghĩa: Otomat NFA M (Σ, Q, δ, q0, F) gồm thành phần: Σ: chữ vào Q: tập hữu hạn trạng thái q0  Q: trạng thái đầu F  Q: tập trạng thái kết thúc δ: hàm chuyển trạng thái có dạng δ(q,a) = P với qQ, a(Σ), PQ  Ví dụ: Ơtơmát đốn nhận xâu có độ dài chẵn chữ {0,1} 59 Ý tưởng thực toán: Để xây dựng NFA từ văn phạm tuyến tính phải, ta phải biết hạm chuyển trạng thái (các trình chuyển) xác định q trình có trạng thái kết thúc để đứa tập trạng thái kết thức F Cách thực toán: Cho văn phạm qui G = (ΣG , Δ, s, p) xây dựng NFA M = (Q, Σ, q0, , F) đốn nhận ngơn ngữ sinh từ G Các thành phần NFA xác định sau: - Σ = ΣG - Với AΔ AQ - q0 = S - Nếu A  a1a2 *(A,a1a2 ai) = qi: thêm qi vào Q F - Nếu A  a1a2 đặt vào  dịch chuyển trạng thái thêm vào Q trạng thái cho *(A,a1a2 ai) = qi - Nếu A  a1a2 aiB đặt vào  dịch chuyển trạng thái thêm vào Q trạng thái cho *(A,a1a2 ai) =B - Nếu A thêm A vào F Ví dụ:  Tạo NFA từ văn phạm tuyến tính phải sau: Sa A Aa A | b A |  - Σ = {a, b} - Qbđ = {S, A} - q0 = S - Fbđ =  - : Ta có: Sa A nên (S,a) = A Aa A nên (A,a) = A Ab A nên (A,b) = A 60 A nên thêm A vào F Ta F = {A} Vậy ta NFA sau: Code: InPut: Gp= (Σ, Δ, s, p) (một văn phạm tuyến tính phải) OutPut: NFA M=(Q, Σ, q0, , F) Giả mã: //tập ngôn ngữ static void Xicma(){} //tập trạng thái dental static void DenTal(){} //tập hàm chuyển tetal static void Tetal(){} //tập trạng thái bắt đầu q0 // tập trạng thái kết thúc F static void Finish(){ string[] f = F.ToArray(); Console.WriteLine("tap trang thai ket thuc: "); for (int i = 0; i < f.Length; i++) { Console.Write("{0},", f[i]); i++; } } //in NFA static void NFA(){} 3.2.9 Bài toán xây dựng NFA từ ngơn ngữ quy M (Regular expression to NFA) Phát biểu tốn Từ ngơn ngữ quy M chuyển NFA Ý tưởng thuật tốn B1: Sử dụng thuật tốn kí pháp Ba Lan để phân tích cú pháp biểu thức quy ban đầu B2: Tạo bảng chuyển để lưu trạng thái NFA B3: Định nghĩa lại phép chuyển từ RE sang NFA theo thuật toán Thompson 61 3.1 Tạo hàm chuyển states 3.2 Tạo hàm chuyển concat, union, star B4: Nối nfa để trở thành NFA hoàn chỉnh Source code chi tiết B1: Kí pháp Ba Lan B2: tạo bảng chuyển public void AddTrans(state from, state to, input @in) { IsLegalState(from); IsLegalState(to); transTable[from][to] = @in; if(@in != (char)Constants.Epsilon) inputs.Add(@in); } Tạo bảng chuyển số lượng đỉnh tang trình đọc thuật tốn public void ShiftStates(int shift) { int newSize = size + shift; if(shift < 1) return; input[][] newTransTable = new input[newSize][]; for(int i = 0; i < newSize; ++i) newTransTable[i] = new input[newSize]; // Copies all the transitions to the new table, at their new locations for(state i = 0; i < size; ++i) for(state j = 0; j < size; ++j) newTransTable[i + shift][j + shift] = transTable[i][j]; // Updates the NFA members size = newSize; initial += shift; final += shift; transTable = newTransTable; } B3: định nghĩa phép toán thuật toán Thompson 3.1 Concat public static NFA BuildNFAConcat(NFA nfa1, NFA nfa2) { nfa2.ShiftStates(nfa1.size - 1); 62 NFA newNFA = new NFA(nfa2); newNFA.FillStates(nfa1); newNFA.initial = nfa1.initial; return newNFA; } 3.2 Union public static NFA BuildNFAAlter(NFA nfa1, NFA nfa2) { nfa1.ShiftStates(1); nfa2.ShiftStates(nfa1.size); NFA newNFA = new NFA(nfa2); newNFA.FillStates(nfa1); newNFA.AddTrans(0, nfa1.initial, (char)Constants.Epsilon); newNFA.AddTrans(0, nfa2.initial, (char)Constants.Epsilon); newNFA.initial = 0; newNFA.AppendEmptyState(); newNFA.final = newNFA.size - 1; newNFA.AddTrans(nfa1.final, newNFA.final, (char)Constants.Epsilon); newNFA.AddTrans(nfa2.final, newNFA.final, (char)Constants.Epsilon); return newNFA; } 3.3 Star public static NFA BuildNFAStar(NFA nfa) { nfa.ShiftStates(1); nfa.AppendEmptyState(); nfa.AddTrans(nfa.final, nfa.initial, (char)Constants.Epsilon); nfa.AddTrans(0, nfa.initial, (char)Constants.Epsilon); nfa.AddTrans(nfa.final, nfa.size - 1, (char)Constants.Epsilon); nfa.AddTrans(0, nfa.size - 1, (char)Constants.Epsilon); nfa.initial = 0; nfa.final = nfa.size - 1; return nfa; } B4 Nối NFA lại private NFA TreeToNFA(ParseTree tree) { switch(tree.type) { case ParseTree.NodeType.Chr: return BuildNFABasic(tree.data.Value); case ParseTree.NodeType.Alter: return BuildNFAAlter(TreeToNFA(tree.left), TreeToNFA(tree.right)); 63 case ParseTree.NodeType.Concat: return BuildNFAConcat(TreeToNFA(tree.left), TreeToNFA(tree.right)); case ParseTree.NodeType.Star: return BuildNFAStar(TreeToNFA(tree.left)); case ParseTree.NodeType.Question: return BuildNFAAlter(TreeToNFA(tree.left), BuildNFABasic((char)Constants.Epsilon)); default: return null; } } 64 KẾT LUẬN 65 ... Máy Turing không đơn định Máy Turing mơ hình gốc nêu gọi máy Turing đơn định hàm chuyển () đơn trị Máy Turing khơng đơn định có mơ hình tương tự mơ hình gốc điểm khác biệt chỗ lần chuyển, máy Turing. .. đề Church – Turing? ??……………………………………….… 20 1.8 Sự tương đương văn phạm loại máy Turing? ??………….….21 1.9 Otomat tuyến tính giới nội văn phạm cảm ngữ cảnh………….… 25 1.10 Bài toán dừng máy Turing? ??……………………………………... xử lý theo Alan Turing, tất thuật tốn mơ tả lại mơ hình máy Turing, việc đánh giá thuật toán máy Turing cho kết xác cơng Vì nhóm chúng em chọn đề tài báo cáo mơn học lý thuyết Otomat ngơn ngữ

Ngày đăng: 26/09/2021, 11:46

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan