Ho una collezione di stringhe che hanno molte sottostringhe comuni, e sto cercando di trovare un buon modo per definire i token per comprimerli.
Ad esempio, se le mie stringhe sono:
s1 = "String"
s2 = "Bool"
s3 = "String -> Bool"
s4 = "String -> String"
s5 = "(String -> String) -> String -> [Bool]"
quindi potrei voler usare i token:
$1 = "String"
$2 = "Bool"
$3 = "$1 -> $1"
in modo che le stringhe possano essere definite come:
s1 = "$1"
s2 = "$2"
s3 = "$1 -> $2"
s4 = "$3"
s5 = "($3) -> $1 -> [$2]"
(In effetti, ora è chiaro che la definizione $4 = " -> "
potrebbe essere buona da aggiungere.)
Sto cercando un modo buono (forse il migliore?) per scegliere il definizioni di token. Sono interessato a ridurre al minimo la lunghezza totale delle definizioni token + le definizioni stringa risultanti.
Qualche idea?
Aggiorna
È un po 'correlato a questa domanda SO: codifica Huffman con simboli di lunghezza variabile