Độ khó của việc tìm một từ có độ dài tối đa


10

Báo cáo vấn đề :

Đặt M là một máy tự động đẩy xuống (có khả năng không xác định) và để Một là bảng chữ cái đầu vào của nó. Có một từ wMột* st |w|k được chấp nhận M?

Vấn đề này đã hoàn thành NP chưa? Nó đã được nghiên cứu? Có một thuật toán cho phép tìm một từ như vậy?


Thuật toán của Djikstra có nên làm điều đó không? (Tôi chắc chắn đang hiểu nhầm điều gì đó ở đây!)
alpoge

"Chiều dài tối đa k "?
alpoge

Không có gì đâu, Kaveh. Có, tôi đã quên "nhiều nhất", tôi chỉnh sửa lại.
Lamine

1
Câu trả lời rất dễ - đây có phải là một câu hỏi bài tập về nhà không?
Sariel Har-Peled

Chúng ta có quyền truy cập vào mô tả tự động hay chúng ta chỉ có nó dưới dạng hộp đen?
Raphael

Câu trả lời:


9

Tính toán giao điểm của ngôn ngữ CFG của bạn với ngôn ngữ thông thường (số này để nhân số lượng trạng thái với k và thêm trạng thái "ngõ cụt"). Bây giờ hãy kiểm tra xem kết quả có trống không: chuyển đổi thành ngữ pháp (tôi nghĩ rằng kết quả sẽ có kích thước đa thức) và "backtrack" từ các sản phẩm epsilon.ΣTôi= =0kMộtkk

Chỉnh sửa: Kaveh đã đề cập rằng đây là đa thức tính bằng , vì vậy nếu k được đưa ra làm đầu vào, thuật toán sẽ theo cấp số nhân trong | k | . Tuy nhiên, Kaveh đã tìm ra cách khắc phục. Chuyển đổi máy tự động ban đầu sang CFG và thay thế tất cả các thiết bị đầu cuối bằng một thiết bị đầu cuối cố định. Bây giờ sử dụng thuật toán lặp để tìm kích thước tối thiểu của một từ được tạo bởi mỗi thiết bị đầu cuối, như sau.kk|k|

Khởi tạo tất cả các độ dài với , và sau đó lặp đi lặp lại cập nhật tất cả các độ dài một cách rõ ràng: đưa một sản xuất A một t Π B i (thứ tự không quan trọng), đặt f ( A ) = min ( f ( A ) , t + f ( B i ) ) . Yêu cầu: điều này hội tụ trong các lần lặp , trong đóMộtmộttΠBTôif(Một)= =tối thiểu(f(Một),t+Σf(BTôi))Ôi(n)nlà số lượng thiết bị đầu cuối không. Lý do là trong một cây tạo ra từ có độ dài tối thiểu, không có thiết bị đầu cuối nào được sử dụng hai lần; mỗi "cạnh" cần nhiều nhất một lần lặp để xử lý (một số cạnh có thể được "cập nhật" song song).


Tôi cũng nghĩ rằng biến đổi PDA CFG là đa thức. Cảm ơn! Vì vậy, vấn đề là ở . P
Lamine

Ok, vì có một cách tính trực tiếp độ dài thấp nhất, không phải là một đầu vào. Nhưng tôi không hiểu tại sao thay thế tất cả các thiết bị đầu cuối bằng một thiết bị cố định. Thuật toán sẽ hoạt động chính xác với các thiết bị đầu cuối ban đầu. |k|
Lamine

Bạn nói đúng, nó thực sự không quan trọng.
Yuval Filmus

5

Thay đổi tất cả các ký tự bảng chữ cái thành một ký tự cụ thể. Bây giờ, bạn đã xác định được PDA trên một ký tự. Ngôn ngữ của nó là một ngữ pháp không ngữ cảnh. Tuy nhiên, ngữ pháp miễn phí ngữ cảnh trên một ký tự là thường xuyên. Vì vậy, chuyển đổi CFG thành ngôn ngữ thông thường, sau đó kiểm tra xem nó có chứa một từ có độ dài k không.

Bây giờ, tất cả các chuyển đổi này có xu hướng yêu cầu thời gian theo cấp số nhân, nhưng dường như vấn đề của tôi là NP không hoàn thành. Đặc biệt nếu bạn cho phép thời gian đa thức tính bằng .k

Tôi có thể sai, và tôi xin lỗi vì câu trả lời nhanh chóng ban đầu của tôi ...

BTW, thực tế là một CFG trên một chữ cái là thường xuyên theo định lý của Parikh. Mặc dù một bằng chứng trực tiếp không quá khó. Xem liên kết để biết thêm chi tiết về định lý của Parikh - đó là một kết quả tuyệt vời ... http://www8.cs.umu.se/kurser/TDBC92/VT06/final/3.pdf


Không, tôi không phải là sinh viên. Vấn đề tôi đã đề cập ban đầu là một vấn đề mạng được mô hình hóa như một vấn đề tự động. Tôi chỉ biết liệu có đáng để tìm kiếm một giải pháp đa thức hay không.
Lamine

5
Không phải câu trả lời này là một nhận xét?
Oleksandr Bondarenko

2
Có nó nên. Sariel, bạn có thể chuyển điều này sang một bình luận hoặc đưa ra câu trả lời không?
Suresh Venkat

@Suresh: Bạn có thể nhận thức được điều này, nhưng bây giờ người điều hành có thể biến câu trả lời thành nhận xét .
Tsuyoshi Ito

Tôi chuyển câu trả lời ban đầu để bình luận. Đây là một câu trả lời mới.
Suresh Venkat

0

Một phương pháp tối ưu có thể là: Chạy thuật toán của Djikstra. Sau đó, với mỗi trạng thái cuối cùng, so sánh khoảng cách với . Nếu có k , chấp nhận. Từ chối.kk

EDIT: Ở trên chỉ hoạt động cho NFA! Xin lỗi vì điều đó.


(nhưng chắc chắn là đa thời gian!)
alpoge

Tôi không chắc rằng thuật toán của Dijkstra có thể giải quyết vấn đề. Nó có thể tìm thấy con đường ngắn nhất giữa trạng thái ban đầu và trạng thái cuối cùng. Tất nhiên, một từ có thể được chấp nhận thông qua các đường dẫn này có thể được tạo ra. Nhưng các đường dẫn này là cơ bản và các từ có thể được chấp nhận thông qua các đường dẫn không theo quy tắc; mặt khác, vấn đề xác định liệu một ngữ pháp không ngữ cảnh có thể tạo ra bất kỳ từ nào có thể quyết định được không, nhưng thực tế không phải vậy.
Lamine

Thử nghiệm trống rỗng cho CFL là quyết định, không?
alpoge

(Hãy tha thứ cho tôi một lần nữa nếu tôi hiểu lầm!)
alpoge

Chà, người ta có thể sử dụng thuật toán 'đánh dấu' để thực hiện việc này (đưa ra CFG) - đánh dấu các thiết bị đầu cuối, sau đó đánh dấu những thứ phát sinh thiết bị đầu cuối, sau đó đánh dấu những thứ phát sinh những thứ được đánh dấu, vv cho đến khi quá trình kết thúc, sau đó kiểm tra nếu biến bắt đầu được đánh dấu. Ngoài ra, bỏ qua câu trả lời của tôi - đó là những gì bạn nên làm cho một NFA (chắc chắn không phải cho một chiếc PDA!).
alpoge
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.