Nella teoria dell'informazione, un "codice prefisso" è un dizionario in cui nessuna delle chiavi è un prefisso di un'altra. In altre parole, ciò significa che nessuna delle stringhe inizia con nessuna delle altre.
Ad esempio, {"9", "55"}
è un prefisso, ma {"5", "9", "55"}
non lo è.
Il più grande vantaggio di ciò è che il testo codificato può essere trascritto senza separatori tra loro, e sarà comunque unicamente decifrabile. Ciò si manifesta in algoritmi di compressione come la codifica Huffman , che genera sempre il prefisso ottimale.
Il tuo compito è semplice: dato un elenco di stringhe, determinare se si tratta o meno di un codice prefisso valido.
Il tuo input:
Sarà un elenco di stringhe in qualsiasi formato ragionevole .
Conterrà solo stringhe ASCII stampabili.
Non conterrà stringhe vuote.
Il tuo output sarà un valore di verità / falsità : verità se è un prefisso valido e falsa se non lo è.
Ecco alcuni veri casi di test:
["Hello", "World"]
["Code", "Golf", "Is", "Cool"]
["1", "2", "3", "4", "5"]
["This", "test", "case", "is", "true"]
["111", "010", "000", "1101", "1010", "1000", "0111", "0010", "1011",
"0110", "11001", "00110", "10011", "11000", "00111", "10010"]
Ecco alcuni casi di test falsi:
["4", "42"]
["1", "2", "3", "34"]
["This", "test", "case", "is", "false", "t"]
["He", "said", "Hello"]
["0", "00", "00001"]
["Duplicate", "Duplicate", "Keys", "Keys"]
Si tratta di code-golf, quindi si applicano scappatoie standard e vince la risposta più breve in byte.
001
sarebbe decifrabile in modo univoco? Potrebbe essere 00, 1
o 0, 11
.
0, 00, 1, 11
tutti come chiavi, questo non è un prefisso-codice perché 0 è un prefisso di 00 e 1 è un prefisso di 11. Un prefisso è dove nessuna delle chiavi inizia con un'altra chiave. Quindi, ad esempio, se le tue chiavi sono 0, 10, 11
questo è un prefisso e univocabilmente decifrabile. 001
non è un messaggio valido, ma 0011
o 0010
è unicamente decifrabile.