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.Σki = 0Mộ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 đó∞A → at∏ BTôif( A ) = phút ( f( Một ) , t + Σ f( BTô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).