【1906】算法设计与分析学习笔记——基础理论
一、什么是算法?
算法(algorithm)是求解一类问题的任意一种特殊的方法。严格的说法是,一个算法是对特定问题求解步骤的一种描述,它是指令的有限序列。
算法具有下面五个特征:
- 输入(input):算法有零个或多个输入量;
- 输出(output):算法至少产生一个输出量;
- 确定性(definiteness):算法的每一条指令都有确切的定义,没有二义性,无歧义;
- 有限性(finiteness)算法的每条指令的执行次数是有限的,执行每条指令的时间也是有限的;
概括地说,算法是由一系列明确定义的基本指令序列所描述的,求解特定问题的过程。它能够对合法的输入,在有限时间内产生所要求的输出。
如果取消有穷性限制,则只能称为计算过程(computational procedure);
对比程序:(典型的操作系统则是一个无限循环执行的程序)
- 程序是算法用某种程序设计语言的具体实现
- 程序可以不满足算法的性质-有限性
二、算法的复杂性
计算机程序的性能和所用资源的理论分析——
- 算法复杂性= 算法所需要的计算机资源
- 算法的时间复杂性T(n)
- 算法的空间复杂性S(n)
运行时间依赖于输入(输入驱动算法执行)——
- 一个已经排好序的序列更容易排序
- 通常情况下,较短的序列更容易排序,因此,我们用输入的大小来参数化运行时间
- 通常,我们想要获取的是运行时间的上界
- 实际上每个人都更倾向于获得一种保证
时间复杂度(一般最常用的指标)——
相关的符号表示——
对应的典型的关系和性质——
以及性质的典型证明——
三、典型运算
四、C++实现的数组内存分配