算法与算法评价
算法
:是解决特定问题求解步骤的描述,在计算机中表现为指令集的有序序列,并且每条指令表示一个或者多个操作。
算法的特性:
算法具有五大特性:分别是输入,输出,有穷性,确定性和可行性
输入输出
:算法具有零个或者多个输入,算法可以没有输入(如打印语句),但一定要有输出(没有输出你要这个算法干嘛?),所以算法至少有一个或者多个输出。
有穷性
:算法在进行有限个步骤之后,会自动结束,并且每个步骤在可以接受的时间内完成。
确定性
:算法的每一个步骤都有确定的含义,不会出现二义性。
可行性
:算法的每一步都必须是可行的,即每一步都会在执行有限次之后完成。
算法设计的要求
如何评价一个算法设计是否好,需要考虑到正确性,可读性,健壮性与是否满足效率与低存储量需求
正确性
:算法的正确性,指的是算法至少应该具有输入输出和加工处理的无歧义性,且可以正确的反映问题需求和得到问题正确答案。
可读性
:算法设计的目的是方便阅读理解和交流,尽量避免用晦涩难懂的写法。
健壮性
:当输入数据不合法时,算法也能进行相关的处理,而不是产生异常或者莫名奇妙的结果。
时间效率高和存储量低
:设计的算法要尽量满足时间效率搞和存储量低的两个要求
算法效率的度量:
事后统计方法
:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法的编制程序运行时间进行比较从而确定算法效率的高低。
与之相应的是事前分析的估算方法
事前分析的估算方法
:在计算机程序编制前,依据统计方法对算法进行估算。
问题输入规模
:输入量的多少。
如何快速衡量算法数度:
1.忽略加法常数。
2.最高此项相乘的时候常数可忽略
3.关注最高阶项的结果
算法复杂度的估算:
1.若有循环嵌套看最深层循环的语句。
2.若最深层不与问题规模n有关及不管他。
3.对数阶的算法复杂度最好的方法是数学归纳法
算法复杂度可以是常数阶(只要是常数次即是大O1),线性阶,对数阶(一般判断是while循环,里面一般是n=常数*n),平方阶
这玩意还是很简单的具体还是看个人的数学能力
最后再来说说
最坏时间复杂度
:是指最坏情况下,算法的时间复杂度
平均时间复杂
:所有可能输入实例在等概率出现的情况下,算法的期望运行时间。
最好时间复杂度
:最好情况下,算法的时间复杂度
空间复杂度:
空间复杂度S(n)是指该算法所需要消耗的存储空间,他是问题规模n(输入量n)的函数。
算法原地工作
:指的是算法所需的辅助空间为常量,即O(1).
王道错题:null