Có một phương pháp đã biết để xây dựng một ngữ pháp được cung cấp một tập hợp hữu hạn các chuỗi hữu hạn không?


10

Từ đọc của tôi, có vẻ như hầu hết các ngữ pháp đều quan tâm đến việc tạo ra một số lượng chuỗi vô hạn. Điều gì nếu bạn làm việc theo cách khác?

Nếu được cung cấp n chuỗi có độ dài m, có thể tạo ra một ngữ pháp sẽ tạo ra các chuỗi đó và chỉ các chuỗi đó.

Có một phương pháp được biết đến để làm điều này? Lý tưởng nhất là một tên kỹ thuật tôi có thể nghiên cứu. Ngoài ra, làm thế nào tôi có thể thực hiện tìm kiếm tài liệu để tìm một phương pháp như vậy?


5
Trivial: Xây dựng bảng BNF của chuỗi.
Joshua

Chuỗi là hữu hạn theo định nghĩa. Và bạn không thể có được một tập hợp vô hạn được "đưa ra" trừ khi bạn có một số mô tả hữu hạn về nó.
vonbrand

Câu trả lời:


11

Điều này nằm trong chủ đề chung của "cảm ứng ngữ pháp"; tìm kiếm trên cụm từ đó sẽ bật lên hàng tấn văn học. Xem, ví dụ: Tạo ngữ pháp miễn phí ngữ cảnh , https://en.wikipedia.org/wiki/Grammar_indraction , https://cstheory.stackexchange.com/q/27347/5038 .

Đối với các ngôn ngữ thông thường (thay vì ngôn ngữ không ngữ cảnh), xem thêm Có phải regex golf NP-Complete không? , DFA nhỏ nhất chấp nhận các chuỗi đã cho và từ chối các chuỗi đã cho khác , Có những cải tiến về thuật toán của Dana Angluin để học các bộ thông thườnghttps://cstheory.stackexchange.com/q/1854/5038 .


Việc tạo ra các ngữ pháp cho các ngôn ngữ thông thường có thể vô hạn là khó và hoàn toàn khác với vấn đề này.
Revierpost

Tôi đánh dấu câu hỏi này là chính xác, bởi vì mặc dù nó không trả lời trực tiếp câu hỏi (hóa ra nó có thể giải quyết được tầm thường như đã nêu), nhưng nó cung cấp cho tôi loại thuật ngữ tôi cần nghiên cứu thêm.
Gustav Bertram

8

S={s1,s2....sm}AAs1|s2|...sn


Tôi nghĩ rằng tôi cần phải xem lại sách giáo khoa phân tích của tôi. Nhìn lại câu trả lời này có vẻ rõ ràng. Cảm ơn bạn!
Gustav Bertram

3

Có rất nhiều cách, vì vậy bạn cần áp đặt các tiêu chí bổ sung về chất lượng của kết quả.

  1. wSwS
  2. wXww1xw2xXw1xXw2wXwϵXϵ
  3. Cây Suffix: giống nhau, đảo ngược.
  4. Áp dụng một thuật toán được đảm bảo để tạo ra một ngữ pháp có kích thước tối thiểu, ví dụ với số lượng quy tắc tối thiểu. Tôi không biết điều này khó đến thế nào.

Vâng, sau câu trả lời đầu tiên, rõ ràng tôi nên áp đặt các tiêu chí bổ sung, nhưng cảm thấy không công bằng khi thay đổi câu hỏi sau câu trả lời đầu tiên.
Gustav Bertram

Tuy nhiên, tôi rất muốn biết độ phức tạp thời gian của việc tìm kiếm một ngữ pháp tối thiểu cho một chuỗi các chuỗi hữu hạn nhất định ... giả sử, trong tổng chiều dài của các chuỗi hoặc trong tổng độ dài của kết quả.
Revierpost

3

Những gì bạn đang hỏi giống như một chỉ mục tìm kiếm. Thật vậy, Bộ chuyển đổi trạng thái hữu hạn có thể được tạo và sử dụng để nhận dạng văn bản được cung cấp cho chúng. Đối với đề thi, Lucene sử dụng thuật toán này: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698

Để sử dụng thực tế, hãy xem bài đăng trên blog này của Andrew Gallant: Index 1.600.000.000 Khóa với Automata và Rust

