Esiste un metodo noto per costruire una grammatica dato un insieme finito di stringhe finite?


10

Dalla mia lettura sembra che la maggior parte delle grammatiche si occupi di generare un numero infinito di stringhe. E se hai lavorato al contrario?

Se date n stringhe di lunghezza m, dovrebbe essere possibile creare una grammatica che genererà quelle stringhe e solo quelle stringhe.

Esiste un metodo noto per farlo? Idealmente un nome di tecnica che posso ricercare. In alternativa, come potrei fare una ricerca in letteratura per trovare un tale metodo?


5
Trivial: crea una tabella BNF delle stringhe.
Joshua,

Le stringhe sono definite per definizione. E non puoi ottenere un set infinito da "dare" a meno che tu non abbia una descrizione finita di esso.
vonbrand

Risposte:


11

Indurre grammatiche per forse infinite lingue regolari è difficile e abbastanza diverso da questo problema.
reinierpost,

Sto contrassegnando questa domanda come corretta, perché sebbene non risponda direttamente alla domanda (che risulta banalmente risolvibile come indicato), mi fornisce il tipo di terminologia di cui ho bisogno per fare ulteriori ricerche.
Gustav Bertram,

8

Se il numero di stringhe è finito, dire set puoi sempre trovare una grammatica libera dal contesto che genera tutte quelle stringhe, lascia che A sia un non terminale quindi la regola può essere A s 1 | s 2 | . . . s n . Per un set finito di stringhe puoi persino creare un automa a stati finiti che accetta solo quelle stringhe. Quindi il caso di un set di stringhe finito è davvero banale.S={S1,S2....Sm}UNUNS1|S2|...Sn


Penso di aver bisogno di rivedere il mio manuale di analisi. A posteriori, questa risposta sembra ovvia. Grazie!
Gustav Bertram,

3

Esistono molti modi, quindi è necessario imporre criteri aggiuntivi sulla qualità dei risultati.

  1. Elenco: per ogni stringa nella lingua, avere una regola S w . Sia S il nonterminale iniziale. Fatto.wSwS
  2. wXww1xw2XXw1xXw2wXwϵXϵ
  3. Albero del suffisso: lo stesso, invertito.
  4. Applicando un algoritmo garantito per produrre una grammatica di dimensioni minime, ad esempio con il numero minimo di regole. Non so quanto sia difficile.

Sì, dopo la prima risposta era ovvio che avrei dovuto imporre criteri aggiuntivi, ma mi è sembrato ingiusto cambiare la domanda dopo la prima risposta.
Gustav Bertram,

Tuttavia, mi piacerebbe conoscere la complessità temporale di trovare una grammatica minima per un determinato insieme finito di stringhe ... diciamo, nella lunghezza totale delle stringhe o nella lunghezza totale del risultato.
reinierpost,

3

Quello che stai chiedendo è simile a un indice di ricerca. In effetti, i trasduttori di stato finiti possono essere creati e utilizzati per riconoscere il testo loro inviato. Per esempio, Lucene utilizza questo algoritmo: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698

Per un uso pratico, dai un'occhiata a questo post di Andrew Gallant: indice 1.600.000.000 di chiavi con automi e ruggine

Nel post descrive un metodo per costruire un FSA dato un corpus di testo in modo che riconosca tutte le parole. Il risultato finale è costruire un FST approssimativamente minimo da chiavi preordinate in tempo lineare e in memoria costante.

Prefissi e suffissi di condivisione FSA

L'implementazione è disponibile nella sua fstlibreria: https://github.com/BurntSushi/fst


1

Una risposta alla domanda posta da reinierpost che risponde anche alla domanda originale:

Costruiamo l'automa del dizionario come segue:

  1. costruire un automa che legge e accetta esattamente la prima stringa.
  2. per la stringa successiva, inizia a leggerlo con l'automa fino a quando per qualche lettera non c'è transizione. avvia un nuovo ramo per il resto della stringa. ripetere fino a quando tutte le stringhe vengono elaborate

La dimensione massima dell'automa è la lunghezza totale delle stringhe di input. Supponendo che sia possibile simulare transizioni e crearne di nuove in tempo costante, anche il tempo di esecuzione è la lunghezza totale delle stringhe di input. Nessun caso migliore o peggiore.

Questo automa è minimo. poiché nel caso normale gli automi e le grammatiche corrispondono quasi uno a uno, lo stesso vale per la grammatica. Naturalmente, è impossibile costruire qualcosa di dimensione n in meno di n tempo.


Grazie. Per quanto riguarda la risposta a questa domanda: non vedo che cosa contribuisce a reinierpost. Inoltre, non vogliamo risposte che rispondano o commentino un'altra risposta: questo non è un forum di discussione. Il modo per farlo sarebbe quello di pubblicare una nuova domanda e quindi rispondere da soli. Mi rendo conto che potrebbe non essere ovvio. [Detto questo, non vedo come la tua risposta risponda al problema di cui reinierpost era curioso. Il problema alla fine della risposta di reinierpost era trovare una grammatica con il numero minimo di regole. La tua risposta mostra come creare un DFA con un numero minimo di stati. (continua)
DW

1
Ovviamente possiamo convertire quel DFA in una grammatica regolare, ma cosa ti fa pensare che sarà minimo in termini di numero di regole nella grammatica? Sembra che abbia bisogno di prove.]
DW

Ciò che la mia risposta contribuisce è l'autonomia, credo. Hai ragione, molte cose che dico avrebbero bisogno di alcune prove. Ma la corrispondenza tra le transizioni di Automi finiti e le regole della grammatica regolare è molto chiara per me (se quest'ultima può generare un solo terminale per regola come nella maggior parte delle definizioni); quindi qualsiasi grammatica più piccola della mia darebbe un automa più piccolo di quello minimo. Quindi penso che anche la grammatica dell'automa minimo (non provo che il mio sia minimo) sarà minima. - Terrò presente il tuo consiglio in merito alle risposte, grazie
Peter Leupold

La nozione di minimalità per DFA è rispetto al numero di stati . Ciò implica minimalità rispetto al numero di transizioni nel DFA, o minimalità del numero di regole nella grammatica risultante? Penso che dovremo tenere traccia di quale sia la tua metrica, poiché altrimenti sono preoccupato che confronteremo le mele con le arance.
DW

Corretto, la grammatica sarà minima nei non terminali termson. Per le regole, questo non è chiaro.
Peter Leupold,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.