莫尔斯电码,二叉树和图

二叉树是表示和处理莫尔斯电码的一种优雅方式。新的MATLAB图形对象提供了一种操作二叉树的优雅方法。一个新的应用程序,morse_tree的2.40版本中提供了基于这种方法的克里夫的实验室

内容

EXM章

我有一个莫尔斯电码二叉树MATLAB实验.这篇博客文章的部分内容摘自那一章。但是今天的实现要优雅得多。在EXM我将二叉树表示为单元格数组的单元格数组。现在我使用巧妙的索引到一个线性字符串,以及MATLAB图形对象。生成的代码更短,可读性更强。

二叉树

这就是我们要得到二叉树的图像所要做的。首先,我们创建邻接矩阵并查看其间谍图。

N = 31;J = 2:n;K =底(j/2);A =稀疏(k,j,1,n,n);间谍(A)

然后我们创建并绘制有向图。MATLAB有向图对象及其支持金宝app情节方法,就是做所有的工作。

G =有向图(A);Gp = plot(G);集(gca),“xtick”[],“ytick”[])

这是完整的五层二叉树,因此有$2^5-1$节点。(计算机科学家们不顾自然地把电脑放在树的顶部。)

按照数值顺序,从上到下,从左到右,跟随节点。你在做宽度优先遍历结构的。的继任者具有索引的节点的j有指标2 j而且2 j + 1.这使得老式的线性索引成为可能。

我想保存节点的坐标,以便在下一个图的布局中使用。

x = Gp.XData;y = Gp.YData;

摩尔斯电码

摩尔斯电码在商业上已不再重要,但在爱好者中仍有一些狂热的粉丝。摩尔斯电码是150多年前发明的,不是塞缪尔·f·b·莫尔斯发明的,而是他的同事阿尔弗雷德·韦尔发明的。从那时起,它就被广泛使用。代码由短”。,以及更长的破折号, '-',用长短空格分隔。你可能对国际遇险信号很熟悉。——……,是“SOS”的代号,缩写为“拯救我们的船只”或“拯救我们的灵魂”。但是你有没有注意到一些现代手机的信号是……——……’,即“SMS”的代码,表示“短消息服务”的活动。

直到2003年,在美国,要获得操作业余无线电的许可证,需要对莫尔斯电码有最低程度的熟练程度。在我上初中的时候,我学习了摩尔斯电码来获得我的火腿执照,我从来没有忘记过。

根据维基百科,2004年,国际电信联盟正式将无处不在的电子邮件字符@加入国际摩尔斯电码标准。这是第一次世界大战后第一次增加。

莫尔斯的树

我可以提供一个表来说明。-'是A的密码,'-…'是B的代码,以此类推。但我不打算这样做,我的MATLAB程序没有这样的表格。在我看来,摩尔斯电码是定义由一个包含26个英文大写字母、一个星号和四个空格的MATLAB语句组成。

莫尔斯='* etianmsurwdkgohvf l pjbxcyzq '

开头的星号作为树的根。这四个空格将对应于树底部的四个缺失节点。所以二叉树不是完备的。的自动布局图/图方法不能画出完美的树。这就是我从完整树的图中保存节点坐标的原因。让我们从邻接矩阵中删除这些潜在的未标记节点的行和列,以及坐标。

M = find(morse ==' ');A(:,m) = [];A(m,:) = [];X (m) = [];Y (m) = [];

将字符数组转换为单个字符的单元格数组。

节点= num2cell(莫尔斯);节点(m) =

使用这些节点标签创建有向图。

G =有向图(A,节点);

使用从完整树中保存的布局绘制图形。

情节(G,“xdata”, x,“ydata”, y,...“showarrows”“关闭”);集(gca),“xtick”[],“ytick”[])

如果您沿着链接向下并发出当你向左走,然后破折号往右转,是摩尔斯电码。例如,从根结点开始,向左走一次,再向右走一次。你会到达A,并生成'。-'是A的代码。

摩尔斯电码已经出现在定义字符向量中莫尔斯甚至在我们创建和绘制图形之前。带索引的字符5一个.带索引的字符2 * 5而且2 * 5 + 1R而且W

J = 5;莫尔斯(j)莫尔斯(j: 2 * 2 * j + 1)
ans = 'A' ans = 'RW'

因此,R和W的摩尔斯电码是'.-。'和'.——'。这在前半部分的任何地方都适用莫尔斯.后半部分的人物(还)没有继任者。

扩展

摩尔斯电码可以通过将基本树中的空白替换为26个英文字母之外的字符,并在树中增加两级来扩展。在不同的时代和世界不同的地区,使用了几种不同的扩展名。的维基百科页面摩尔斯电码包括一个二叉树和一些常用的扩展。第五层包括10个十进制数字、几个非拉丁字符和一些标点符号。第六层包括几个标点符号。

morse_tree应用

这是新应用程序的屏幕截图,morse_tree的2.40版本中提供克里夫的实验室.点击标签为“扩展”的切换,会显示树的另外两层和一些扩展,尽管没有维基百科的树那么多。单击树中的某个节点会突出显示该节点,同时播放相应代码的声音。这个屏幕截图突出显示了A。

在树下面的框中输入的文本将被编码并播放声音。

生成代码的速度由当前标记为“5 wpm”的控件设置,即每分钟5个单词。

morse_tree_extended

这里有一个小测验:@符号的莫尔斯电码是什么?下载morse_tree检查你的答案。




发布与MATLAB®R2017a

|

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。