zoukankan      html  css  js  c++  java
  • 算法概述及复杂理论

    算法设计与分析


    算法概述及复杂理论

    问题

    • 目标(比如找男女朋友的目标就是找个白雪公主)
    • 约束条件(身高,颜值等)和解空间
    • 可行解/最优解/近似解
    • 问题实例和问题规模

    1、可计算问题/不可计算问题
    计算机研究可计算问题
    2、困难问题(时间度量)
    3、P、NP、NPC

    算法的概念

    解决问题的一个方法或过程,是一个由若干个算法指令组成的有穷序列。

    算法的特点

    1、输入和输出
    2、确定性
    3、可行性
    4、有穷性

    算法的描述

    1、伪代码
    2、流程图
    3、自然语言的描述

    算法的正确性

    对任意一个输入,算法都能够得到一个正确的输出。
    软件测试非常重要。
    如果是实例一个一个的测试,因为问题的复杂度,实例可能很多很多。所以测试算法正确性的方法很重要。

    • 循环不变量
      与程序变量有关的一个语句,它在循环刚开始前,以及在循环的每个迭代执行后为真,特别是在循环结束后,任然为真。
    • 插入排序的循环不变量
      比如说在选取数组A中的最大值,算法为:
    MAX=A[0],
    for(int i=0;i<A.length;i++)
    {
        if(A[i]>MAX)
        {
            MAX=A[i];
        }
    }
    

    每次循环中MAX都是A[0]-A[i]中的最大值,这就是循环不变量,总是为真。

    • 利用循环不变量证明算法的正确性
      寻找到循环不变量,即某个特征Lj,然后证明循环不变量为真Lj(j=1,2,3,4..n),然后利用类似数学归纳法的证明方法
      1、初始步:在循环的迭代开始前,L1为真;
      2、归纳步:如果在循环的第j个迭代前,Lj-1为真,则在循环的第j+i个迭代前,Lj为真;
      3、终止步:当循环终止时,Ln为真。
      插入排序算法的正确性证明

    算法的效率

    • 算法的效率指:求解已个问题所需要的时间和空间
    • 时间资源和空间资源(时间资源比较重要)
    • 计算模型(Turing机、以及RAM(随机存储器)等
    • 算法时间资源的估计(算法执行基本运算的数目或者步数)

    度量一个算法运行时间的三种方式:

    • 最好时间复杂度
    • 最坏时间复杂度
    • 平均时间复杂度

    最坏情形时任何规模的问题实例运行时间上的上界,没有更坏了。
    算法效率的比较
    插入排序与归并排序的比较
    插入排序算法o(2n2) 归并排序算法o(50nlgn)
    若同时对100万个数据进行比较
    则插入排序算法需要时间比归并排序算法需要时间相差很多,即使是插入排序算法的配置好很多的时候,仍然比不上。所以算法很有必要研究!!

    算法的时间复杂度取决于主要项;
    算法的效率主要取决与算法本身。

    问题的下界

    问题下界:任何一种算法解决一个问题所需要的必须的最小运行时间。
    如排序问题的时间下界为nlogn,时间复杂度为nlogn都是排序算法的最有算法。
    最优算法指的不是某个实例的最优算法,而是平均的概念

  • 相关阅读:
    查找实体,只限关系数据源的报表模型
    Reporting Service 报表模型
    Façade外观(结构型模式)
    安装Adventureworks2008的艰难历程(原创)
    使用关系数据库和矩阵,Reporting Service也能实现类似Analysis的分析
    简单工厂模式
    报表模型_创建透视
    有用的几个维度属性
    报表模型_创建计算字段
    Composite 组合(结构型模式)
  • 原文地址:https://www.cnblogs.com/zhixinlin/p/12353917.html
Copyright © 2011-2022 走看看