【算法之美】01 算法初识

一、为什么要学算法?

1、百度百科

2、维基百科

  1. 算法(algorithm),在数学(算学)和计算机科学之中,为任何一系列良定义的具体计算步骤[1],常用于计算、数据处理和自动推理。作为一个有效方法,算法被用于计算函数[2],它包含了一系列定义清晰的指令[3],并可于有限的时间及空间内清楚的表述出来[4]。
  1. 算法中的指令描述的是一个计算,当其运行时能从一个初始状态和初始输入(可能为空)开始,[5]经过一系列有限[6]而清晰定义的状态最终产生输出[7]并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。包括随机化算法在内的一些算法,都包含了一些随机输入。[8][9]
  1. 早在尝试解决希尔伯特提出的判定问题时,关于算法的一个不完全的概念已经初步定型,并在其后的正式化阶段中尝试定义“有效可计算性[10]”或者“有效方法[11]”。这些尝试包括库尔特·哥德尔、雅克·埃尔布朗和斯蒂芬·科尔·克莱尼分别于1930年、1934年和1935年提出的递归函数,阿隆佐·邱奇于1936年提出的λ演算,1936年埃米尔·莱昂·珀斯特的Formulation 1和艾伦·图灵1937年提出的图灵机。即使在当下,依然常有符合直觉的想法难以定义为形式化算法的情况。[12]

3、例子

求 -1, 1 , -1 , 1 … (-1)^n

// 算法一 伪代码
int sum = 0for(int i=1; i<=n; i++){
    sum = sum + pow(-1, i); //(-1)^i
}


// 算法二 
if(n % 2 == 0) {
    sum = 0;
} else{
    sum =-1;
}

4、好的算法可以减少程序执行的时间 、资源的占用

二、算法的特征

1、有穷性:算法是由若干条指令组成的有穷序列,总是在执行若干次后结束,不可能永不停止。

2、确定性: 每条语句都有确定的含义,五歧义。

3、可行性:算法在当前环境条件下可以通过有限次运算实现。

4、输入输出:有零个或多个输入,一个或多个输出。

三、好算法的标准

1、正确性:正确性是指算法能够满足具体问题的需求,程序运行正常,无语法错误,能够通过典型的软件测试,达到预期的需求。

2、易读性:算法遵循标识符命名规则,简洁易懂,注视语句恰当适量,方便自己和其他人阅读,便于后期调试和修改。

3、健壮性 :算法队非法数据及操作有较好的反应和处理。

4、高效性:高效性是指运行效率高,算法运行所消耗的时间。衡量一般用基本运算的执行次数作为时间复杂度的衡量标准。=> 时间复杂度

5、低存储:低存储是指算法所需要的存储空间低。=> 空间复杂度

四、算法复杂度 (时间、空间)

1、时间复杂度:算法运行时间需要的时间,一般将算法的执行次数作为时间复杂度的度量标准。

算法复杂度取决于第一项(T(n) = an^m + bn^m-1…)

最坏和平均对衡量算法有实际意义

2、空间复杂度:算法占用的空间大小(算法在运行过程中用了多少对的存储空间)。一般将算法的辅助空间作为衡量空间复杂度的标准。

算法占用的存储空间包括 输入/输出数据 、算法本身、额外需要的辅助空间

递归算法中,每次递推需要一个栈空间来保存调用记录,因此,空间复杂度需要计算递归栈的辅助空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值