【数据结构与算法】算法

一、算法定义

算法(algorithm),在数学(算学)和电脑科学之中,为任何良定义的具体计算步骤的一个序列[1],常用于计算、数据处理(英语:Data processing)和自动推理。精确而言,算法是一个表示为有限长[2]列表的有效方法(英语:Effective method)。算法应包含清晰定义的指令[3]用于计算函数[4]。
算法中的指令描述的是一个计算,当其执行(英语:Execution (computing))时能从一个初始状态和初始输入(可能为空)开始,[5]经过一系列有限[6]而清晰定义的状态最终产生输出[7]并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。[8][9]

二、算法特征

以下是高德纳在他的著作《计算机程序设计艺术》里对演算法的特征归纳:

  1. 输入:一个算法必须有零个或以上输入量。
  2. 输出:一个算法应有一个或以上输出量,输出量是算法计算的结果。
  3. 明确性:算法的描述必须无歧义,以保证算法的实际执行结果是精确地符合要求或期望,通常要求实际执行结果是确定的。
  4. 有限性:依据图灵的定义,一个演算法是能够被任何图灵完备系统模拟的一串运算,而图灵机只有有限个状态、有限个输入符号和有限个转移函数(指令)。而一些定义更规定演算法必须在有限个步骤内完成任务。
  5. 有效性:又称可行性。能够实现,算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现。

三、时间复杂度

时间复杂度

算法的时间复杂度是指算法需要消耗的时间资源。一般来说,计算机算法是问题规模n的函数 f ( n ) {\displaystyle f(n)} f(n),算法的时间复杂度也因此记做
T ( n ) = O ( f ( n ) ) {\displaystyle T(n)=O(f(n))} T(n)=O(f(n))
算法执行时间的增长率与 f ( n ) f(n) f(n)的增长率正相关,称作渐近时间复杂度(英语:Asymptotic computational complexity),简称时间复杂度。
常见的时间复杂度有:常数阶 O ( 1 ) {O(1)} O(1),对数阶 O ( log ⁡ n ) {\displaystyle O(\log n)} O(logn),线性阶 O ( n ) {\displaystyle O(n)} O(n),线性对数阶 O ( n log ⁡ n ) {\displaystyle O(n\log n)} O(nlogn),平方阶 O ( n 2 ) O(n^{2}) O(n2),立方阶 O ( n 3 ) {\displaystyle O(n^{3})} O(n3),…, k 次方阶 O ( n k ) {\displaystyle O(n^{k})} O(nk),指数阶 O ( 2 n ) {\displaystyle O(2^{n})} O(2n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。

空间复杂度

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

参考:https://www.wikiwand.com/zh-hans/算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值