Normal dil ile CFG dilinizin kesişimini hesaplayın Σki = 0birk (bu, devlet sayısının kve "çıkmaz sokak" durumunun eklenmesi). Şimdi sonucun boş olup olmadığını kontrol edin: bir dilbilgisine dönüştürün (sonucun polinom boyutuna sahip olacağını düşünüyorum) ve epsilon yapımlarından "backtrack".
Edit: Kaveh bu polinom olduğunu söyledi k, öyleyse k girdi olarak verilir, algoritma üsteldir | k |. Ancak Kaveh bunu düzeltmenin bir yolunu buldu. Orijinal otomatı bir CFG'ye dönüştürün ve tüm terminalleri sabit bir terminalle değiştirin. Şimdi, her terminal olmayan tarafından oluşturulan bir sözcüğün minimum boyutunu aşağıdaki gibi bulmak için yinelemeli bir algoritma kullanın.
Tüm uzunlukları şununla başlat ∞ve daha sonra tüm uzunlukları açık bir şekilde tekrarlayın: bir üretim verildi A →birtΠBben (sipariş önemli değil), koy f( A ) = dk ( f( A ) , t + ∑ f(Bben) ). İstem: bu, yinelemelerinde birleşir , burada , terminal olmayanların sayısıdır. Bunun nedeni, en az uzunluktaki kelimeyi üreten bir ağaçta iki uçlu terminalin kullanılmamasıdır; her "kenar" işlemek için en fazla bir yineleme gerektirir (bazı kenarlar paralel olarak "güncellenebilir").O ( n )n