摩尔斯电码(Morse code)
00、背景
先听段录音。

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

我们经常看一些谍战剧,发送情报的时候,一般都是通过电报发送的,电报在传递的过程中,需要发报员用电键发出长短不一的电码,收报员就会听到电报机发出的滴滴滴答答答的声音。
其实电报发出的声音都是"滴"和"答"的组合,"答"的声音是"滴"的三倍长。
发报员要先通过一种方式,将想要发送的情报转成电报的滴答声,收报员在听到滴答声之后,再将它们翻译成正常的文字。
这个过程就是字符编码和字符解码。
01、摩尔斯电码
要想长距离的通信有两个核心问题:
- 信息的编码
- 长距离的传输
摩尔斯电码(Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。由美国发明家萨缪尔·摩尔斯及其助手艾尔菲德·维尔在1836年发明。
摩尔斯电码是一种早期的数字化通信形式,但是它不同于现代只使用0和1两种状态的二进制代码,它的代码包括五种:
- 点(·):1
- 划(-):111
- 字符内部的停顿(在点和划之间):0
- 字符之间的停顿:000
- 单词之间的停顿: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)等。
摩尔斯编码带给我们的启示有:
- 摩尔斯41岁才开始转型,从画家成为发明家,花了5年时间。那说明一切皆有可能。
- 我们做决策时,把资源放到最有价值处,而不是搞平均。
- 管理者的主要职责“决策”,在时间、人力、能力、资源等条件下,求最优解,我们不能“拍脑袋瓜”来做决策,而应该基于数据做理性决策。只要把思维的过程算法化,就可以用计算机来进行决策。
- 世界上有两种发明,一种是知道了新理论,然后试图找到应用;另一种是看到了一种需求,然后看看实现这个目要用到什么理论。我们可以两者结合,参考苏联发明家阿奇舒勒TRIZ理论。
军事体育也叫国防体育,无线电报务训练是其中一种,学习莫尔斯电码(长码、短码、字码)和记录、拍发。1964年—1966年我在山东师范学院附属中学,学习过短码记录、跳伞塔跳伞,小口径步枪射击(校射击运动队队员)。山师附中还有无线电机务队、航空模型队、跳伞运动队。那时,学习苏联的“劳卫制”(准备劳动与卫国体育锻炼标准) 各班学生到学校射击场打气步枪(10米、环形靶)校射击队员在靶场服务。李达副总参谋长到附中视察国防体育活动,我校是山东国防体育运动重点学校。 俄罗斯总统普京在克里米亚半岛回归后宣布,在俄罗斯恢复“劳卫制”。