算法是什么?
《算法导论》里将算法描述为定义良好的计算过程,取一个或者一组值作为输入,并产生一个或者一组值作为输出。
算法普遍具有的四大特征是:
- 确定性,每个步骤是明确的,计算结果也是明确的;
- 有穷性,计算步骤有限,必须有明确的结束条件;
- 可行性,算法对问题有正确的结果;
- 具有输入和输出
数据结构是什么?
- 数据,计算机体系中的数据,是指能被计算机识别和处理的各种符号的总称。人类能识别的各种数据,如文字、语言和图像,在计算机内部都是以二进制的形式存在,并且这些二进制数据之间存在着各种组织关系。
- 数据结构,我们通常所说的数据结构包含两层意思,一是某数据的集合,二是数据之间的相互关系,也就是数据的逻辑结构。
- 算法和数据结构关系紧密,数据结构是算法设计的基础,设计具体的算法步骤时,考虑的是如何对这些具有数据关系的实际数据进行加工和处理。
基本数据结构类型
- 线性结构,包括数组、链表、栈、队列;
- 关联结构,包括集合、映射;
- 树形结构,适合表达有层次关系的数据;
- 图形结构,存储数据元素及其复杂的关系,常采用邻接矩阵或者邻接表存储,可以采用广度或者深度优先进行遍历。
基本算法设计思想
- 贪婪法,将求解过程分成若干步骤,每个步骤都应用贪心原则,选取当前状态地最优选择,并以此希望最后堆叠的结果也是最优的。贪婪法不进行回溯,所以只有在很少的情况下才能得到真正的全局最优解,通常最为其他算法的辅助算法;
- 分治法,将复杂问题分解为独立的与原问题相同类型的若干子问题来求解,很多情况下,分治法都采用递归实现;
- 动态规划法,解决多阶段决策的常用思想,将复杂问题按照时间或者问题的演化状态进行子问题的划分;
- 穷举法,通常指运用一定的穷举策略来在问题的解空间搜索结果,有盲目搜索,启发式搜索和剪枝搜索。
算法的实现方式
- 顺序执行
- 循环执行
- 分支执行
- 并行执行
- 递归执行
- 迭代执行