什么是计算机算法,它们是如何工作的?
已发表: 2022-01-29除非您对数学或编程感兴趣,否则“算法”这个词对您来说可能是希腊语,但它是您阅读本文所使用的所有内容的组成部分之一。 这是对它们是什么以及它们如何工作的快速解释。
免责声明:我不是数学或计算机科学老师,所以并非我使用的所有术语都是技术性的。 那是因为我试图用简单的英语来解释所有对数学不太熟悉的人。 话虽如此,其中涉及一些数学,这是不可避免的。 数学极客,请随时在评论中更正或更好地解释,但请保持简单,以便我们中间不喜欢数学。
图像由伊恩 Ruotsala
什么是算法?
“算法”这个词的词源类似于“代数”,只是它指的是阿拉伯数学家花剌子模本人(只是一个有趣的花絮)。 对于我们当中的非程序员来说,算法是一组指令,它们接受输入 A 并提供输出 B,以某种方式更改所涉及的数据。 算法有广泛的应用。 在数学方面,它们可以帮助从数据集中的点计算函数,以及更高级的东西。 除了用于编程本身之外,它们还在文件压缩和数据加密等方面发挥着重要作用。
一套基本指令
假设您的朋友在杂货店与您见面,而您正在引导他走向您。 你会说“从右边的门进来”、“从左边的鱼区经过”和“如果你看到奶制品,你就经过了我”。 算法就是这样工作的。 我们可以使用流程图来说明基于我们提前知道或在过程中发现的标准的说明。
(图片标题为“破冰例程” 编辑:Trigger 和 Freewheel 提供)
从一开始,你就会沿着这条路走下去,根据发生的情况,你会按照“流程”到达最终结果。 流程图是可视化工具,可以更容易理解地表示计算机使用的一组指令。 同样,算法有助于对更多基于数学的模型做同样的事情。
图表
让我们用一个图表来说明我们可以给出方向的各种方式。
我们可以将此图表示为所有点之间的连接。 为了重现这个图像,我们可以给别人一组指令。
方法一
我们可以将其表示为一系列点,并且信息将遵循 graph = {(x1, y1), (x2, y2), ..., (xn, yn)} 的标准形式。
图 = {(0,0), (3,0), (3,3), (5,5), (7,10), (8,7), (9,4), (10,1) }
一个接一个地绘制每个点并将它们连接到前一个点非常容易。 然而,想象一下一个包含一千个点或多个线段的图形,它们都向各个方向发展。 那个列表会有很多数据,对吧? 然后必须一次一个地连接每个人,这可能会很痛苦。
方法二
我们可以做的另一件事是给出一个起点,它与下一个点之间的直线的斜率,并使用标准形式 graph={(starting point}, [m1, x1, h1) 指示下一个点的预期位置], ..., [mn, xn, hn]}. 这里,变量 'm' 表示直线的斜率,'x' 表示计数的方向(无论是 x 还是 y),'h' 告诉你如何许多人可以在上述方向数数。您还可以记住在每次移动后绘制一个点。
图 = {(0,0), [0,x,3], [0,y,3], [1,x,2], [2.5,x,2], [-3,x,1], [-3,x,1], [-3,x,1]}
你最终会得到相同的图表。 你可以看到这个表达式中的最后三个术语是相同的,所以我们可以通过某种方式说“重复三遍”来减少它。 假设每当您看到变量“R”出现时,就意味着重复最后一件事。 我们做得到:

图 = {(0,0), [0,x,3], [0,y,3], [1,x,2], [2.5,x,2], [-3,x,1], [R=2]}
如果单个点并不重要,只有图形本身重要怎么办? 我们可以像这样合并最后三个部分:
图 = {(0,0), [0,x,3], [0,y,3], [1,x,2], [2.5,x,2], [-3,x,3]}
它比以前缩短了一点。
方法三
让我们尝试另一种方式。
y=0, 0≤x≤3
x=0, 0≤y≤3
y=x,3≤x≤5
y=2.5x-7.5, 5≤x≤7
y=-3x+29, 7≤x≤8
y=-3x+29, 8≤x≤9
y=-3x+29, 9≤x≤10
在这里,我们用纯代数术语来表示它。 再一次,如果点本身并不重要,而只有图表重要,我们可以合并最后三个项目。
y=0, 0≤x≤3
x=0, 0≤y≤3
y=x,3≤x≤5
y=2.5x-7.5, 5≤x≤7
y=-3x+29, 7≤x≤10
现在,您选择哪种方法取决于您的能力。 也许你很擅长数学和绘图,所以你选择了最后一个选项。 也许你擅长导航,所以你选择了第二个选项。 然而,在计算机领域,您正在执行许多不同类型的任务,而计算机的能力并没有真正改变。 因此,算法针对它们完成的任务进行了优化。
另一个需要注意的重点是每个方法都依赖于一个键。 除非您知道如何处理它们,否则每组指令都是无用的。 如果您不知道应该绘制每个点并连接这些点,那么第一组点没有任何意义。 除非您知道第二种方法中每个变量的含义,否则您将不知道如何应用它们,就像密码的密钥一样。 该密钥也是使用算法不可或缺的一部分,并且通常,该密钥可以在社区中或通过“标准”找到。
文件压缩
当您下载一个 .zip 文件时,您会提取其中的内容,以便您可以使用其中的任何内容。 如今,大多数操作系统都可以像普通文件夹一样深入 .zip 文件,在后台执行所有操作。 十多年前,在我的 Windows 95 机器上,我必须手动提取所有内容,然后才能看到除了里面的文件名之外的任何内容。 这是因为以 .zip 文件形式存储在磁盘上的内容不可用。 想想拉出式沙发。 当你想把它用作床时,你必须把靠垫取下来展开,这样会占用更多的空间。 当你不需要它,或者你想运输它时,你可以把它折叠起来。
压缩算法专门针对它们所针对的文件类型进行调整和优化。 例如,每种音频格式都使用不同的方式来存储数据,这些数据在被音频编解码器解码后,将提供与原始波形相似的声音文件。 有关这些差异的更多信息,请查看我们之前的文章,所有这些音频格式之间的差异是什么? 无损音频格式和 .zip 文件有一个共同点:在解压缩过程之后,它们都以准确的形式生成原始数据。 有损音频编解码器使用其他方法来节省磁盘空间,例如修剪人耳无法听到的频率,并在部分中平滑波形以去除一些细节。 最后,虽然我们可能无法真正听到 MP3 和 CD 曲目之间的区别,但前者肯定存在信息不足。
数据加密
在保护数据或通信线路时也使用算法。 它不是存储数据以使用更少的磁盘空间,而是以其他程序无法检测到的方式存储。 如果有人窃取了您的硬盘并开始扫描它,即使您删除文件,他们也可以获取数据,因为数据本身仍然存在,即使转发位置已经消失。 当数据被加密时,所存储的任何东西看起来都不像它的样子。 它通常看起来是随机的,好像随着时间的推移碎片化了。 您还可以存储数据并使其显示为另一种类型的文件。 图像文件和音乐文件对此很有用,例如,它们可以很大而不会引起怀疑。 所有这些都是通过使用数学算法完成的,这些算法接受某种输入并将其转换为另一种非常特定类型的输出。 有关加密如何工作的更多信息,请查看 HTG 说明:什么是加密以及它是如何工作的?
算法是在计算机科学中提供多种用途的数学工具。 他们致力于以一致的方式提供起点和终点之间的路径,并提供遵循它的说明。 比我们强调的更了解? 在评论中分享你的解释!