算法基础

算法:

  解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或者多个操作 。

算法特性:输入、输出、有穷性、确定性、可行性

  输入输出: 具有零个或者多个输入,至少有一个输出,算法一定要有输出,输出是算法的灵魂,形式可以是打印输出,也可以返回一个或者多个值。

  有穷性:执行有限步骤后,自动结束执行,而不会无限循环,每一个步骤都可在接受的时间内完成。

  确定性: 算法的每一个步骤都具有确定的含义,不能出现二义性。

  可行性: 算法的每一步都必须是可行的。也就是 算法可以转换为程序上机运行,并得到正确的结果。

 

设计要求:正确性、可读性、健壮性、时间效率低和存储量高

  1.正确性: 

    1.算法程序没有语法错误。

    2.算法程序对于合法的输入数据能过产生满足要求的输出结果。

    3.算法程序对于非法输入数据能过满足规格说明的结果。

    4.对于精心选择的,甚至刁难的测试数据都有满足需求的输出结构。

    层次3作为一个算法正确的标准。

  2.可读性:方便阅读、理解和交流。

  3.健壮性: 当输入数据不合法时,算法也可以做出相应的处理,不会产生异常或者莫名其妙的结果。

  4.时间效率高和存储量低: 用最少的存储空间,花费最少的时间。

 

效率度量: 事后统计方法、事前分析估算

  程序在计算机运行消耗时间影响因素:

    1.算法的策略、方法。

    2.编译产生的代码质量。

    3.问题的输入规模。

    4.机器执行指令的速度。

  1.事后统计: 利用计算机计时器对不同算法的运行时间进行比较,

    缺陷:算法程序得实现写好,费时; 依赖计算机的软硬件,

  2.事前分析:

    程序在计算机运行消耗时间影响因素

函数的渐进增长:

某个算法,随着n的增长,他会越来越优于另一算法,

 

算法的时间复杂度:在进行算法分析时,语句总的执行次数t(n)时关于问题规模n的函数。算法时间的复杂度记作:T(n) = O(f(n)),表示随着问题规模的增大,算法执行时间的增长率和f(n)的增长率相同。称之为时间复杂度。f(n)是问题规模n的某个函数。

  例如遍历一个数组,数组中有n个元素,时间复杂度为O(n)。问题规模是n.

  使用大写O()体现算法时间复杂度的记法。称之为大O记法。大O表示法能够比较操作数,它指出了算法运行时间的增速。

随着n的增长,t(n)增长最慢的算法为最优算法。

 

 

 

 耗时:

 

 

 

空间复杂度:在写代码是,可以用空间来换取时间。

开发中使用空间替换思想

注意:一般说的时间复杂度,指的是最坏时间复杂度,复杂度指的是算法时间复杂度。 而不是空间复杂度

 

posted @ 2020-05-07 18:03  ye_jing  阅读(427)  评论(0)    收藏  举报