¿Son todas las cadenas de código Morse exclusivamente descifrables? Sin los espacios,
......-...-..---.-----.-..-..-..
podría ser, Hello World
pero tal vez la primera letra es una 5
, de hecho, parece muy poco probable que una secuencia arbitraria de puntos y guiones deba tener una traducción única.
Posiblemente se pueda usar la desigualdad de Kraft, pero eso solo se aplica a los códigos de prefijo .
El código Morse con espacios es un código de prefijo en el que los mensajes siempre se pueden decodificar de forma única. Una vez que eliminamos los espacios, esto ya no es cierto.
En el caso de que tenga razón, y todos los mensajes de código Morse no se puedan decodificar de forma exclusiva, ¿hay alguna manera de enumerar todos los mensajes posibles? Aquí hay algunos ejercicios relacionados que encontré en codegolf.
fuente
Respuestas:
Los siguientes son mensajes plausibles, pero tienen un significado completamente diferente:
fuente
I AM HIS DATE
"Entonces Amelia decidió fugarse con el viejo Noonan , hmmm. Probablemente deberíamos guardar esto para nosotros mismos".Citando a David Richerby de los comentarios:
Aquí hay algunos JavaScript que le indicarán todas las posibles interpretaciones de una cadena de
.
y-
. Cadenas de hasta 22 de longitud se ejecutan en menos de un segundo, pero cualquier cosa más alta que eso comienza a ser bastante lenta; por ejemplo, no trataría de decodificar HELLO WORLD con ella. Puede abrir una consola JavaScript en su navegador, pegar esto y luego llamar, por ejemplodecode('......-...-..---')
,. (En este ejemplo, la entrada # 2446 es la cadena deseada "HOLA").El código para podarlo solo a cadenas de palabras reales es un poco más largo, así que lo puse aquí . Se ejecuta en node.js y espera un archivo en
/usr/share/dict/words-2500
. El diccionario que estoy usando se puede encontrar aquí . No es ingenuo: se poda a medida que avanza, por lo que funciona mucho más rápido en entradas más grandes.El diccionario consta de una lista de las 2500 palabras principales que encontré en Internet en alguna parte, menos algunas combinaciones de 1, 2 y 3 letras que no consideré palabras. Este algoritmo es sensible a tener demasiadas palabras cortas para elegir, y se ralentiza drásticamente si permite, por ejemplo, cada letra individual como palabra (lo estoy mirando,
/usr/share/dict/words
).El algoritmo termina ordenando según el número de palabras, por lo que las "interesantes" estarán en la parte superior. Esto funciona muy bien
HELLO WORLD
, se ejecuta en menos de un segundo y devuelve la frase esperada como el primer éxito. De esto también aprendí queDATA SCIENTIST
(la única otra frase que probé) codifica morse igual queNEW REAL INDIA
.Editar: Busqué más interesantes durante unos minutos. Las palabras
SPACES
ySWITCH
son morsagramas. Hasta ahora son el par de una sola palabra más largo que he encontrado.fuente
Es suficiente observar que ciertas combinaciones cortas de letras dan decodificaciones ambiguas. Una sola secuencia ambigua es suficiente, pero puedo ver lo siguiente:
etc. Como David Richerby señala en los comentarios, cualquier letra es equivalente a una cadena de Es y Ts, lo que hace que el Código Morse sea ambiguo como una forma de codificar secuencias arbitrarias de letras; las combinaciones anteriores muestran que esto es cierto incluso en combinaciones de letras plausibles en inglés (por ejemplo,
MEAT
~MITT
). Quizás un ejercicio de codificación interesante sería encontrar todas las cadenas de cinco o menos letras que podrían confundirse con otra cosa, restringiendo las combinaciones de letras que realmente se pueden encontrar en el texto en inglés (usando una o más palabras), agrupadas por clase de equivalencia.Usando su ejemplo original, también sucede que
y aunque el lado derecho tal vez sea poco realista, incluso como un mensaje parcial, sin duda es una secuencia de palabras en inglés, y una que se puede encontrar en menos de 15 minutos sin ayuda de la computadora. Esto podría tomarse como evidencia de que muchas frases en inglés podrían interpretarse erróneamente como una secuencia diferente (posiblemente sin sentido) de palabras en inglés.
fuente
El Código Morse es en realidad un código ternario, no un código binario, por lo que los espacios son necesarios. Si no hubiera espacios, se generaría mucha ambigüedad, no tanto con todo el mensaje, sino con letras individuales.
Por ejemplo, 2 puntos es una I, pero 3 puntos es una S. Si está transcribiendo y escucha dos puntos, ¿escribe inmediatamente "I" o espera hasta escuchar otro punto (o guión)?
La respuesta es que cada valor está separado por espacios, por lo que se agrupan. Cuando los operadores escriben mensajes clave en Morse, hacen una pausa de la misma longitud que un guión después de cada secuencia de código de letras para indicar el final de la secuencia.
Incluso si escribiera un programa de IA para mirar una oración completa a la vez y descubrir cuál era la interpretación lógica del mensaje, aún habría muchas pequeñas ambigüedades y errores ortográficos que podrían
fuente
algunas notas que no están cubiertos en otras respuestas (bueno), pero que generalmente dont la investigación y el conocimiento previo citan ninguna materia (para mí una parte intrínseca del equipo de ciencia ).
esta teoría general de CS cae en la categoría de segmentación de texto y también "división de palabras" / "desambiguación" aunque allí la teoría es un poco diferente, se trata de dividir secuencias de símbolos en palabras (con letras variables), etc., donde los símbolos son unidades aquí las cadenas se dividen en letras donde las letras tienen una longitud variable, pero la teoría es análoga, aunque no exactamente 1-1. es decir, mapeo entre oraciones en palabras, longitudes de letra variable de palabras y oraciones en palabras, longitudes de palabra / letras variables.
Como otros han señalado, esto puede estudiarse empíricamente. y alguien lo hizo desde un ángulo (hay varias formas de estudiar esto) y "publicó" los resultados en una página web con un gran directorio / tabla de resultados.
wow, "el contexto importa" ... una pregunta casi idéntica "traducir código morse sin espacios" en stackoverflow de hace 3 años actualmente tiene 0 votos.
fuente
En general, hay exponencialmente muchas decodificaciones posibles, pero si realmente lo desea, puede enumerarlas todas. También puede enumerarlos de manera sucinta, es decir, dar una representación sucinta de todos ellos. Como esto no es más que un ejercicio de programación, te reto a que lo hagas tú mismo.
Dicho esto, el hecho de que haya ambigüedad no excluye la capacidad de descifrar el mensaje, o al menos grandes partes del mensaje. Suponiendo un modelo probabilístico para el texto representado por el código Morse, por seguridad, podemos suponer que es inglés y usar propiedades estadísticas del inglés, puede ser posible decodificar esencialmente el mensaje, aunque algunas ambigüedades locales pueden ser inevitables. La razón es que la mayoría de las decodificaciones corresponden a texto sin sentido. La forma de hacerlo es extender el algoritmo de programación dinámica del párrafo anterior para estimar la probabilidad de cada decodificación, y luego elegir la decodificación de máxima probabilidad. Este enfoque tiene más posibilidades de tener éxito a medida que el mensaje se alarga.
fuente
Cómo definir / reconocer / generar el lenguaje de todas las decodificaciones posibles.
Claramente, sin espacios, el código morse ya no es descifrable de manera única.
Sin embargo, es posible dar en forma condensada todas las formas posibles de decodificarlo. Esto es realmente similar a lo que se hace en el procesamiento del habla: a partir de un flujo único de sonidos (o de fonemas), debe encontrar todas las formas en que se puede descomponer en una secuencia de palabras. Los algoritmos para hacer esto producen lo que se llama una red de palabras. Encontrará un ejemplo en la sección "ambigüedad léxica" de esta respuesta .
En el caso del código Morse binario (sin espacios), solo tiene puntos y guiones, pero el problema es el mismo.
La forma en que puede obtener todas las traducciones es la siguiente.
Los detalles se resuelven fácilmente. Pero pregunta si necesitas más.
fuente
Algunos pseudocódigo para un solucionador que dará todas las interpretaciones posibles. Esto se basa en algunos pensamientos rápidos, por lo que sería bienvenido cualquier aporte adicional. El método acepta dos entradas, una del texto traducido hasta el momento y la segunda del código morse.
Esto generará todas las combinaciones posibles de letras y números sin espacios entre "palabras". Si quisieras probar la ambigüedad, esto ciertamente lo haría. Si desea obtener algunos mensajes significativos, intente buscar el código destinado a traducir hashtags a un lenguaje legible.
Usando lo anterior, escribí un programa en C # que hace lo anterior. Dejé de funcionar con 22 millones de posibilidades para la cadena anterior que se puede traducir a hello world. El equivalente del Código Morse de "Hola" resultó en 20,569 resultados posibles. Tampoco incluí los números. Eso sería mayor si los permitiera.
fuente