JS算法系统学习第一章:数据结构与算法的关系和定义

75 阅读3分钟

前话:为什么要学习数据结构和算法

  1. 增添底气,通关大厂面试。
  2. 以更优雅的姿势解决问题。只有学习了算法才能体验到其魅力,能更有效的进行代码优化。虽然 js 基础够好,代码也能写的飞起,但在代码优化的时候要花费很多心思,如果用了算法就能很容易的解决。
  3. 对于本身做算法题特别慢的朋友来说,系统的学习掌握算法基础,提高做题速度。巩固 JS 编程能力,提升代码开发的稳定性和高效性。
  4. 提高复杂代码的设计和开发能力,自己开发框架(●ˇ∀ˇ●)。

拿一个简单的算法题做例子:(掘金 AI 刷题中的第一道)可以先自己先做做看并记录下自己花费的时间。

image.png

如果不了解“异或运算”的朋友,估计直接就使用到了 Math.min,二分查找,哈希表等代码又长又难读的答案。 使用“异或运算”仅仅 5 行代码就解决了问题。

再举个简单的生活例子:我们去到菜鸟驿站取快递,会看到快递根据编号一堆一堆的摆放,这就是堆的存储方式(数据结构)。然后怎么取到快递的过程就是算法(解决问题的方法方式)。

什么是数据结构?

定义‌:数据结构是计算机存储、组织数据的方式,体现数据元素之间的逻辑关系。例如数组、链表、栈、队列、树、图等都属于数据结构‌。

作用‌:通过选择合适的数据结构,可以提高数据的存取效率,降低程序的复杂度。例如,二叉搜索树能快速查找数据,哈希表可实现高效键值映射‌。

什么是算法?

定义‌:算法是解决问题的步骤和规则,是一组明确的指令,用于将输入数据转换为输出结果。例如排序算法、搜索算法、动态规划等‌。

评价标准‌:主要通过时间复杂度和空间复杂度衡量效率。时间复杂度关注执行时间随输入规模的增长趋势,空间复杂度关注内存占用‌。

数据结构与算法的关系

简单来说,就是每个语言都包含对应的数据结构,算法是通用的。数据结构是组织存储数据的方式,算法是解决问题的策略机制。通常情况下,精心选择的数据结构可带来最优效率的算法。

专栏要学习的数据结构

  1. 数组
  2. 队列
  3. 链表
  4. 集合
  5. 字典
  6. 二叉堆

专栏涉及的算法

  1. 排序算法(冒泡排序、选择排序、插入排序、归并排序、快速排序、计数排序、桶排序、基数排序)
  2. 搜索算法(顺序搜索、二分搜索、内插搜索)
  3. 随机算法

专栏涉及的算法设计

  1. 分而治之
  2. 动态规划
  3. 贪心算法
  4. 回溯算法

下一章:JS算法系统学习第二章:数组结构