Normal gramer tarafından kabul edilen kelimeleri sayma


26

Düzenli bir dil verildiğinde (NFA, DFA, dilbilgisi veya regex), belirli bir dilde sözcükleri kabul etme sayısı nasıl sayılabilir? Hem "tam olarak n harfi ile" hem de "en fazla n harfi ile" her ikisi de ilgi çekicidir.

Margareta Ackerman'ın , bir NFA tarafından kabul edilen kelimelerin sıralanmasıyla ilgili iki makalesi var, ancak onları etkin şekilde saymaları için değiştiremedim.

Düzenli dillerin kısıtlı doğası onları saymayı nispeten kolay hale getirmeli gibi görünüyor - Neredeyse bir algoritmadan daha fazla formül bekliyorum Ne yazık ki şu ana kadar yaptığım aramalar hiçbir şey bulmadı, bu yüzden yanlış terimler kullanmalıyım.


Sanırım " büyüklüğündeki kelimeleri kabul etme sayısı" mı demek istiyorsunuz ? başka bir deyişle, Σ nΣ
Suresh Venkat için

Yanıtlar:


37

İlk durum durum olduğu bir DFA için, , uzunluğu kelime sayısı k duruma girer i olan bir K [ 0 , ı ] , bir DFA transfer matrisi (bir matris olduğu i satırındaki sayı ve j sütunu , i durumundan j ) durumuna geçişe neden olan farklı giriş sembollerinin sayısıdır . Böylece , k kelimesi bile, k kelimesini kolaylıkla kabul edebilir.0kiAk[0,i]Aijijkk sadece bir matris gücü hesaplayarak ve kabul eden durumlara karşılık gelen girişleri ekleyerek orta derecede büyüktür.

Aynı şey , biraz farklı bir matrisle, en uzun sözcükleri kabul etmek için de geçerlidir . Hücrede hem satırda hem de sütunda bir tane, yeni satırda bir tane ve ilk durumun sütununda bir tane ve diğer tüm hücrelerde bir sıfır olacak şekilde matrisin fazladan bir satırını ve sütununu ekleyin. Bu değişikliğin matrise etkisi, her bir güçte başlangıç ​​durumuna bir yol daha eklemektir.k

Bu NFA'lar için işe yaramıyor. Yapılacak en iyi şey sadece bir DFA'ya dönüştürmek ve ardından matris güçlendirme algoritmasını uygulamaktan şüpheleniyorum.


2
Mükemmel cevap: okuduğunuzda sadece bir kez açıktır.
Charles

1
Bir DFA'dan başka bir girdi girdiyseniz, bu yaklaşımın üstel en kötü durum çalışma zamanı vardır. Bu senin için bir sorun değil mi, @Charles? Size düzenli ifadeler, NFA ve dilbilgileri sorularınızı da ekliyor gibi görünüyorsunuz ve ayrıca etkili bir yol istiyorsunuz.
Raphael,

17

Let durumu başlangıç ile (nondeterministic) sonlu otomasyon olarak q 1 , Q, KS ve δ S x Σ x S .A=(Q={q1,,qn},Σ,δ,QF)q1QFQδQ×Σ×Q

Let başlangıç kabul edilebilir tüm kelimeler için üretici fonksiyon q i olduğu, n, kendi seri genleşme inci katsayısı [ z n ] S i = | { w | w | = N ağırlık  kabul  q i } | .Qi(z)qin[zn]Qi=|{w|w|=nw accepted from qi}|

Açıkça:

Qi(z)=[qiQF]+(qi,a,qj)δxQj(z)

Elde edilen (lineer) denklem sistemini için çözün (Mathematica veya benzeri bir araç kullanarak). Daha sonra, [ z , n ] S 1 arzu edilen miktardır.Q1[zn]Q1

Bu, Chomsky ve Schützenberger (1963) tarafından gramerler için tanıtılan bir tekniğe dayanmaktadır; sonlu otomatlara kolayca aktarılır.

Düzenleme: Eğer -transitions hesap , sadece ilgili geçiş için toplamda x faktörü bırakın . Eğer kenarları, yani yerine sembolü "sıkıştırılmış" varsa similiarly, bir Σ bir kelime w Σ k bir geçiş üzerinde, yerine x ile x k .εxaΣwΣkxxk


Tarihi notu takdir ediyorum!
Charles,

1
Er, bu aslında pek çok durumda gerçekten iyi çalışan bir yöntemdir (ve bir kez olsun basit). Örneğin, CFG'leri aynı şekilde yapabilirsiniz.
Raphael

1
Anladım, yanlış anladım. Bu durumda, bunu okumak istiyorsanız , C&S'in çalışmalarından daha erişilebilir bulduğum Kuich'i (1970) öneririm . Bunu hatırlamadığım bir kitabında da anlatıyor.
Raphael

1
Polinom zamanında ve DFA yapmadan normal uzunluktaki sözcüklerini sayabildiğinizi mi söylüyorsunuz ? : MO bu karmaşıklığı ilgili bir soruya mathoverflow.net/questions/162186/...n
joro

1
@joro Belirsiz gramerler olması durumunda, bunun doğru olduğunu düşünüyorum, evet.
Raphael

7

Bunun zor bir sayım problemi olduğunu düşünüyorum, bu makaleye bakın: Verilen uzunluktaki normal dizilerin boyutunu saymak # P-tamamlandı: S. Kannan, Z. Sweedyk ve SR Mahaney. Normal dillerde dize sayma ve rastgele nesil. ACM-SIAM Ayrık Algoritmalar Sempozyumu'nda (SODA), sayfa 551-557, 1995.


1
Yukarıdaki yazı verilen uzunluğun aynı olduğu varsayılmaktadır. Bunun yerine uzunluk ikili ise, sorun PSPACE-hard'dir. Bunun iki normal ifadenin denkliğine karar vermenin PSPACE zor olduğunu kanıtladığına inanıyorum. Bu azaltmada, bir dizilim tüm dizeleri kabul etmek, diğeri ise geçerli olmayan dizeleri kabul etmek için w girişindeki PSPACE makinesinin M hesaplama geçmişlerini reddetmek için yapılmıştır. Söz konusu soruna girdi olarak ikinci düzenli ifadeyi ve W üzerinde bulunan hesaplama geçmişinin uzunluğunu kullanmak da bu sorunu PSPACE'i zorlaştırır.
Mikhail Rudoy

3

Aşağıdaki: CMTV , karmaşıklık sınıfı dikkate (ama biraz daha genel bir ortamda, esasen) belirli bir uzunlukta bir giriş kelime nondeterministic sonlu otomatın kabul hesaplamaların sayısını sayma fonksiyonları sınıfıdır. Birçok sonuçlar artık bir sonucu olarak deterministik logspace içinde çevreleme dahil bu karmaşıklık sınıfı hakkında bilinmektedir CDL . Otomatın bu ayarda sabit olduğuna ve giriş kelimesinin tek giriş olduğuna dikkat edin.#NC1

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.