zoukankan      html  css  js  c++  java
  • 算法的定义 & 概念

     算法是解决特定问题求解步骤的描述,即处理问题的策略

    表现为指令的有限序列

    每条指令表示一个或多个操作

    引入

    求解1+2+3+...+100=?

    高斯的解法:

    程序实现如下:

    算法特性

    1.零个或多个输入,至少一个输出

    2.有穷性  有限步骤,不会出现无限循环

    3.确定性  每一个步骤具有确定的含义,不会出现二义性

    4.可行性  每一步必须可行,即每一步可以通过执行有限次数完成

    算法设计要求

    1.正确性  有输入输出、处理无歧义、正确反应问题的需求、得到正确答案

    2.可读性

    3.健壮性  输入数据不合法时,会做出相关处理

    4.时间效率高、存储量低

    算法效率的度量方法

    1.事后统计【不考虑】

    通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序运行时间比较

    缺陷:

     

    2.事前分析估算

     在程序编制前,依据统计方法对算法进行估算

    程序消耗时间取决于:

    程序运行时间  ——>  算法好坏   +    问题输入量的规模

    看引入中的两种求和算法

    第一种:2n+3 次

    第二种:3 次

    延伸代码:100^2  + 2次

    测定运行时间最可靠的方法——> 计算对运行时间有损耗的基本操作的执行次数

    运行时间与此计数成正比

     函数的渐近增长

     算法A要做2n+3次运算【n次循环完后继续n次循环,再有3次赋值或运算】,算法B要作3n+1次运算【同A】,输入规模都是n,谁快?

    不一定

     即n=1,A<B;n=2,效率相同;n > 2, A > B  ——>  总体上,A好过B

    判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,更应该关注最高价项的价数

    算法时间复杂度

    用大写O( ) 体现算法时间复杂度的记法,称之为大O记法

    O(1)   常数阶

    O(n)    线性阶

    O(n2)  平方阶

     例子:

      运行次数函数是f(n)=3

    时间复杂度为O(1)

    12次 

    这种与问题大小无关(n的多少),执行时间恒定的算法,称之为具有O(1)的时间复杂度

    分析算法复杂度,关键是要分析循环结构的运行情况

    线性阶     ——> 循环的时间复杂度为O(n)   因为循环体中的代码要执行n次

    对数阶     ——>2x = n   ——> x = log 2 n     时间复杂度为O(log n)

    平方阶      ——>   时间复杂度为O(n2

     

     例:

    用推导大O阶的方法得其时间复杂度为O(n2

     例:分析方法调用的时间复杂度

        调用的函数:

    该函数的时间复杂度为O(1),所以整体的时间复杂度为O(n)

    如果调用的函数:

    则整体的时间复杂度是O(n2

    常见的时间复杂度

     最坏情况与平均情况

     

       【很难通过分析得到,一般都是通过运行一定数量的实验数据后估算出来的】

    对算法的分析:

    1.平均时间复杂度——>计算所有情况平均值

    2.最坏时间复杂度——>计算最坏情况下的时间复杂度

     空间复杂度

     

    一般,不用限定词使用“复杂度”时,是指时间复杂度

  • 相关阅读:
    jupyter notebook 和 opencv
    AMD 处理器 Ubuntu 16.04 LTS 配置 opencv、caffe 小结
    caffe 在 windows 使用
    MATLAB数字图像处理
    游记(5)
    POJ-1789-Truck History 解题报告
    POJ-2560-Freckles 解题报告
    POJ-1308-Is It A Tree? 解题报告
    POJ-1182-食物链 解题报告
    POJ-1861-Network 解题报告
  • 原文地址:https://www.cnblogs.com/expedition/p/10672760.html
Copyright © 2011-2022 走看看