# 数据结构与算法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%