LỜI MỞ ĐẦU Lý thuyết tính toán là lĩnh vực nghiên cứu các lý thuyết về máy tính, đó là nghiên cứu về tính toán hiệu quả, các mô hình của các quá trình tính toán, và giới hạn của chúng. Lĩnh vực này đã nổi lên trong vài thập kỷ qua như là một căn bản khoa học kỷ luật cũng như chuyên sâu của khoa học máy tính. Là một ngành khoa học non trẻ, với nhiều câu hỏi trung tâm vẫn chưa được trả lời, và nó cũng là một khoa học sẵn sàng để có tác động đáng kể về các vấn đề hiện tại trong sự phát triển của các hệ thống và phần mềm, của mạng lưới quốc gia và cơ sở hạ tầng thông tin liên lạc, tin học sinh học và khoa học vật lý. Cũng như tham gia vào các lĩnh vực như thiết kế các thuật toán cơ bản, tối ưu hóa tổ hợp, học máy, lý thuyết phức tạp tính toán, đại số máy tính, logic trong khoa học máy tính, hình học tính toán, và các ứng dụng để xác minh, các hệ thống đáng tin cậy, đa phương tiện và xử lý hình ảnh , và các khoa học tính toán. Vận dụng những kiến thức thu nhận trong quá trình học tập, tìm hiểu và nghiên cứu về môn Lý thuyết tính toán, được sự phân công và hướng dẫn của thầy giáo PGS.TS. Phan Huy Khánh, chúng tôi đã chọn đề tài này để làm đề tài tiểu luận cho môn học. Tiểu luận đề cập đến các vấn đề lý thuyết như về Automat đẩy xuống, cũng như xây dựng PDA tương ứng với văn phạm phi ngữ cảnh; phần bài tập, tiểu luận đi vào giải quyết các bài toán trong tin học sử dụng chương trình RAM để minh họa kết quả. Lời cuối cùng, chúng tôi xin chân thành cảm ơn thầy giáo PGS.TS. Phan Huy Khánh đã tận tình giảng dạy và hướng dẫn để chúng tôi hoàn thành tiểu luận này. Chúng tôi cũng xin chân thành cảm ơn các học viên trong lớp đã chia sẻ kinh nghiệm trong học tập nghiên cứu và giúp đỡ chúng tôi trong quá trình làm tiểu luận.
Trang 1ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
- -TIỂU LUẬN MÔN LÝ THUYẾT TÍNH TOÁN
§Ò tµi:
TRÌNH BÀY LÝ THUYẾT VỀ AUTOMAT ĐẨY XUỐNG
VÀ MINH HỌA BÀI TOÁN TRONG TIN HỌC
Trang 2cơ bản, tối ưu hóa tổ hợp, học máy, lý thuyết phức tạp tính toán, đại số máy tính, logic trongkhoa học máy tính, hình học tính toán, và các ứng dụng để xác minh, các hệ thống đáng tin cậy,
đa phương tiện và xử lý hình ảnh , và các khoa học tính toán
Vận dụng những kiến thức thu nhận trong quá trình học tập, tìm hiểu và nghiên cứu vềmôn Lý thuyết tính toán, được sự phân công và hướng dẫn của thầy giáo PGS.TS Phan HuyKhánh, chúng tôi đã chọn đề tài này để làm đề tài tiểu luận cho môn học
Tiểu luận đề cập đến các vấn đề lý thuyết như về Automat đẩy xuống, cũng như xây dựngPDA tương ứng với văn phạm phi ngữ cảnh; phần bài tập, tiểu luận đi vào giải quyết các bàitoán trong tin học sử dụng chương trình RAM để minh họa kết quả
Lời cuối cùng, chúng tôi xin chân thành cảm ơn thầy giáo PGS.TS Phan Huy Khánh đã
tận tình giảng dạy và hướng dẫn để chúng tôi hoàn thành tiểu luận này Chúng tôi cũng xin chânthành cảm ơn các học viên trong lớp đã chia sẻ kinh nghiệm trong học tập nghiên cứu và giúp
đỡ chúng tôi trong quá trình làm tiểu luận
Trang 3MỤC LỤC
LỜI MỞ ĐẦU 1
MỤC LỤC 2
CHƯƠNG 1 PHẦN LÝ THUYẾT 3
1.1 Giới thiệu theo cách trình bày ví dụ 3
1.2 Định nghĩa của một Automat đẩy xuống 9
1.3 Một ôtômát đẩy xuống tương ứng với một văn phạm phi ngữ cảnh xác định 16
CHƯƠNG 2 PHẦN BÀI TẬP 26
2.1 Ý tưởng: 26
2.2 Đề xuất thuật toán: 26
2.3 Minh họa thuật toán bằng chương trình RAM: 27
TÀI LIỆU THAM KHẢO 31
Trang 4CHƯƠNG 1 PHẦN LÝ THUYẾT
1.1 Giới thiệu theo cách trình bày ví dụ
Trong chương này chúng ta xem xét cẩn thận về phương thức mở rộng mô hình tính toántrạng thái giới hạn để chúng ta có thể nhận ra ngôn ngữ phi ngữ cảnh Trong ví dụ đầu tiên, taxem xét một trong những ngôn ngữ phi ngữ cảnh bất quy tắc đơn giản nhất Mặc dù các máytrừu tượng mà chúng ta mô tả rõ ràng không liên quan gì đến CFG (CFG: văn phạm phi ngữcảnh) – tạo ra ngôn ngữ máy nhưng sau này chúng ta sẽ xét đến các trường hợp: các máy cùngloại nói chung có thể dùng chung bất kỳ ngôn ngữ phi ngữ cảnh nào và việc có thể dễ dàng xâydựng được một máy từ văn phạm
Ví dụ 1.1 về một máy chấp nhận chuỗi Palindromes đơn giản Với G là một văn phạm phingữ cảnh, ta có kết quả sau:
G tạo ra ngôn ngữ máy là:
Các chuỗi trong L là chuỗi có chiều dài lẻ trên {a,b} (ví dụ 6.3), trừ trường hợp kí tự giữa
là c (Chúng ta hãy xét đến các chuỗi Palindrome thông thường Kí hiệu “đánh dấu” ở giữa giúp
ta dễ dàng nhận ra các chuỗi kí tự)
Cũng không khó gì để viết một thuật toán kiểm tra các xâu trong L bằng cách đọc các kí
tự từ trái sang phải Ta lưu lại các kí tự của nửa đầu xâu chuỗi mà ta đã đọc, để một khi chúng tabắt gặp kí tự c thì ta có thể bắt đầu thực hiện việc so khớp các kí tự đang vào với các kí tự đãđược đọc Để thực hiện được điều này, ta phải lấy lại các kí hiệu đã được lưu trữ bằng cách sử
dụng quy tắc “ vào sau, ra trước” (viết tắt là LIFO): Kí tự thường được đem đi so khớp với các
kí tự đang vào kế tiếp là một kí tự đã được đọc hoặc đã được lưu trữ Cấu trúc dữ liệu dùng quytắc LIFO là một ngăn xếp, thường được sắp xếp như là một danh sách trong đó kí tự cuối đượcxếp vào vị trí đầu tiên Các kí tự luôn luôn được thêm vào (gọi là push – đẩy vào ngăn xếp) vàxóa (gọi là pop – đẩy ra khỏi ngăn xếp) tại vị trí cuối này, và ở bất kỳ thời điểm nào, phần tửduy nhất của ngăn xếp có thể được truy cập ngay tức thời là phần tử ở vị trí đỉnh của ngăn xếp
Trang 5Khi ta thử dùng thuật toán này với máy trừu tượng, cũng đúng khi nói rằng “trạng thái”hiện tại của máy được xác định một phần bởi nội dung hiện hành của ngăn xếp Tuy nhiên, cáchtiếp cận này sẽ đòi hỏi một tập vô hạn các “trạng thái”, bởi vì ngăn xếp cần đến chúng để có thểchứa được các xâu chuỗi có kích thước lớn Phương pháp này thuận lợi hơn thay vì tiếp tụcdùng một tập các “trạng thái” hữu hạn – mặc dù đầu đọc không phải là một “máy có trạng tháihữu hạn”, cách này cũng giống như cách thức mà FA đã dùng, bởi vì với trạng thái hiện tại thìkhông đủ để xác định được trạng thái máy và không đủ khả năng để xem ngăn xếp như là mộthình thức đơn giản của bộ nhớ đệm Điều này có nghĩa là một hành động của máy tính khôngnhững phụ thuộc vào trạng thái hiện tại cũng như dữ liệu đầu vào mà còn phụ thuộc vào kí tựhiện đang ở vị trí đỉnh của ngăn xếp Việc thực hiện một hành động có thể làm thay đổi ngănxếp cũng như trạng thái của ngăn xếp.
Trong ví dụ đơn giản trên, một tập các trạng thái Q sẽ chỉ chứa 3 phần tử: q0, q1, q2.Trạng thái đầu q0 có khả năng xử lý một nửa xâu đầu Trong trạng thái này, mỗi kí tự đầu vàođược đẩy lên ngăn xếp mà không cần biết kí tự gì hiện đang ở vị trí đầu Máy tính vẫn ở trạngthái q0 chừng nào nó chưa nhận được kí tự c; khi nhận được kí tự c thì máy tính chuyển sangtrạng thái q1 nhưng ngăn xếp không thay đổi Trạng thái q1 được dành để xử lý một nửa xâu đầuvào còn lại Một khi máy tính đang trong trạng thái này thì xâu duy nhất được thừa nhận phải làxâu thuộc nửa xâu chuỗi còn lại (sau ký tự c), là xâu chuỗi đảo ngược đã được máy đọc Trongtrạng thái q1, mỗi kí tự đầu vào sẽ được đem so sánh với một kí tự hiện đang ở vị trí đỉnh củangăn xếp Nếu chúng được chấp nhận, các kí tự đó sẽ bị đẩy ra khỏi ngăn xếp và bị loại bỏ;ngược lại máy sẽ bị sự cố và xâu kí tự sẽ không được chấp nhận Giai đoạn xử lý này kết thúckhi ngăn xếp hoàn toàn rỗng và máy không bị sự cố Một ngăn xếp trống có nghĩa là mỗi kí tựtại một nửa đầu xâu chuỗi hoàn toàn trùng khớp với mỗi kí tự đầu vào của xâu chuỗi còn lại vàlúc này máy sẽ chuyển sang trạng thái chấp thuận q2
Bây giờ ta xét đến phương thức miêu tả một cách chính xác sự hoạt động của một máytrừu tượng mà chúng ta đã phát thảo Mỗi động thái của máy sẽ được xác định bởi 3 yếu tố:
1 Trạng thái hiện tại
2 Dữ liệu nhập kế tiếp
3 Kí tự ở đầu ngăn xếp
Trang 6Và bao gồm 2 phần:
1 Sự thay đổi trạng thái ( hoặc vẫn ở cùng trạng thái)
2 Sự thay thể kí tự ở đỉnh ngăn xếp bằng một chuỗi số 0 hoặc các kí tự khác
Việc mô tả sự dịch chuyển theo cách này cho phép chúng ta có thể xét 2 sự chuyển dịch cơ bảncủa ngăn xếp như là các trường hợp đặc biệt:
- Đẩy kí tự tại vị trí đầu tiên (pop) ra khỏi ngăn xếp để thay thế bằng một kí tự kế tiếp , và đẩy
kí tự Y (push) vào ngăn xếp tức là thay kí tự X tại vị trí đỉnh của ngăn xếp bằng kí tự YX (vớigiả định là kí tự tận cùng bên trái của chuỗi nằm tương ứng với vị trí đỉnh của ngăn xếp) Chúng
ta sẽ tuân theo quy luật ngăn xếp một cách nghiêm ngặt với yêu cầu là ứng với một sự dịchchuyển trong ngăn xếp thì đó phải là chuyển động duy nhất trong ngăn xếp: hoặc là đẩy kí tựvào (push) hoặc là đẩy kí tự ra (pop) Tuy nhiên việc thay thế một kí tự X trong ngăn xếp bằng 1
kí tự alpha có thể được thực hiện bằng một chuỗi các chuyển động cơ bản (hành động đẩy kí tự
ra, theo sau là một chuỗi các số 0 hoặc nhiều hành động đẩy kí tự vào) và càng nhiều sự chuyểnđộng chung chung thì càng làm cho số lượng chuyển động khác biệt trở nên ít hơn
Trong trường hợp của thiết bị ôtômát hữu hạn thì chức năng chuyển dịch có dạng:
Tại đây nếu chúng ta cho phép xảy ra trường hợp: các kí tự chữ cái chứa trong ngăn xếp (mộttập hợp các kí tự có thể xuất hiện trong ngăn xếp) khác với các kí tự chữ cái nhập vào thì ta có:
Với trạng thái q, dữ liệu nhập là a và kí tự trong ngăn xếp là X, ta có:
Nghĩa là trong trạng thái q , với kí tự X nằm ở vị trí đỉnh trong ngăn xếp, ta đọc kí tự a, chuyểnsang trạng thái p và thay thế X trong ngăn xếp bằng kí tự
Điều này làm nảy sinh một vài vấn đề Thứ nhất, bằng cách nào để có thể mô tả sự dịchchuyển nếu ngăn xếp hoàn toàn trống ((q, a, ?))? Giải pháp là ta dùng phát biểu sau: khi có))?))? Giải pháp là ta dùng phát biểu sau: khi có Giải pháp là ta dùng phát biểu sau: khi cómột ký tự bắt đầu đặc biệt là Zo trong ngăn xếp và máy tính sẽ không được phép thực hiện hànhđộng dịch chuyển khi ngăn xếp trống Với điều kiện là Zo không bao giờ bị loại bỏ khỏi ngăn
Trang 7xếp và không có thêm bản sao nào của Zo được đẩy vào ngăn xếp và lúc này ta có thể nói rằng
Zo đang ở vị trí đầu tiên của ngăn xếp, nghĩa là ngăn xếp đã hoàn toàn trống
Vấn đề thứ hai, làm thế nào để chúng ta mô tả sự dịch chuyển của ngăn xếp khi không có
dữ liệu nhập vào ((q, ?))? Giải pháp là ta dùng phát biểu sau: khi có, X))?))? Giải pháp là ta dùng phát biểu sau: khi có (Nên nhớ rằng trong ví dụ này chúng ta đang muốn chuyển sangtrạng thái q2 khi ngăn xếp rỗng và tất cả dữ liệu nhập vào đã được đọc Mà giải pháp chúng ta
áp dụng ở trường hợp này là cho phép dịch chuyển với điều kiện chỉ sử dụng một dữ liệu đầuvào duy nhất, và điều này cũng giống với những sự chuyển dịch trong NFA-A (Automat hữu
hạn không đơn định) Và cái mà ta thật sự cần là:
Tất nhiên một khi có sự chuyển dịch của hình thức (q, , X), thì ta có thể tạo ra chúngtrước khi dữ liệu nhập được đọc; nếu ký tự đầu vào kế tiếp không được đọc trong khi tồn tại mộtchuyển dịch thì nó vẫn nằm ở vị trí cũ và sẽ được đọc ngay sau đó
Chúng ta đã nói rằng: có thể xảy ra nhiều tình huống khi máy tính gặp sự cố - tức làkhông có sự dịch chuyển nào Trong trường hợp của một otomat hữu hạn, khi tình huống nàyxảy ra ta quyết định tạo ra (q, a), một tập con của Q chứ không phải là một phần tử và nó cógiá trị rỗng Đồng thời chúng ta cho phép xảy ra khả năng là (q, a), có thể chứa nhiều hơn mộtphần tử để FA trở thành bất định Chúng ta có thể làm điều tương tự ngoại trừ trường hợp khi
là một tập vô hạn, và cũng nói rõ thêm là (q, a, X), và (q, , X) luôn là hữu hạn trong
ví dụ hiện tại sự bất định là không cần thiết nhưng lại là điều cần thiết trong những trường hợpkhác Vì vậy chúng ta đang nằm ở vị trí bên trái với
một tập hợp các tập con hữu hạn của Bây giờ chúng ta có thể mô tả một cách chính xác cách nhận dạng một chuỗi palindrome đơngiản: Q sẽ là một tập {q0, q1, q2} với q0 là trạng thái ban đầu, q2 là trạng thái duy nhất đượcchấp nhận Bảng chữ cái đầu vào là {a, b, c} và ngăn xếp bảng chữ cái là (a, b, z0) Chức năngchuyển dịch của được trình bày ở bảng 1.1 Hãy nhớ rằng khi chúng ta đưa một chuỗi vàongăn xếp thì vị trí trên cùng của ngăn xếp sẽ tương ứng với vị trí cuối cùng bên phải của chuỗi.Quy ước này là nếu chúng ta cùng một lúc có thể đưa nhiều ký tự vào thì chúng ta phải thựchiện theo trật tự từ phải qua trái hoặc theo thứ tự ngược lại Vấn đề là khi chúng ta đang cố gắng
Trang 8xử lý các ký tự trong ngăn xếp thì thứ tự mà chúng ta gặp cũng giống như thứ tự đã được sắpxếp trong chuỗi.
Khi dịch chuyển từ 1 đến 6: đẩy những ký tự đầu đầu vào a, b vào trong ngăn xếp và sựdịch chuyển từ 7 đến 9: làm thay đổi trạng thái mà không ảnh hưởng đến ngăn xếp, sự dịchchuyển từ 10 đến 11: so khớp ký tự nhập với ký tự ngăn xếp và cả hai đều bị xóa bỏ, và sựchuyển dịch cuối cùng sẽ được chấp nhận với điều kiện sẽ không còn ký tự nào ngoại trừ ký tự
Zo ở trong ngăn xếp
Bảng 1.1 minh họa cho Ví dụ 1.1
Số lần dịchchuyển
Trạng
Biểu tượngngăn xếp
Dịchchuyển
Trang 9Chúng ta hãy theo dõi sự dịch chuyển của máy tính đối với 3 chuỗi đầu vào abcba, ab và acaa
Số lần dịchchuyển
Trạng thái kếtquả
Đầu vào
Chú ý là sự chuyển dịch cuối cùng được thực hiện với chuỗi acaa Mặt dù không có sự
hết sự lựa chọn Ta có thể nói rằng khi đầu đọc đang ở trạng thái chấp nhận thì các phần của
chuỗi được máy đọc cho tới giờ (ví dụ: aca) đã được thừa nhận; tuy nhiên toàn bộ chuỗi đầu vào
lại không được chấp nhận bởi vì không phải tất cả các ký tự đều được đọc
Hình 1.1 Chuyển đổi sơ đồ cho các automaton pushdown (PDA) trong Ví dụ 1.1.
Hình 1.1 là sơ đồ mô hình cho ví dụ 1.1 (nhưng phức tạp hơn) nằm sau biểu đồ chuyển đổi củamột FA Mỗi sự chuyển đổi được gán nhãn tương ứng với một dữ liệu đầu vào (là một ký tự chữcái hoặc , một ký tự ngăn xếp X, một dấu / và một chuỗi α các ký tự của ngăn xếp Chúng ta có
(Ban đầu)
(Chấp nhận)(Ban đầu)
(Ban đầu)(Máy treo
Trang 10thể diễn giải là sự chuyển tiếp có thể xảy ra với dữ liệu đầu vào xác định và có liên quan đến sựthay thế ký tự X trong ngăn xếp bằng ký tự α Ngay cả khi đã có các thông tin bổ sung cần thiết
để gán nhãn trên mũi tên thì biểu đồ ở dạng này không hoàn toàn nắm hết được các hành vi củamột PDA cũng giống như cách thức mà một biểu đồ chuyển tiếp của FA thể hiện Với một FAthì bạn có thể bắt đầu tại bất kỳ vị trí nào trên sơ đồ này với các kí tự đầu vào và dõi theo cáchành động của đầu đọc theo hướng của của các mũi tên Tuy nhiên trong hình 1.1 bạn không thểdõi theo các mũi tên mà không dò theo nội dung của ngăn xếp (có thể là toàn bộ nội dung) Sốlượng các trạng thái kết hợp có thể có và nội dung của ngăn xếp là vô hạn, vì vậy ta không thểsuy ra được một sơ đồ các trạng thái hữu hạn trong cùng một trường hợp cho một FA Trong hầuhết các trường hợp, trong chương này, chúng ta có thể mô tả một automat đẩy xuống bằng cácbảng chuyển tiếp tương tự như bảng 1.1, mặc dù thi thoảng nó cũng rất hữu ích để trình bày một
sơ đồ chuyển tiếp
1.2 Định nghĩa của một Automat đẩy xuống
Dưới đây là một định nghĩa chính xác về các loại máy trừu tượng trong mục 1.1 Nên nhớ rằngnhững gì đang được định nghĩa nói là chung không xác định
Định nghĩa 1.2 Định nghĩa về một PDA
Một PDA là một tập M có 7 phần tử M = (Q, , 0, Z, A, δ))
Với Q là một tập hợp các trạng thái hữu hạn – là một tập hữu hạn gồm các dữ liệu đầu vào,bảng ngăn xếp các ký tự chữ cái tương ứng
qo trạng thái ban đầu, là một thành phần của tập Q
Zo là ký tự ngăn xếp ban đầu, là một phần tử của ngăn xếp
A là một tập hợp các trạng thái chấp nhận, là một tập con của Q
một tập hợp các tập con hữu hạn của Các δ) chức năng được gọi là chức năng chuyển tiếp của M
Bảng chữ cái ngăn xếp và ký tự ban đầu ngăn xếp Zo là những yếu tố cần thiết để tạo ra 7 – bộ
dữ liệu thay vì 5 bộ dữ liệu Nếu không, các thành phần của bộ dữ liệu cũng giống như trườnghợp của FA, ngoại trừ việc chức năng chuyển đổi trở nên phức tạp hơn
Trang 11Chúng ta có thể theo dõi hoạt động của một Automat hữu hạn bằng cách dò theo trạng thái hiệntại tại mỗi bước Để theo dõi hoạt động của một PDA M chúng ta cũng phải dò theo nội dungcủa ngăn xếp Nếu chúng ta quan tâm đến những gì mà máy thực hiện với một chuỗi đầu vàoxác định thì nó cũng giúp ích cho việc quan sát các phần của chuỗi chưa được đọc Một dạng
q là trạng thái hiện hành
x là chuỗi dữ liệu đầu vào còn lại chưa được đọc
α là nội dung hiện hành của ngăn xếp, thông thường nó nằm ở vị trí cuối cùng bên trái của α,tương ứng với vị trí đỉnh của ngăn xếp
ta có:
có nghĩa là một trong những sự dịch chuyển có thể có trong cấu hình đầu tiên đưa M đến vị trí
số 2 Điều này có thể xảy ra theo 2 cách thức, phụ thuộc vào việc hoặc là có một sự dịch chuyển xóa một ký tự đầu vào hoặc là có một sự chuyển đổi Trong trường hợp đầu tiên, x = ay với a
, và trong trường hợp thứ hai x = y; chúng ta có thể tóm tắt cả hai trường hợp bằng x = ay, với
a {} trong cả hai trường hợp, chuỗi β nằm trong số những ký tự của ngăn xếp được lấy
từ α bằng cách thay thế ký tự đầu tiên X bằng ký tự (nói theo một cách khác α = Xγ cho một
số X và một số γ *, và β = ξ γ đối với một số ξ *) và
(q, ξ ) δ)(p, a, X)Tổng quát hơn, ta có
Nếu có một chuỗi các số 0 hoặc có nhiều dịch chuyển làm cho M chuyển từ dạng 1 sang dạng 2
Bằng việc sử dụng những ký tự mới chúng ta có thể xác định sự chấp nhận một chuỗi bằng aMPDA
Trang 12Định nghĩa 1.2 Sự chấp nhận của một PDA.
Nếu M =(Q, , , q0, Z0, A, ) là một PDA và x *, x được chấp thuận bởi M nếu
Với * và q A (ngăn xếp có thể rỗng hoặc không nếu x được chấp nhận, bởi vì α có thểrỗng hoặc không rỗng Ta có thể nói rằng một ngôn ngữ L * được thừa nhận bởi M nếu như
L là một tập các chuỗi được chấp nhận bởi M ; trong trường hợp này chúng ta viết L=L(M).Lưu ý rằng việc có hay không một chuỗi được chấp nhận chỉ phụ thuộc vào trạng thái hiện hànhtrong lúc chuỗi đang được xử lý và không còn thuộc nội dung của ngăn xếp
Chúng ta có thể sử dụng cụm từ ‘cấu hình đang chấp nhận để chỉ bất kỳ cấu hình nào đang trongtrạng thái đang chấp nhận Dạng chấp nhận này đôi khi được gọi là sự chấp nhận bởi trạng tháicuối
Mục này sẽ được trình bày một cách ngắn gọn tại mục 7.5 mô tả một trường hợp khác: sự chấp
thuận bởi ngăn xếp trống Trong phương pháp này, một chuỗi được xem là được chấp nhận nếu
nó cho phép PDA đạt đến cấu hình mà tại đó ngăn xếp hoàn toàn rỗng, bất kể là trạng thái lúc đó
có phải là trạng thái chấp thuận hay không Cũng không khó để nhận ra rằng 2 loại chấp nhận làtương đương nhau (tại mục 7.5, bài tập 7.41 và 7.42), trong trường hợp nếu một ngôn ngữ đượcmột số PDA chấp thuận, đang sử dụng một trong những mode của trạng thái chấp nhận thì cũng
sẽ được thừa nhận bởi một PDA đang ở một mode khác
Phải nhấn mạnh thêm rằng khi ta nói một PDA thừa nhận một chuỗi X thì nghĩa là đang có mộtchuỗi các chuyển động mà nó là tác nhân làm cho máy tiến đến cấu hình của sự chấp nhận và
đó là kết quả của việc đọc các kí tự X Khi PDA là không xác định thì có khả năng có thể có cácchuỗi chuyển động khác nhưng không làm cho máy tiến đến cấu hình của sự chấp nhận Mỗi lần
có sự lựa chọn của sự dịch chuyển thì ta có thể quan sát PDA khi nó đang thực hiện công việc
dự đoán xem lựa chọn nào sẽ được thực hiện Sự chấp nhận xảy ra, có nghĩa là PDA đã đoánđúng tại mỗi bước dịch chuyển và máy sẽ đạt đến cấu hình của sự chấp nhận Ở ví dụ kế tiếp,chúng sẽ sẽ xem xét thêm để làm rõ việc dự đoán đúng có ý nghĩa như thế nào tại mỗi bướcchuyển động
Ví dụ 1.2 về sự chấp nhận ngôn ngữ của chuỗi Panlidromes của một PDA
Trang 13Thí dụ này có liên quan đến ngôn ngữ pal của chuỗi Panlidromes trên tập {a,b} (cả hai đều cócùng độ dài chẵn và lẻ) không có kí hiệu đánh dấu ở vị trí giữa, nó tạo ra một tín hiệu làm choPDA từ trạng thái đẩy vào ngăn xếp chuyển sang trạng thái so sánh kí tự nhập với kí tự trongngăn xếp Phương pháp chung để xây dựng một PDA nhận ra loại ngôn ngữ này có vẻ giốngnhư trong ví dụ 1.1: Nên nhớ rằng cho đến giờ, các kí tự mà ta đã đọc và vẫn sẽ được lưu trữtrong ngăn xếp cho đến khi ta sẵn sàng cho việc so khớp chúng với các kí tự tại nửa xâu còn lại.Việc chuyển từ trạng thái chuyển động này sang trạng thái khác xảy ra khi ta tiến đến vị trí giữacủa chuỗi như trong ví dụ 1.1 Tuy nhiên, nếu như không có kí tự đánh dấu rõ ràng ở vị trí giữathì PDA không có cách nào biết được đã đến vị trí giữa hay chưa, nó chỉ có thể dự đoán mà thôi.Thật may là sẽ không có chuyện gì xảy ra nếu máy dự đoán sai miễn là việc đoán định của máykhông thừa nhận 1 chuỗi không phải là Panlidrome.
Chúng ta thử nghĩ về việc một máy đang thực hiện công việc dự đoán một chuỗi khi nó thựchiện tác vụ đọc kí tự nhập và đẩy chúng vào ngăn xếp Giai đoạn này có thể bị gián đoạn (trongtrường hợp đoán trúng) theo 2 khả năng: Các thiết bị PDA dự đoán được kí tự nhập kế tiếp làmột kí tự đang ở vị trí giữa của chuỗi (với chuỗi có độ dài lẻ) và do đó nó sẽ bị xóa đi mà khôngcần phải so khớp với bất kì kí tự nào nữa; hoặc máy đoán được là chuỗi đầu vào được đọc là mộtnửa xâu kí tự đầu tiên của một chuỗi có chiều dài chẵn và bất kì kí tự đầu vào kế tiếp nào cũngđược đem đi so khớp với các kí tự trong ngăn xếp Kết quả là nếu một xâu kí tự X được đọc thìlần đoán trúng đầu tiên sẽ là một kí tự nhập s được đọc và xâu chuỗi nhập sẽ là xsx Có khả nănglần đoán thứ hai có thể được thực hiện mà không cần đọc bất kỳ kí tự nào khác và kết quả chuỗiđầu vào sẽ là xx Trong cả 2 trường hợp, từ vị trí này trên PDA sẽ được chấp nhận Nếu không
có lần dự đoán nào nữa thì máy sẽ cố gắng xử lý các ký tự còn lại nếu như các kí tự này nằmtrong nửa xâu chuỗi thứ 2 và chấp nhận là không còn một xâu chuỗi nào khác ngoài xâu chuỗiđầu vào mà máy đã dự đoán được
Cách thức trên không phải là nguyên nhân gây ra việc chấp nhận một chuỗi không phải là chuỗipalindrome, bởi vì cứ mỗi lần PDA đoán đúng thì sau đó nó không thể chấp nhận một chuỗi nàokhác ngoài 2 chuỗi xsx và xx Nói theo một cách khác, để được thừa nhận thì mỗi chuỗipalidrome phải là chuỗi có dạng giống như xsx hoặc xx và trong trường hợp này khi có mộtchuỗi lựa chọn phù hợp mà máy có thể dự đoán đúng tại một thời điểm thích hợp thì tất nhiênchuỗi z đầu vào phải là một chuỗi palindrome, nếu thiết bị PDA đoán đúng tại một thời điểm
Trang 14không thích hợp hoặc đoán sai thì có khả năng quá trình chấp thuận các chuỗi palidrome khác sẽkết thúc, ngoại trừ chuỗi z; hoặc đơn giản là kết thúc hẳn trạng thái không chấp thuận Điều nàykhông có nghĩa là thiết bị PDA làm sai, chỉ là PDA không chọn đúng trình tự dịch chuyển mà cóthể dẫn đến sự thừa nhận chuỗi z.
Bảng chuyển đổi của thiết bị PDA được trình bày ở bảng 1.2 Trong thí dụ 1.1, tập hợp Q và A
là những tập hợp giống nhau và lưu ý là có nhiều điểm tương đồng giữa 2 bảng chuyển đổi Sựchuyển động tại 6 dòng đầu tiên trong bảng 1.1 cho thấy là có nhiều sự chuyển động có thể cótại các dòng tương ứng của bảng 1.2, và 3 dòng cuối của 2 bảng – đại diện cho tiến trình xử lýnửa chuỗi sau – là giống hệt nhau
Thực tế là 6 dòng đầu tiên của bảng 1.2 hiển thị hai dịch chuyển có thể có, điều này cho thấyđược sự bất định Máy dự đoán sai với hai lựa chọn trong mỗi dòng trên (được trình bày trongbảng 1.1) và máy dự đoán được kí tự đầu vào là một ký tự nằm ở vị trí giữa của xâu có chiều dàichẵn Trong cả hai trường hợp, ký tự nhập đều được đọc; với lựa chọn đầu tiên, máy đẩy kí tựvào ngăn xếp, với lựa chọn thứ hai, máy xóa bỏ kí tự
Tuy nhiên cũng có trường hợp bất định với những trình tự ít rõ ràng Giả dụ, PDA đang trongtrạng thái q0, kí tự tại vị trí đỉnh ngăn xếp là a và kí tự nhập kế tiếp cũng là a (dòng 3) Ngoài 2động thái được thể hiện trong dòng 3 thì còn có lựa chọn thứ 3 được trình bày ở dòng 8: khôngphải là để đọc tất cả các ký tự nhập nữa mà để thực hiện sự chuyển đổi sang trạng thái q1 Điềunày đại diện cho tất cả các lần đoán đúng khác, nó là kết quả của quá trình đọc các kí tự gần đâynhất (hiện đang ở tại vị trí đỉnh của ngăn xếp) và chúng ta đang ở tại vị trí giữa của chuỗi cóchiều dài chẵn Sự lựa chọn này được thực hiện mà không cần quan tâm đến ký tự đầu vào kếtiếp (Một phương pháp tiếp cận khác là đọc kí tự a và so khớp kí tự này với ký tự a trong ngănxếp và máy chuyển sang trạng thái q1; tất cả đều có cùng cách thức dịch chuyển; tuy nhiênnhững sự dịch chuyển ở trong bảng cho thấy có điểm khác biệt giữa trạng thái q0 trong tất cảcác lần xảy ra quá trình dự đoán và trạng thái q1 trong tất cả các lần xảy ra quá trình so sánh)
Số lần dịch
Biểu tượng
Trang 15Tất cả các kết hợp khác không
Hình 1.2: Tính toán cây cho PDA trong Bảng 1.2, với baab đầu vào.
Lưu ý là quá trình chuyển đổi trong dòng 8 không phải là căn nguyên của sự bất định Ví dụ: sựchuyển dịch ở dòng 12 là sự chuyển dịch có khả năng nhất khi máy đang ở trạng thái q1 khi Z0
là kí tự đang ở vị trí đỉnh của ngăn xếp Dòng 8 đại diện cho sự bất định bởi vì nếu PDA đang ởtrạng thái q0 và a là kí tự ở đỉnh của ngăn xếp thì xảy ra việc lựa chọn giữa một chuyển động -
Trang 16đọc một ký tự đầu vào với một chuyển động ngược lại Chúng ta sẽ đề cập lại vấn đề này tạimục 7.3.
Cũng như tại mục 4.1, chúng ta có thể suy ra được cây tính toán cho PDA như hình trên - hiểnthị cấu hình và những lựa chọn có thể có của sự dịch chuyển tương ứng với mỗi bước Hình 1.2
hiển thị một cây với chuỗi palindrome baab.
Mỗi khi có một sự lựa chọn, những dịch chuyển có thể có được sắp xếp theo trình tự từ trái quaphải (như hình 1.2) Đặc biệt, trong mỗi cấu hình dọc theo cánh trái của hình 1.2, ngoại trừ cấuhình cuối cùng, PDA đang ở trạng thái q0 và ít nhất sẽ có một kí tự đầu vào không được đọc.Tại mỗi điểm, PDA có thể chọn lựa từ một trong ba khả năng dịch chuyển: nếu tiếp tục đi xuốngcạnh bên trái của hình 1.2 đại diện cho lần dự đoán sai là đọc dữ liệu nhập vào và đẩy vào ngănxếp; Hai khả năng khác là hai chuyển động làm máy chuyển sang trạng thái q1, một chuyểnđộng là để đọc một ký hiệu nhập vào, sự chuyển động còn lại thì không
Thứ tự các bước dịch chuyển dẫn đến sự chấp thuận là:
chấp nhậnThứ tự này là một trong những dịch chuyển của lần dự đoán đúng với sự lựa chọn phù hợp vàđúng thời điểm Những đường bị lệch khỏi phương thẳng đứng kết thúc quá sớm trước khi PDAhoàn thành việc đọc dữ liệu nhập; máy sẽ rơi vào tình trạng bị treo hoặc sẽ sớm đi vào trạng tháichấp thuận q2 (để chuỗi được chấp nhận là một chuỗi palindrome có độ dài là 0 hoặc 1) Nhữngđường chạy dọc theo phương thẳng đứng quá dài có thể làm cho PDA bị treo hoặc không còn ký
tự để nhập vào trước khi ngăn xếp rỗng
Trang 171.3 MỘT ÔTÔMÁT ĐẨY XUỐNG TƯƠNG ỨNG VỚI MỘT VĂN PHẠM PHI NGỮ CẢNH XÁC ĐỊNH.
Tính đến thời điểm này, các PDA chúng ta đã xây dựng được dựa trên các tính chất đốixứng đơn giản của các chuỗi trong các ngôn ngữ được nhận biết hơn là trên bất kỳ đặc tính nàocủa CFG (CFG) hình thành nên ngôn ngữ
Điều đó có nghĩa là, không phải ngôn ngữ phi ngữ cảnh nào cũng có thể được nhận biếtbởi một PDA Tuy nhiên, điều này chúng ta sẽ chứng minh trong phần này Bắt đầu với một vănphạm phi ngữ cảnh G, chúng ta muốn xây dựng một PDA có thể kiểm tra một chuỗi tùy ý và xácđịnh xem liệu nó có thể được dẫn xuất từ G Chiến lược cơ bản là mô phỏng dẫn xuất của mộtchuỗi trong văn phạm xác định
Điều này sẽ đòi hỏi phải đoán các bước của dẫn xuất, và PDA của chúng ta sẽ là khôngđơn định (Như chúng ta thấy trong Phần 7.6, có mốt số dạng văn phạm xác định mà chúng ta cóthể điều chỉnh PDA, giữ lại các tính năng thiết yếu và loại bỏ tính không đơn định Cách tiếpcận trên đặc biệt rất hữu hiệu trong các trường hợp này, bởi vì với một chuỗi x trong ngôn ngữ,theo dõi sự dịch chuyển của máy ở đầu vào x không những cho phép chúng ta xác nhận sự cómặt của x trong ngôn ngữ, mà con bộc lộ một dẫn xuất của x trong văn phạm Bởi vì ngôn ngữthân thuộc như người bạn, tuy nhiên để tìm ra PDA đơn định nói chung là quá sức mong đợi)
Theo tiến trình mô phỏng, máy sẽ kiểm tra chuỗi đầu vào để đảm bảo rằng nó vẫn cònphù hợp với tiến trình dẫn xuất Nếu chuỗi đầu vào thực sự có dẫn xuất từ văn phạm, và nếu dựđoán của PDA mô phỏng chính xác dẫn xuất này, quá trình kiểm tra sẽ xác nhận và cho phépmáy chuyển sang trạng thái chấp nhận
Có ít nhất hai cách tự nhiên một PDA có thể mô phỏng một dẫn xuất trong văn phạm.Một bước trong mô phỏng tương đương với xây việc dựng một phần của cây dẫn xuất và hai
phương pháp tiếp cận thứ tự từ trên xuống và từ dưới lên mà trong đó các phần được xây dựng.
Chúng ta sẽ bắt đầu với cách tiếp cận từ trên xuống PDA bắt đầu bằng cách đẩy ký hiệubắt đầu S (ở trên cùng của cây dẫn xuất) vào ngăn xếp (stack), và mỗi bước tiếp theo trong cácdẫn xuất được mô phỏng được thực hiện bằng cách thay thế một biến trên stack (tại một nút nào
đó trong cây) bằng phía bên phải của phép sinh bắt đầu với biến đó (nói cách khác, thêm các nút
Trang 18con của nút đó vào cây) Stack giữ chuỗi hiện hành trong dẫn xuất, ngoại trừ các ký hiệu kếtthúc xuất hiện ở bên trái của chuỗi, chúng trùng với ký hiệu ở đầu vào và bị loại bỏ.
Hai loại dịch chuyển được thực hiện bởi PDA, sau khi S được đặt vào stack, là:
1 Thay thế một biến A trên cùng của stack bằng phần bên phải α của phép sinh A → α Tại đây,việc dự đoán sẽ xuất hiện
2 Lấy ký hiệu kết thúc ra khỏi stack, miễn là nó trùng với ký hiệu đầu vào tiếp theo Cả hai kýhiệu này sau đó bị loại bỏ
Tại mỗi bước, chuỗi các ký hiệu đầu vào đã được đọc (trùng với các ký hiệu kết thúc nằm tạiđầu chuỗi của dẫn xuất), tiếp theo là nội dung của stack, không kể Z, tạo thành chuỗi hiện hànhtrong dẫn xuất Khi một biến xuất hiện trên đầu của stack, đó là vì các ký hiệu kết thúc trước đótrong chuỗi hiện hành đã trùng, và do đó nó là biến trái nhất trong chuỗi hiện hành Vì vậy, cácdẫn xuất được mô phỏng là một dẫn xuất trái nhất Nếu tại một số điểm không còn bất kỳ phầnnào của chuỗi hiện hành còn lại trên stack, dẫn xuất phải thành công trong việc tạo ra chuỗi đọcđầu vào, và các PDA có thể chấp nhận
Chúng ta sẵn sàng cung cấp một mô tả chính xác hơn của PDA đẩy xuống này và để
chứng minh rằng các chuỗi nó chấp nhận chính xác là những chuỗi sinh ra bởi văn phạm
Định nghĩa 7.4 PDA Tiểu luận Lý thuyết tính toán đẩy Tiểu luận Lý thuyết tính toán xuống tương ứng với một CFG
Đặt G = (V,,S,P) là 1 văn phạm phi ngữ cảnh Chúng ta định M = (Q,,,q0,Z0,A,) như sau:
Q={q0,q1,q2} A={q2} =V {Z0} (Trong đó Z0 V )
Dịch chuyển ban đầu của M là đặt S vào stack và dịch chuyển sang q1: (q0,,Z0) = {(q1,SZ0)}.Dịch chuyển duy nhất tới trạng thái chấp nhận q2 là từ q1, khi stack trống rỗng ngoài trừ Z0: (q1,
,Z0) = {(q2,Z0)} Cách khác, dịch chuyển duy nhất của M là như sau:
1 Với mỗi A thuộc V, (q1,,A)={(q1,) | A → α là phép sinh trong G}
2 Với mỗi α , (q1,a,a)={(q1,A)}
Định lý 7.2
Cho G = (V,,S,P) là một văn phạm phi ngữ cảnh Khi đó, PDA đẩy xuống M được mô tả trong
Định nghĩa 7.4 chấp nhận L(G)
Trang 19Chứng minh
Trước tiên, chứng minh L(G) L(M) If x là 1 chuỗi bất kỳ trong L(G), thì bước cuối cùng
trong dẫn xuất trái nhất của x là:
yAz yy’ = xtrong đó y, z và y’ là các chuỗi ký hiệu, và bước thông thường sẽ là:
yAα yy’
ở đây, một lần nữa y và y’ là những chuỗi kết thúc, trong đó yy’ là tiếp đầu ngữ của x, và chuỗi
bắt đầu với 1 biến Chúng ta có thể lấy trường hợp thứ 2 như một đại diện cho trường hợp 1,nếu chúng ta nói rằng hoặc là A, hoặc là bắt đầu bằng 1 biến
Cái chúng ta muốn chứng minh trong trường hợp này là một chuỗi dịch chuyển tuần tự của PDA
đã ảnh hưởng tới việc đọc chuỗi kết thúc yy’, so khớp với ký tự kết thúc trong stack, để chuỗi trong stack (thực chất là Z0) và đặt PDA ở trạng thái q1 Nó sẽ tiếp theo, từ trạng thái đặc biệttrong đó = A, tức là với 1 chuỗi đầu vào x, PDA có thể đạt đến cấu hình (q1, A, Z0); do đó, bởi
vì sự dịch chuyển tới q2 như đã mô tả ở phần định nghĩa, PDA chấp nhận x
Một phát biểu chính xác nói điều này và thích hợp cho việc chứng minh bằng quy nạp sau đây:Với bất kỳ n ≥ 1, nếu x L(G) Và bước thứ n trong dẫn xuất trái nhất của x là yAα yy’,trong đó x = yy’z, yy’ là chuỗi kết thúc, và hoặc là A, hoặc là bắt đầu bằng 1 biến, trong đó
Với bước chứng minh cơ bản, đặt n = 1 Bước đầu tiên trong dẫn xuất của x là sử dụng phépsinh dạng S y’, vì thế chuỗi y trong (7.1) là rỗng
Sử dụng dịch chuyển khởi đầu trong định nghĩa của M và dịch chuyển của dạng (1), chúng tacó:
Tuy nhiên, sử dụng nhiều bước dịch chuyển của dạng (2) như là có các ký hiệu trong y’, PDA có
thể lấy từ cấu hình cuối cùng (q 1 , Z, ), và chúng ta có thể kết luận rằng:
(q0,x,Z0) = (q0,yy’z,Z0) *(q1,z,Z0) (7.1)
Trang 20Bây giờ giả sử rằng k ≥ 1 và phát biểu của chúng ta là đúng với mọi n ≤ k Chúng ta mong muốnchứng minh rằng nếu bước thứ (k+1) trong dẫn xuất trái nhất của x là yAα yy’, thì (7.1) làđúng Xét bước thứ k trong dẫn xuất trái nhất của x, nó có dạng:
wBy ww’’ = ww’AαTrong đó ww’ = y, Điều đó có nghĩa rằng x = ww’(y’z), và giả thuyết quy nạp ngụ ý rằng:
Nếu phép sinh đã sử dụng trong bước thứ (k+1) thi A→ α’, vì thế αα’ = y’ß, sau đó sử dụng dịchchuyển dạng (1), chúng ta có:
Bây giờ, cũng giống như trong bước cơ bản, chúng ta đạt được cấu hình (q1, z, Z0) bằng cách
sử dụng dịch chuyển dạng (2), và hoàn tất chứng minh rằng L(G) L(M)
Kế tiếp, chứng minh rằng L (M) L (G) Nói đại khái, điều này có nghĩa chúng ta cần chứng
minh ngược lại phát biểu trước đó; hay nói cách khác, cấu hình (q1, z, Z0) chỉ có thể xảy ra khi
và chỉ khi có một số dẫn xuất trái nhất trong văn phạm sinh ra các chuỗi y , trong đó x = yz Đểchính xác, chúng ta chứng minh như sau:
Với bất kỳ n ≥ 1, nếu có 1 chuỗi tuần tự n dịch chuyển dẫn từ cấu hình (q0,x,Z0) tới (q1, z, Z0)thì y *, x=yz và S *G y
Bước cơ bản khá dễ, bởi vì chỉ có dịch chuyển duy nhất sinh ra cấu hình bên phải là dịch chuyểnkhởi đầu của M; trong trường hợp này z = x và = S, vì thế y có thể được lựa chọn để trở thành
A
Giả sử rằng k ≥ 1, và phát biểu của chúng ta là đúng với mọi n ≥ k Cũng giả sử rằng một sốdịch chuyển tuần tự (k + 1) sinh ra cấu hình (q1, z, Z0) Chúng ta phải chứng minh rằng x = yz,với một số y và S * y
Có 2 khả năng cho bước thứ (k + 1) trong chuỗi tuần tự dịch chuyển Khả năng thứ 1 là cấu hình
tiếp theo-tới-cuối cùng là (q1, az, Z0) và dịch chuyển cuối cùng là dạng (1) Trong trường hợpnày giả thuyết quy nạp ngụ ý rằng đối với một số y’ *, x = y’az và S * y’a Chúng ta cókết luận ngay lập tức bằng cách cho y = y’a