数据结构与算法
2021-01-11 19:09:27 87 游客333 参与编辑 版本: 2 引用率 13.30%
# 数据结构与算法67.08%      

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。60.09%      

算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。

形式化算法的概念部分源自尝试解决希尔伯特提出的判定问题,并在其后尝试定义有效计算性或者有效方法中成形。这些尝试包括库尔特·哥德尔、Jacques Herbrand和斯蒂芬·科尔·克莱尼分别于1930年、1934年和1935年提出的递归函数,阿隆佐·邱奇于1936年提出的λ演算,1936年Emil Leon Post的Formulation 1和艾伦·图灵1937年提出的图灵机。即使在当前,依然常有直觉想法难以定义为形式化算法的情况。

## 特征

一个算法应该具有以下五个重要的特征:

### 有穷性(Finiteness)

算法的有穷性是指算法必须能在执行有限个步骤之后终止;

### 确切性(Definiteness)

算法的每一步骤必须有确切的定义;

### 输入项(Input)

一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;

### 输出项(Output)

一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;

2. 逻辑运算:或、且、非等运算
3. 关系运算:大于、小于、等于、不等于等运算
4. 数据传输:输入、输出、赋值等运算


二、算法的控制结构:一个算法的功能结构不仅取决于所选用的操作,而且还与各操作之间的执行顺序有关。

## 评定

同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。68.82%      

### 时间复杂度

算法的时间复杂度是指执行算法所需要的计算工作量。一般来说,计算机算法是问题规模n 的函数f(n),算法的时间复杂度也因此记做。73.72%      
T(n)=Ο(f(n))

因此,问题的规模n 越大,算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。

### 空间复杂度

算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。76.83%      

### 正确性

算法的正确性是评价一个算法优劣的最重要的标准。

### 可读性

算法的可读性是指一个算法可供人们阅读的容易程度。 [1] 

### 健壮性

健壮性是指一个算法对不合理数据输入的反应能力和处理能力,也称为容错性。

## 基础数据结构67.08%      

1. 字符串
2. 数组
3. 列表
4. 链表
5. 二叉树73.72%      
6. 霍夫曼编码
7. 队列
8. 堆
9. 栈
10. Set
11. Map
12. 图


## 基础算法

1. 数学基础算法
	1. 二进制/位运算61.72%      
	2. 
2. 分治法
3. 二分法62.90%      
4. 宽度优先搜索
5. 深度优先搜索
6. 回溯法 
7. 双指针 
8. 动态规划 
9. 扫描线
10. 快排

## 排序算法

1. 冒泡排序
2. 选择排序
3. 插入排序
4. 希尔排序
5. 归并排序
6. 快速排序
7. 堆排序
8. 计数排序
9. 桶排序
10. 基数排序

|排序算法|平均时间复杂度|最好情况|最坏情况|空间复杂度|排序方式|稳定性|60.00%