Là regex golf NP-Complete?


27

Như đã thấy trong dải XKCD gần đâybài đăng blog gần đây nàytừ Peter Norvig (và một câu chuyện Slashdot có phần sau), "regex golf" (có thể được gọi là vấn đề tách biểu thức chính quy) là câu đố xác định biểu thức chính quy ngắn nhất có thể chấp nhận mọi từ trong tập A và không có từ nào trong set B. Bài đăng của Norvig bao gồm một thuật toán để tạo ra một ứng cử viên ngắn hợp lý và anh ta lưu ý rằng cách tiếp cận của anh ta liên quan đến việc giải quyết vấn đề Set Cover hoàn chỉnh NP, nhưng anh ta cũng cẩn thận chỉ ra rằng cách tiếp cận của anh ta không xem xét mọi biểu hiện thông thường có thể, và tất nhiên, nó không nhất thiết là thuật toán duy nhất, vì vậy các giải pháp của anh ta không được đảm bảo là tối ưu, và cũng có thể một số thuật toán thời gian đa thức chắc chắn khác có thể tìm ra các giải pháp tương đương hoặc tốt hơn.

Để cụ thể hóa và để tránh phải giải quyết câu hỏi tối ưu hóa, tôi nghĩ rằng công thức tự nhiên nhất của Phân tách biểu thức chính quy sẽ là:

Cho hai tập hợp (hữu hạn) và của một chuỗi trên một số bảng chữ cái , có biểu thức chính xác về độ dài chấp nhận mọi chuỗi trong và từ chối mọi chuỗi trong B không?B Σ k Một BABΣkAB

Có bất cứ điều gì được biết về sự phức tạp của vấn đề tách biệt đặc biệt này? (Lưu ý rằng vì tôi đã chỉ định AB là các chuỗi hữu hạn, nên khái niệm kích thước tự nhiên cho vấn đề là tổng độ dài của tất cả các chuỗi trong AB ; điều này thay đổi mọi đóng góp từ k ). Có vẻ như rất có khả năng với tôi rằng nó NP-đầy đủ (và trong thực tế, tôi mong chờ việc giảm được tới một số loại vấn đề cover) nhưng một số tìm kiếm đã không bật lên bất cứ điều gì đặc biệt hữu ích.


4
Có phải ngay cả trong NP? Đưa ra một biểu thức chính quy, làm thế nào để bạn kiểm tra xem một từ trong ngôn ngữ được mô tả trong thời gian đa thức? Cách tiếp cận tiêu chuẩn - chuyển đổi thành NFA, sau đó là DFA và kiểm tra - mất thời gian theo cấp số nhân tính theo k (?).
Raphael

1
phải hoàn thành PSPACE; xem (Gramlich, Schnitger, tối thiểu hóa NFA và biểu thức chính quy, 2005) tại ggramlich.github.io/Publications/approimumationSTACS05Pres.pdfciteseerx.ist.psu.edu/viewdoc/. (PS: bởi vì một câu trả lời sẽ giải thích tại sao, nhưng tôi không có thời gian để làm như vậy vào lúc này; có lẽ ai đó có thể sử dụng tài liệu tham khảo và giải thích cách thức hoạt động của nó)
hãy đọc

1
Đối với các biểu thức chính quy như được hiểu trong TCS, vấn đề nằm ở NP (Chứng chỉ về kích thước đa thức và có thể kiểm chứng trong thời gian đa thức sẽ là chính biểu thức chính quy). Nó (có thể) không có trong NP nếu chúng tôi sử dụng ví dụ PCRE cho các biểu thức thông thường, bởi vì ngay cả tư cách thành viên thử nghiệm cũng là NP-hard ( perl.plover.com/NPC/NPC-3SAT.html ).
Mike B.

1
@MikeB.: Và chính xác làm thế nào để bạn kiểm tra thời gian đa thức? Bạn có thấy bình luận của @Raphael không?
quay lại

5
(1) Bạn có thể chạy thuật toán xác định trong P để kiểm tra tư cách thành viên của NFA (bắt đầu ở trạng thái bắt đầu và nhớ tất cả các trạng thái bạn có thể ở sau khi sử dụng ký hiệu của từ. Đạt đến cuối, kiểm tra xem bạn có đạt được ít nhất không một trạng thái cuối cùng.) (2) Nó phụ thuộc vào định nghĩa của "biểu thức chính quy" - chúng ta sử dụng một trong những nhà khoa học máy tính, hay một trong những lập trình viên? Chúng tôi chỉ cho phép các ngôn ngữ thông thường hoặc (một tập hợp con) ngôn ngữ nhạy cảm ngữ cảnh (do đó là PCRE)?
Mike B.

Câu trả lời:


15

Giả sử biến thể TCS của regex, vấn đề thực sự là NP-đầy đủ.

Chúng tôi giả định rằng regexes của chúng tôi có chứa

  • thư từ , phù hợp với bản thân,Σ
  • , biểu thị công đoàn,+
  • , biểu thị nối,
  • , Biểu thị Kleene-Star,
  • , phù hợp với chuỗi rỗngλ

và không có gì khác. Độ dài của biểu thức chính quy được xác định là số lượng ký tự từ . Như trong truyện tranh, chúng tôi xem xét một regex để khớp với một từ, nếu nó phù hợp với một chuỗi con của từ đó. (Thay đổi bất kỳ giả định nào trong số này chỉ ảnh hưởng đến độ phức tạp của việc xây dựng bên dưới, nhưng không ảnh hưởng đến kết quả chung.)Σ

Đó là trong NP rất đơn giản, như được giải thích trong các bình luận (xác minh một ứng cử viên-RE bằng cách dịch nó thành NFA và chạy nó trên tất cả các từ từ B ).AB

Để hiển thị độ cứng NP, chúng tôi giảm Set cover:

Cho một vũ trụ và một bộ sưu tập C các tập con của U , là có một bộ C 'C kích thước k để S C ' S = U ?UCUC'CkSC'S= =Bạn

Chúng tôi dịch một đầu vào cho Set cover thành một cho regex golf như sau:

  • chứa một ký tự cho mỗi tập con trong C và một ký tự bổ sung (ký hiệu là x trong những điều sau đây).ΣCx
  • chứa một từ cho mỗi phần tử e của U . Từ này bao gồm chính xác các ký tự đại diện cho các tập con trong C có chứa e (theo thứ tự tùy ý).MộteBạnCe
  • chứa từ đơn x .Bx
  • chỉ đơn giản là mang qua.k

Sự giảm này rõ ràng là trong P và tương đương cũng khá đơn giản để thấy:

  • c1,Giáo dục,ckc1++ck
  • xMộtkΣMộtC

1
MộtBÔi(n)một1+một2+...,mộttôiMộtÔi(n)k

2
MộtB
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.