首页
如何制作一个精美的算法动态演示图

算法的动态演示对于我们了解一个算法来说是非常重要的。对于复杂的算法逻辑,如果我们没有经过大量的训练,是无法在大脑中模拟出整个流程的。

像 BFS、DFS、链表等问题,通常我们把演示图画出来就很好解决这类问题了,但是隔一段时间不去接触的话,重新去模拟整个过程还是比较浪费时间的。像 Leetcode 的官方题解中有一个很好的工具,就是可以一帧一帧的去看整个算法的过程。

我们去搜索算法可视化得到的结果也基本都是别人做好的算法动态演示例子,比如:

但是,别人的东西再好,终究是别人的。我们只是作为一个看客去看别人做出来的一个结果而已。如果自己把整个过程画出来是更能够加强我们的理解的。

所以这篇文章分享一下如何利用工具高效地画出一个漂亮的算法动态演示的,比如下图的二叉树前序遍历演示:

我一直想找一个绘图工具,可以像思维导图一样,按下 Tab 键就可以生成一个树的节点,队列或者栈中追加一个元素等等,但是一直没有找到类似的工具。所以只能借助一些绘图工具去处理了。

绘制基本元件

其实最好的做法是 PPT 或者 Keynote 一帧一帧去画就可以了,如果你的元件库足够多的话,还是比较方便的。我通过对比一些绘图工具,最终找到的是亿图图示,它最吸引我的地方就是对于自定义的空间是非常大的,而且内置很多常用的元件。那么接下来就是使用它会绘制一个基本的模板了。

它提供的网格功能和连接线可以自定义连接点是非常方便我们画出一个最开始的原型的。

image_1fp6bjskf1qc95ui1q3r1kuk10rq13.png-74.9kB

绘制每一帧

动态的演示结果可以绘制成一帧一帧的图片,通过复制粘贴然后局部修改一下就行了

image_1fp6buh5o1al29mhm01e9d9k51g.png-73.8kB

制作动画

亿图图示有一个功能非常棒,就是可以制作成幻灯片。选中每一帧点击添加幻灯片就可以了,注意每一帧的动画宽高要相等,并且要对齐,不然幻灯片看的效果就是页面的元素跳来跳去的。

image_1fp6c05i517kp6ikstp179a8v21t.png-74.7kB

导出为 gif

制作完动画后可以导出为 PPT,在 mac 上用 keynote 打开后可以导出为 gif

image_1fp6c5f341uvro6mlu41f1pp82a.png-161.5kB

image_1fp6c6mrl1g4fg932ji1en71gke2n.png-42.6kB

需要注意的是,它每一帧的上限时间为 1s,比如我们有 4 帧,导出的 gif 时间就是 4s。如果想要持续时间变得更长,我们就需要添加过渡动画了。

选中所有帧,我们添加一个过渡动画,在这里可以控制延迟的时间,比如 2s。

image_1fp6cdg2mk8m2em1l2212bt1gk83h.png-26.5kB

然后导出的时候,最大的可持续时间就是 2 x 4 = 8s

image_1fp6cgbs91lt11pmk1a6n1n2g1vq03u.png-42.5kB

压缩 gif

gif 导出后的文件体积一般都比较大,在 1M 以上。我们可以通过压缩工具对其进行压缩,比如这个工具:Optimizilla,可以压缩 90% 的体积,效果还是非常棒的。