In der Informationstheorie ist ein "Präfixcode" ein Wörterbuch, in dem keiner der Schlüssel ein Präfix eines anderen ist. Mit anderen Worten bedeutet dies, dass keine der Zeichenfolgen mit einer der anderen beginnt.
Dies ist beispielsweise {"9", "55"}
ein Präfixcode, dies {"5", "9", "55"}
ist jedoch nicht der Fall.
Der größte Vorteil dabei ist, dass der codierte Text ohne Trennzeichen aufgeschrieben werden kann und dennoch eindeutig entschlüsselbar ist. Dies zeigt sich in Komprimierungsalgorithmen wie der Huffman-Codierung , die immer den optimalen Präfixcode generiert.
Ihre Aufgabe ist einfach: Bestimmen Sie anhand einer Liste von Zeichenfolgen, ob es sich um einen gültigen Präfixcode handelt.
Deine Eingabe:
Wird eine Liste von Zeichenfolgen in jedem vernünftigen Format sein .
Enthält nur druckbare ASCII-Zeichenfolgen.
Enthält keine leeren Zeichenfolgen.
Ihre Ausgabe ist ein Wahrheits- / Falsch- Wert: Wahrheit, wenn es ein gültiger Präfix-Code ist, und Falsch, wenn dies nicht der Fall ist.
Hier sind einige echte Testfälle:
["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"]
Hier sind einige falsche Testfälle:
["4", "42"]
["1", "2", "3", "34"]
["This", "test", "case", "is", "false", "t"]
["He", "said", "Hello"]
["0", "00", "00001"]
["Duplicate", "Duplicate", "Keys", "Keys"]
Dies ist Code-Golf, daher gelten Standard-Regelungslücken und die kürzeste Antwort in Bytes gewinnt.
001
eindeutig entzifferbar? Es könnte entweder 00, 1
oder sein 0, 11
.
0, 00, 1, 11
alle als Schlüssel haben, ist dies kein Präfixcode, da 0 ein Präfix von 00 und 1 ein Präfix von 11 ist. Bei einem Präfixcode beginnt keiner der Schlüssel mit einem anderen Schlüssel. Wenn Ihre Schlüssel also 0, 10, 11
beispielsweise ein Präfixcode sind, der eindeutig entschlüsselbar ist. 001
ist keine gültige Nachricht, aber 0011
oder 0010
eindeutig entschlüsselbar.