算法学习(Algorithm Learning)

算法学习(Algorithm learning)

资料:https://www.hello-algo.com/(Hello算法)

https://github.com/d2l-ai/d2l-zh(《动手学深度学习》)

1.初识算法

1.1明确下算法和数据结构的关系:

  • 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。
  • 算法为数据结构注入生命力。数据结构本身仅存储数据信息,结合算法才能解决特定问题。
  • 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。

(之前有个误区 算法和数据结构是一个东西 其实两者是相辅相成的

1.2算法误区:

Q:作为一名程序员,我在日常工作中从未用算法解决过问题,常用算法都被编程语言封装好了,直接用就可以了;这是否意味着我们工作中的问题还没有到达需要算法的程度?

A:我认为学算法(以及其他基础科目)的意义不是在于在工作钟从零实现它,而是基于学到的知识,在解决问题时都能作出专业的反应和判断,从而提升工作的整体质量。

在工程领域,大量的问题是难以达到最优解的,许多问题只是被”差不多“解决了。问题的难度一方面取决于问题本身的性质,另一方面也取决于观测问题的人的知识储备。

人的知识越完备、经验越多,分析问题就会越深入,问题就能被解决得更优雅。

2.复杂度分析

2.1算法效率评估

  1. 找到问题解法:算法需要在规定的输入范围内可靠地求得问题的正确解。
  2. 寻求最优解法:同一个问题可能存在多种解法,我们希望找到尽可能高效的算法。

3.知识学习

3.1数据结构

链表:

单链表:邻接表–存储图

​ –树

双链表:优化某些问题

链表其实就是一长串结点拼接而成的一个链

每一个结点有一个e[N],ne[N],也就是本结点的值和指向下一个结点的指针.

需要注意的是head指向空结点

image-20250218203020629

e[0]=3,ne[0]=1

e[1]=5,ne[1]=2