# 什么是算法

算法,就是解决问题的一系列方法。

在计算机领域,算法的本质是一系列程序指令,用于解决特定的运算和逻辑问题。

刷题:LeetCode (opens new window)

常见的基础算法分为:

# 1.搜索算法

搜索算法用于从数据结构中找出特定的数据。这类算法有很多种,如深度优先搜索(DFS)、广度优先搜索(BFS)、二分搜索等。

# 2.排序算法

排序算法用于将一组数据按照特定的顺序进行排列。常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。

# 3.图算法

图算法用于处理图形数据结构的问题,例如寻找最短路径,检查图的连通性等。常见的图算法有Dijkstra算法、Floyd算法、最小生成树算法等等。

# 4.动态规划算法

动态规划算法通过将问题分解为子问题,然后将子问题的解组合起来,以获得原问题的解。它通常用于求解具有重叠子问题和最优子结构特性的问题,例如背包问题,最长公共子序列等。

# 5.分冶算法

分治算法通过将问题分解为几个小问题,然后逐个解决小问题,最后合并这些小问题的解以得到原问题的解。常见的分治算法如快速排序、归并排序、大整数乘法等。

# 6.贪心算法

贪心算法在每个决策点都采取当前看来最好的选择,希望通过这种方式得到问题的最优解。例如霍夫曼编码就是利用了贪心算法。

# 7.回溯算法

回溯算法通过试错的方式搜索问题的可能解,当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。常见的如八皇后问题,数独问题等。

# 什么是数据结构

数据结构(data structure),是数据的组织、管理和存储格式,其目的是为了高效地访问和修改数据。

常用的数据结构包括线性结构、树结构、图结构、复合数据结构。

# 1.线性数据结构

这种数据结构的数据排列是线性的。这一类数据结构,包括数组、链表,以及从它们所衍生出来的栈、队列等等。

# 2.树结构

树是相对复杂的数据结构,呈现出一对多的关系。在树结构当中,比较有代表性的是二叉树,比如红黑树、AVL树,都是比较常用的二叉树。

有一些非二叉树也常常被我们使用,比如一般文件系统所使用的B-树,关系型数据库使用的索引结构B+树,用于数据压缩的哈夫曼树,都是典型的非二叉树,需要我们牢牢掌握。

# 3.图结构

图是最为复杂的数据结构,因为在图中呈现出多对多的关联关系。要学习图,我们需要掌握图的顶点、边、权重等基本概念。并且掌握深度优先遍历、广度优先遍历、最短路径算法等重要知识点。

# 4.复合数据结构

由基本的数据结构组合而成,一般称为复合数据结构,如跳表、线段树、哈希链表,都是两种以上基本数据结构的结合,它们在各自领域的发挥着优势。