Trong bài đăng, ông mô tả một phương pháp để xây dựng một FSA được cung cấp một văn bản để nó nhận ra tất cả các từ. Kết quả cuối cùng là xây dựng một FST tối thiểu xấp xỉ từ các khóa được sắp xếp trước theo thời gian tuyến tính và trong bộ nhớ không đổi.

FSA chia sẻ tiền tố và hậu tố

Việc triển khai có sẵn trong fstthư viện của anh ấy : https://github.com/BurntSushi/fst


1

Một câu trả lời cho câu hỏi được đặt ra bởi Revierpost cũng trả lời câu hỏi ban đầu:

Chúng tôi xây dựng từ điển tự động như sau:

  1. xây dựng một máy tự động đọc và chấp nhận chính xác chuỗi đầu tiên.
  2. đối với chuỗi tiếp theo, hãy bắt đầu đọc nó với automaton cho đến khi đối với một số chữ cái không có chuyển đổi. bắt đầu một nhánh mới cho phần còn lại của chuỗi. lặp lại cho đến khi tất cả các chuỗi được xử lý

Kích thước tối đa của máy tự động là tổng chiều dài của chuỗi đầu vào. Giả sử rằng bạn có thể mô phỏng các hiệu ứng chuyển tiếp và tạo các hiệu ứng mới trong thời gian không đổi, thì thời gian chạy là tổng chiều dài của các chuỗi đầu vào. Không có trường hợp tốt nhất hoặc tồi tệ nhất.

Máy tự động này là tối thiểu. vì trong trường hợp thông thường automata và ngữ pháp tương ứng gần như một với nhau, điều này cũng đúng với ngữ pháp, Tất nhiên, không thể xây dựng một cái gì đó có kích thước n trong thời gian ngắn hơn n.


Cảm ơn. Theo như trả lời câu hỏi này: tôi không thấy những gì điều này đóng góp trên rebierpost. Ngoài ra, chúng tôi không muốn câu trả lời phản hồi hoặc nhận xét về câu trả lời khác: đây không phải là một diễn đàn thảo luận. Cách để làm điều đó sẽ là đăng một câu hỏi mới và sau đó tự trả lời nó. Tôi nhận ra rằng có thể không rõ ràng. [Điều đó nói rằng, tôi không thấy câu trả lời của bạn trả lời câu hỏi của người quản lý vấn đề như thế nào. Vấn đề ở cuối câu trả lời của Revierpost là tìm ra một ngữ pháp với số lượng quy tắc tối thiểu. Câu trả lời của bạn cho thấy cách xây dựng DFA với số lượng trạng thái tối thiểu. (còn tiếp)
DW

1
Tất nhiên chúng ta có thể chuyển đổi DFA đó thành một ngữ pháp thông thường, nhưng điều gì khiến bạn nghĩ nó sẽ tối thiểu về số lượng quy tắc trong ngữ pháp? Có vẻ như điều đó cần bằng chứng.]
DW

Những gì câu trả lời của tôi đóng góp là thời gian chạy, tôi nghĩ. Bạn nói đúng, một số điều tôi nói sẽ cần một số bằng chứng. Nhưng sự tương ứng giữa các chuyển đổi Finite Automata và các quy tắc Ngữ pháp thông thường rất rõ ràng đối với tôi (nếu sau này chỉ có thể tạo một thiết bị đầu cuối cho mỗi quy tắc như trong hầu hết các định nghĩa); sau đó, bất kỳ ngữ pháp nhỏ hơn của tôi sẽ cung cấp cho một máy tự động nhỏ hơn so với ngữ pháp tối thiểu. Vì vậy, tôi nghĩ rằng ngữ pháp từ máy tự động tối thiểu (tôi không chứng minh rằng của tôi là tối thiểu) cũng sẽ là tối thiểu. - Tôi sẽ giữ lời khuyên của bạn liên quan đến câu trả lời trong đầu, cảm ơn
Peter Leupold

Khái niệm tối thiểu cho DFA là liên quan đến số lượng các tiểu bang . Điều này có nghĩa là sự tối thiểu liên quan đến số lần chuyển đổi trong DFA, hay sự tối thiểu của số lượng quy tắc trong ngữ pháp kết quả? Tôi nghĩ rằng chúng ta phải theo dõi số liệu của bạn là gì, vì nếu không, tôi lo lắng chúng ta sẽ so sánh táo với cam.
DW

Đúng, Ngữ pháp sẽ là tối thiểu trong termson non-terminal. Đối với các quy tắc, điều này là không rõ ràng.
Peter Leupold
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.