【算法精简学习指南 第一天】什么是算法

文章目录

  • 一、算法无处不在
  • 二、算法是什么
    • 1.算法定义
    • 2. 数据结构定义
    • 3. 数据结构与算法的关系

作为一个快三年开发经验的程序员,平时工作中对算法的接触也不是很多。所以想从头开始重新学习一下算法,精进一下自己。本系列文章会记录自己的学习笔记和见解。

本笔记参考https://github.com/krahets/hello-algo

一、算法无处不在

在日常生活中,你已经在不知不觉中学会了许多算法。

例一查阅字典。在字典里,每个汉字都对应一个拼音,而字典是按照拼音的英文字母顺序排列的。假设我们需要查找一个拼音首字母为r的字,通常会这样操作:

  1. 翻开字典约一半的页数,查看该页首字母是什么,假设首字母为 m。
  2. 由于在英文字母表中r位于m之后,所以排除字典前半部分,查找范围缩小到后半部分。
  3. 不断重复步骤 1-2 ,直至找到拼音首字母为r的页码为止。

【算法精简学习指南 第一天】什么是算法_第1张图片

【算法精简学习指南 第一天】什么是算法_第2张图片
【算法精简学习指南 第一天】什么是算法_第3张图片
【算法精简学习指南 第一天】什么是算法_第4张图片
【算法精简学习指南 第一天】什么是算法_第5张图片

查阅字典这个小学生必备技能,实际上就是著名的「二分查找」。从数据结构的角度,我们可以把字典视为一个已排序的「数组」;从算法的角度,我们可以将上述查字典的一系列操作看作是「二分查找」算法。

例二:整理扑克 我们在打牌时,每局都需要整理扑克牌,使其从小到大排列,实现流程如下

  1. 将扑克牌划分为“有序”和“无序”两部分,并假设初始状态下最左 1 张扑克牌已经有序。
  2. 在无序部分抽出一张扑克牌,插入至有序部分的正确位置;完成后最左 2 张扑克已经有序。
  3. 不断循环步骤 2. ,每一轮将一张扑克牌从无序部分插入至有序部分,直至所有扑克牌都有序。
    【算法精简学习指南 第一天】什么是算法_第6张图片
    上述整理扑克牌的方法本质上是「插入排序」算法,它在处理小型数据集时非常高效。许多编程语言的排序库函数中都存在插入排序的身影。

例三:货币找零 假设我们在超市购买了 69元的商品,给收银员付了 100元,则收银员需要给我们找 31元。他会很自然地完成以下思考:

  1. 可选项是比 31元面值更小的货币,包括1,5,10,20 元。
  2. 从可选项中拿出最大的20元,剩余31-20=11元。
  3. 从剩余可选项中拿出最大的10 元,剩余 11-10=1元。
  4. 从剩余可选项中拿出最大的1元,剩余1-1=0 元。
  5. 完成找零,方案为31-20-10-1元。

【算法精简学习指南 第一天】什么是算法_第7张图片
在以上步骤中,我们每一步都采取当前看来最好的选择(尽可能用大面额的货币),最终得到了可行的找零方案。从数据结构与算法的角度看,这种方法本质上是「贪心算法」。

小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使我们能够通过编程将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题转移到计算机上,以更高效的方式解决各种复杂问题。

二、算法是什么

1.算法定义

「算法 Algorithm」是在有限时间内解决特定问题的一组指令或操作步骤。它具有以下特性:

  • 问题是明确的,包含清晰的输入和输出定义。
  • 具有可行性,能够在有限步骤、时间和内存空间下完成。
  • 各步骤都有确定的含义,相同的输入和运行条件下,输出始终相同。

2. 数据结构定义

「数据结构 Data Structure」是计算机中组织和存储数据的方式。它的设计目标包括:

  • 空间占用尽量减少,节省计算机内存。
  • 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。
  • 提供简洁的数据表示和逻辑信息,以便使得算法高效运行。

数据结构设计是一个充满权衡的过程如果想要在某方面取得提升,往往需要在另一方面作出妥协,例如:

  • 链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度。
  • 图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。

3. 数据结构与算法的关系

数据结构与算法高度相关、紧密结合,具体表现在:

  • 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及用于操作数据的方法。
  • 算法是数据结构发挥的舞台。数据结构本身仅存储数据信息,通过结合算法才能解决特定问题。
  • 特定算法通常有对应最优的数据结构。算法通常可以基于不同的数据结构进行实现,但最终执行效率可能相差很大。

【算法精简学习指南 第一天】什么是算法_第8张图片

数据结构与算法犹如拼装积木。一套积木,除了包含许多零件之外,还附有详细的组装说明书。我们按照说明书一步步操作,就能组装出精美的积木模型。

【算法精简学习指南 第一天】什么是算法_第9张图片

数据结构与算法 LEGO 乐高
输入数据 未拼装的积木
数据结构 积木组织形式,包括形状、大小、连接方式等
算法 把积木拼成目标形态的一系列操作步骤
输出数据 积木模型

你可能感兴趣的:(算法)