Sẽ


7

Sẽ L= ={một*b*} được phân loại là ngôn ngữ thông thường?

Tôi bối rối vì tôi biết rằng L={anbn}không thường xuyên Ngôi sao kleene tạo ra sự khác biệt gì?


3
Bạn cần xác định rằng n là một biến miễn phí; nó trông giống như một hằng số trong biểu hiện của bạn làm tôi bối rối.
dùng541686

Câu trả lời:


19

Một ngôn ngữ là thường xuyên, theo định nghĩa, nếu nó được chấp nhận bởi một số DFA. (Đây là ít nhất một định nghĩa phổ biến.) Bạn có thể nghĩ về một DFA chấp nhận ngôn ngữ không?

Một kết quả nổi tiếng (được chứng minh trong nhiều sách giáo khoa) nói rằng ngôn ngữ của một biểu thức chính quy là thường xuyên. Từmột*b* là một biểu thức chính quy, ngôn ngữ của nó phải đều đặn (nếu bạn tin kết quả này).

Cuối cùng, để trả lời câu hỏi của bạn (ngôi sao Kleene tạo ra sự khác biệt gì): trong ngôn ngữ {mộtnbn:n0}, chúng ta cần đếm số lượngmộtcát bS; trong ngôn ngữmột*b* chúng tôi không


1
Thế giới thực thường xuyên biểu hiện là xa thường xuyên. nikic.github.io/2012/06/15/15
Guilherme Bernal

7
@GuilhermeBernal Điều đó đúng. Thật không may, biểu thức "biểu thức chính quy" được sử dụng để biểu thị cả hai loại. Trong câu trả lời của tôi, một biểu thức chính quy là khái niệm được định nghĩa trong lý thuyết ngôn ngữ chính thức.
Yuval Filmus

@GuilhermeBernal: POSIX ERE là thường xuyên. Đó chỉ là BRE, PCRE và những thứ kỳ quặc khác không có.
R .. GitHub DỪNG GIÚP ICE

14

{một*b*} là một ngôn ngữ thông thường, vì nó được tạo bởi một biểu thức chính quy.

Sự khác biệt chính giữa L*= ={một*b*}L= == ={mộtnbn} có phải vậy không L= = yêu cầu đếm một'cát bĐể kiểm tra xem có cùng số lượng chúng không, trong khi đó L*không yêu cầu đếm. Đếm đòi hỏi bộ nhớ không giới hạn khi số lượng ngày càng lớn, nhưng automata hữu hạn chỉ có một lượng bộ nhớ hữu hạn, vì vậy một máy tự động hữu hạn không thể nhận raL= =. Mặt khác, một máy tự động hữu hạn có thể nhận raL* vì điều đó chỉ yêu cầu kiểm tra rằng một(bất kỳ số nào) đến trước b(bất kỳ số nào).

Đó là lý do tại sao ngôi sao Kleene không xác định các ngôn ngữ yêu cầu bộ nhớ không giới hạn để nhận biết - điều đó có nghĩa là bất kỳ số nào, và mỗi lần gặp phải ngôi sao, số lượng có thể khác nhau.


Cảm ơn bạn rất nhiều. Điều đó thực sự giải thích sự khác biệt với tôi!
dùng6268553

"Yêu cầu bộ nhớ không giới hạn" là một cách trực quan tốt để suy nghĩ về nó, nhưng bổ đề bơm là cách bạn thực sự đi về việc chứng minh rằng nó không thường xuyên.
R .. GitHub DỪNG GIÚP ICE

0

Bất kỳ ngôn ngữ nào bạn có thể phát triển DFA.

Chỉ cần kiểm tra xem bạn có thể vẽ DFA cho cả hai ngôn ngữ đó không.

L1= =một*b*

x* biểu thị tất cả sự xuất hiện của bảng chữ cái x

Dây: ε, a, b, aa, ab, bb, ..

nhập mô tả hình ảnh ở đây

Để tạo tập hợp chuỗi thuộc về L1, máy không cần phải theo dõi số a và b. Vì FA chỉ có thể nhớ bảng chữ cái cuối cùng được xử lý, DFA có thể được phát triển.

DFA tồn tại.

Do đó thường xuyên.

L2= =mộtnbn

Dây: ε, aa, bb, aaa, bbb, ..

Để tạo tập hợp chuỗi thuộc về L2, máy cần theo dõi số lượng chữ in để in cùng số lượng b. Nhưng FA chỉ có thể nhớ bảng chữ cái cuối cùng được xử lý.

Để xây dựng một máy chấp nhận L2 chúng ta cần thêm một bộ nhớ nữa, một máy như vậy được gọi là PDA (Đẩy xuống tự động).

Không có DFA tồn tại.

Do đó không thường xuyên.

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.