摩尔斯电码(Morse code)

00、背景

先听段录音。

其实传输的内容是"Hello123 Leadsoft"。

我们经常看一些谍战剧,发送情报的时候,一般都是通过电报发送的,电报在传递的过程中,需要发报员用电键发出长短不一的电码,收报员就会听到电报机发出的滴滴滴答答答的声音。

其实电报发出的声音都是"滴"和"答"的组合,"答"的声音是"滴"的三倍长。

发报员要先通过一种方式,将想要发送的情报转成电报的滴答声,收报员在听到滴答声之后,再将它们翻译成正常的文字。

这个过程就是字符编码和字符解码。

01、摩尔斯电码

要想长距离的通信有两个核心问题:

  • 信息的编码
  • 长距离的传输

摩尔斯电码(Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。由美国发明家萨缪尔·摩尔斯及其助手艾尔菲德·维尔在1836年发明。

摩尔斯电码是一种早期的数字化通信形式,但是它不同于现代只使用0和1两种状态的二进制代码,它的代码包括五种:

  1. 点(·):1
  2. 划(-):111
  3. 字符内部的停顿(在点和划之间):0
  4. 字符之间的停顿:000
  5. 单词之间的停顿:0000000

我们可以看到:

  • 摩尔斯编码中编码最短的字母是E。
  • 最常用的编码最短,不常用的编码最长

02、摩尔斯简介

摩尔斯,电报之父。

1791年4月27日出生在美国马萨诸塞州,最初职业是画家。

1825年2月,他的妻子在第四个孩子出生不久去世。丧妻之后,让他在一段时间内十分消沉,什么事情都不想做,但是为了养活孩子,所以他要努力的工作赚钱。

1832年10月在一次旅途中,摩尔斯结识了杰克逊,一位电学博士。杰克逊用通俗的语言给摩尔斯介绍了电磁感应现象。摩尔斯被电迷住了,“电的传递速度那么快”,于是,41岁的摩尔斯——一位颇有成就的绘画教授决定放弃他的绘画事业,计划下半辈子发明一种用电传信的方法——电报。他意识到,必须把26个字母的信息传递方法加以简化,这样电报机的结构才会简单一些。

1836年他发布了他的第一项发明“摩尔斯”码。

1844年摩尔斯从华盛顿到巴尔的摩拍发人类历史上的第一份电报。

1872年于纽约逝世。

03、代码实现

代码很easy,就是简单的字符替换。

def morse(kata):
    morseAlphabet = {
        "A": ".-", "B": "-...",
        "C": "-.-.", "D": "-..", "E": ".",
        "F": "..-.", "G": "--.", "H": "....",
        "I": "..", "J": ".---", "K": "-.-",
        "L": ".-..", "M": "--", "N": "-.",
        "O": "---", "P": ".--.", "Q": "--.-",
        "R": ".-.", "S": "...", "T": "-",
        "U": "..-", "V": "...-", "W": ".--",
        "X": "-..-", "Y": "-.--", "Z": "--..",
        " ": "/"
    }
    key = []
    kat = kata.upper()
    for k in kat:
        key.insert(len(key), k)
    for a in key:
        i = key.index(a)
        key[i] = morseAlphabet[a]

    return " ".join(key)


def reverse(m):
    alphabet = {
        ".-": "A", "-...": "B",
        "-.-.": "C", "-..": "D", ".": "E",
        "..-.": "F", "--.": "G", "....": "H",
        "..": "I", ".---": "J", "-.-": "K",
        ".-..": "L", "--": "M", "-.": "N",
        "---": "O", ".--.": "P", "--.-": "Q",
        ".-.": "R", "...": "S", "-": "T",
        "..-": "U", "...-": "V", ".--": "W",
        "-..-": "X", "-.--": "Y", "--..": "Z",
        "/": " "
    }
    kta = m.split(" ")
    for a in kta:
        i = kta.index(a)
        kta[i] = alphabet[a]
    return "".join(kta).title()


while True:
    a = input("输入文本或摩尔斯电码进行转码: ")
    if a[0] == "." or a[0] == "-":
        print(reverse(a))
    else:
        print(morse(a))

04、带给我们的启示

电报的出现,让信息传递的速度得到了前所未有的提高。

原本需要数天甚至数月才能完成的信息传递,现在只需要几分钟就能完成。

这不仅大大提高了人们的工作效率,也促进了社会的快速发展。

信息论中,Shannon老人家发明了信息熵:

熵编码的基本思想就是大概率的符号分配短的码字,小概率的符号分配长的码字。最终使得信源平军码长最短

熵编码有很多种,摩尔斯就是其中一种,另外还有哈夫曼编码 (Huffman)、行程编码 (RLE)等。

摩尔斯编码带给我们的启示有:

  1. 摩尔斯41岁才开始转型,从画家成为发明家,花了5年时间。那说明一切皆有可能。
  2. 我们做决策时,把资源放到最有价值处,而不是搞平均。
  3. 管理者的主要职责“决策”,在时间、人力、能力、资源等条件下,求最优解,我们不能“拍脑袋瓜”来做决策,而应该基于数据做理性决策。只要把思维的过程算法化,就可以用计算机来进行决策。
  4. 世界上有两种发明,一种是知道了新理论,然后试图找到应用;另一种是看到了一种需求,然后看看实现这个目要用到什么理论。我们可以两者结合,参考苏联发明家阿奇舒勒TRIZ理论。
举报
评论 1
  • 军事体育也叫国防体育,无线电报务训练是其中一种,学习莫尔斯电码(长码、短码、字码)和记录、拍发。1964年—1966年我在山东师范学院附属中学,学习过短码记录、跳伞塔跳伞,小口径步枪射击(校射击运动队队员)。山师附中还有无线电机务队、航空模型队、跳伞运动队。那时,学习苏联的“劳卫制”(准备劳动与卫国体育锻炼标准) 各班学生到学校射击场打气步枪(10米、环形靶)校射击队员在靶场服务。李达副总参谋长到附中视察国防体育活动,我校是山东国防体育运动重点学校。 俄罗斯总统普京在克里米亚半岛回归后宣布,在俄罗斯恢复“劳卫制”。

加载失败,请重新刷新