Sind alle Morse-Code-Zeichenfolgen eindeutig entschlüsselbar? Ohne die Räume,
......-...-..---.-----.-..-..-..
könnte sein, Hello World
aber vielleicht ist der erste Buchstabe ein 5
- in der Tat sieht es sehr unwahrscheinlich aus, dass eine willkürliche Folge von Punkten und Strichen eine eindeutige Übersetzung haben sollte.
Man könnte möglicherweise die Kraft-Ungleichung verwenden, aber das gilt nur für Präfix-Codes .
Morsecode mit Leerzeichen ist ein Präfixcode, in dem Nachrichten immer eindeutig dekodiert werden können. Sobald wir die Leerzeichen entfernen, ist dies nicht mehr wahr.
Gibt es eine Möglichkeit, alle möglichen Nachrichten aufzulisten, falls ich recht habe und alle Morse-Code-Nachrichten nicht eindeutig dekodiert werden können? Hier sind einige ähnliche Übungen, die ich auf codegolf.SE gefunden habe
quelle
Antworten:
Die folgenden Meldungen sind beide plausibel, haben jedoch eine völlig andere Bedeutung:
quelle
I AM HIS DATE
"Also hat Amelia beschlossen, mit dem alten Noonan zu fliehen , hmmm. Wir sollten das wahrscheinlich für uns behalten."Zitat von David Richerby aus den Kommentaren:
Hier ist ein JavaScript, das Ihnen alle möglichen Interpretationen einer Zeichenfolge von
.
und zeigt-
. Saiten mit einer Länge von bis zu 22 laufen in weniger als einer Sekunde, aber etwas Höheres wird langsam - ich würde zum Beispiel nicht versuchen, HELLO WORLD damit zu entschlüsseln. Sie können eine JavaScript-Konsole in Ihrem Browser öffnen, diese einfügen und dann beispielsweise aufrufendecode('......-...-..---')
. (In diesem Beispiel ist Eintrag # 2446 die beabsichtigte Zeichenfolge "HELLO".)Der Code zum Beschneiden auf nur Zeichenfolgen mit echten Wörtern ist etwas länger, daher setze ich ihn hier ein . Es läuft unter node.js und erwartet eine Datei unter
/usr/share/dict/words-2500
. Das Wörterbuch, das ich benutze, finden Sie hier . Es ist nicht naiv - es verkürzt sich, so dass es bei größeren Eingaben viel schneller läuft .Das Wörterbuch besteht aus einer Liste von 2500 Wörtern, die ich irgendwo im Internet gefunden habe, abzüglich einiger 1-, 2- und 3-Buchstaben-Kombinationen, die ich nicht für Wörter hielt. Dieser Algorithmus reagiert empfindlich darauf, dass zu viele kurze Wörter zur Auswahl stehen, und verlangsamt sich drastisch, wenn Sie beispielsweise jeden einzelnen Buchstaben als Wort zulassen (ich sehe Sie an
/usr/share/dict/words
).Der Algorithmus endet mit der Sortierung nach der Anzahl der Wörter, so dass die "interessanten" hoffentlich ganz oben stehen. Dies funktioniert hervorragend
HELLO WORLD
, wenn weniger als eine Sekunde vergangen ist und die erwartete Phrase als erster Treffer zurückgegeben wird. Daraus habe ich auch gelernt, dassDATA SCIENTIST
(die einzige andere Phrase, die ich ausprobiert habe) Morse die gleichen Codes hat wieNEW REAL INDIA
.Edit: Ich habe ein paar Minuten nach interessanteren gesucht. Die Wörter
SPACES
undSWITCH
sind Morsagramme. Bisher sind sie das längste Einzelwortpaar, das ich gefunden habe.quelle
Es genügt zu bemerken, dass bestimmte kurze Buchstabenkombinationen mehrdeutige Dekodierungen ergeben. Eine einzige mehrdeutige Sequenz reicht aus, aber ich sehe folgendes:
usw. Wie David Richerby in den Kommentaren festhält, entspricht jeder Buchstabe einer Folge von Es und Ts, was den Morsecode zweideutig macht, um beliebige Folgen von Buchstaben zu codieren. Die obigen Kombinationen zeigen, dass dies auch für plausible Buchstabenkombinationen in Englisch zutrifft (z. B.
MEAT
~MITT
). Vielleicht wäre es eine interessante Codierungsübung, alle Zeichenfolgen mit fünf oder weniger Buchstaben zu finden, die mit etwas anderem verwechselt werden könnten, und sich auf Buchstabenkombinationen zu beschränken, die tatsächlich im englischen Text zu finden sind (unter Verwendung eines oder mehrerer Wörter), gruppiert nach Äquivalenzklassen.Mit Ihrem ursprünglichen Beispiel ist es auch so
und während die rechte Seite vielleicht sogar als Teilbotschaft unrealistisch ist, handelt es sich sicherlich um eine Folge englischer Wörter, die ohne Computerhilfe in weniger als 15 Minuten gefunden werden könnten. Dies könnte als Beweis dafür angesehen werden, dass viele Phrasen im Englischen als eine andere (möglicherweise unsinnige) Folge von englischen Wörtern falsch interpretiert werden könnten.
quelle
Morsecode ist eigentlich ein ternärer Code, kein binärer Code, daher sind die Leerzeichen erforderlich. Wenn keine Leerzeichen vorhanden wären, würde sich eine Menge Mehrdeutigkeit ergeben, nicht so sehr bei der gesamten Nachricht, sondern bei einzelnen Buchstaben.
Zum Beispiel sind 2 Punkte ein I, 3 Punkte ein S. Wenn Sie transkribieren und zwei Punkte hören, schreiben Sie sofort "I" oder warten Sie, bis Sie einen weiteren Punkt (oder Strich) hören?
Die Antwort ist, dass jeder Wert durch Leerzeichen getrennt ist, sodass sie zusammen gruppiert sind. Wenn Operatoren Nachrichten in Morse eingeben, machen sie nach jeder Buchstabencodesequenz eine Pause von der gleichen Länge wie ein Bindestrich, um das Ende der Sequenz anzuzeigen.
Selbst wenn Sie ein KI-Programm schreiben, um einen vollständigen Satz nach dem anderen zu betrachten und herauszufinden, was die logische Interpretation der Nachricht ist, würde dies zu vielen geringfügigen Unklarheiten und Rechtschreibfehlern führen
quelle
ein paar Notizen in anderen (gut) Antworten nicht abgedeckt , aber die Forschung Vorwissen im Allgemeinen nicht und zitieren jede Sachen (für mich ein wesentlicher Bestandteil der Computerwissenschaft ).
Diese allgemeine Theorie von CS fällt in die Kategorie der Textsegmentierung und auch "Wortteilung" / "Disambiguierung", obwohl die Theorie dort etwas anders ist, es geht darum, Folgen von Symbolen in Wörter (mit variablen Buchstaben) usw. zu teilen, in denen die Symbole vorkommen sind Einheiten. Hier sind die Zeichenfolgen in Buchstaben aufgeteilt, wobei die Buchstaben eine variable Länge haben. Die Theorie ist jedoch analog, wenn auch nicht genau 1-1. dh Abbildung zwischen Sätzen in Wörtern, variablen Wortbuchstabenlängen und Sätzen in Wörtern, variablen Wort- / Buchstabenlängen.
wie andere darauf hingewiesen haben, kann dies empirisch untersucht werden. und jemand tat das aus einem Blickwinkel (es gibt mehrere Möglichkeiten, dies zu untersuchen) und veröffentlichte die Ergebnisse auf einer Webseite mit einem großen Verzeichnis / einer großen Ergebnistabelle.
wow, "context matters" ... eine fast identische Frage "Übersetzen von Morsecode ohne Leerzeichen" zum Stackoverflow von vor 3 Jahren hat derzeit 0 Stimmen.
quelle
Im Allgemeinen gibt es exponentiell viele mögliche Dekodierungen, aber wenn Sie wirklich wollen, können Sie sie alle auflisten. Sie können sie auch prägnant auflisten, dh für alle eine prägnante Darstellung geben. Da dies nichts weiter als eine Programmierübung ist, fordere ich Sie auf, es selbst zu tun.
Die Tatsache, dass Mehrdeutigkeiten vorliegen, schließt jedoch nicht aus, dass die Nachricht oder zumindest große Teile der Nachricht entschlüsselt werden können. Unter der Annahme eines Wahrscheinlichkeitsmodells für den durch den Morsecode dargestellten Text - zur Sicherheit können wir davon ausgehen, dass er englisch ist und statistische Eigenschaften des Englischen verwendet - kann es möglich sein, die Nachricht im Wesentlichen zu decodieren, obwohl einige lokale Mehrdeutigkeiten unvermeidbar sein können. Der Grund ist, dass die meisten Decodierungen nicht-sinnlichen Klartext entsprechen. Die Möglichkeit besteht darin, den Algorithmus für die dynamische Programmierung aus dem vorherigen Absatz zu erweitern, um die Wahrscheinlichkeit jeder Decodierung abzuschätzen, und dann die maximale Wahrscheinlichkeit für die Decodierung auszuwählen. Dieser Ansatz hat mehr Erfolgschancen, wenn die Nachricht länger wird.
quelle
Wie man die Sprache aller möglichen Dekodierungen definiert / erkennt / generiert.
Ohne Leerzeichen ist der Morsecode eindeutig nicht mehr zu entziffern.
Es ist jedoch möglich, alle möglichen Arten der Dekodierung in komprimierter Form anzugeben. Dies ist tatsächlich ähnlich wie bei der Sprachverarbeitung: Aus einem eindeutigen Strom von Klängen (oder Phonemen) müssen Sie alle Möglichkeiten finden, wie sie in eine Folge von Wörtern zerlegt werden können. Die Algorithmen dafür erzeugen ein sogenanntes Wortgitter. Ein Beispiel finden Sie im Abschnitt "Lexikalische Mehrdeutigkeit" dieser Antwort .
Im Fall von binärem Morsecode (keine Leerzeichen) haben Sie nur Punkte und Bindestriche, aber das Problem ist dasselbe.
Sie können alle Übersetzungen wie folgt erhalten.
Die Details lassen sich leicht herausarbeiten. Aber fragen Sie, ob Sie mehr brauchen.
quelle
Ein Pseudocode für einen Löser, der alle möglichen Interpretationen liefert. Dies basiert auf ein paar kurzen Überlegungen, daher wären zusätzliche Beiträge willkommen. Die Methode akzeptiert zwei Eingaben, eine aus dem bisher übersetzten Text und die zweite aus dem Morsecode.
Dadurch werden alle möglichen Kombinationen von Buchstaben und Zahlen ohne Leerzeichen zwischen "Wörtern" ausgegeben. Wenn Sie die Zweideutigkeit beweisen wollten, würde dies sicherlich tun. Wenn Sie aussagekräftige Nachrichten erhalten möchten, suchen Sie nach Code, mit dem Hashtags in eine lesbare Sprache übersetzt werden sollen.
Unter Verwendung des oben genannten habe ich ein Programm in C # geschrieben, das das oben genannte tut. Ich habe es daran gehindert, 22 Millionen Möglichkeiten für die oben genannte Zeichenfolge zu nutzen, die sich in "Hallo Welt" übersetzen lassen. Das Morse-Code-Äquivalent von "Hallo" ergab 20.569 mögliche Ergebnisse. Ich habe auch die Zahlen nicht aufgenommen. Das wäre höher, wenn ich es ihnen erlauben würde.
quelle