zoukankan      html  css  js  c++  java
  • 算法概念、大O记号

    • 算法定义:基于特定的计算类型,旨在解决某一信息处理问题而设计的一个指令序列
      算法需具备以下要素
      • 输入与输出
        输入(input):对所求解问题特定实例的描述
        输出(output):经计算和处理之后得到的信息,即针对输入问题实例的答案
      • 确定性和可行性:算法应可描述为由若干语义明确的基本操作组成的指令序列,且每一基本操作在对应的计算模型中均可兑现。
      • 有穷性:任意算法都应在执行有限次基本操作之后终止并给出输出
      • 正确性:算法所给的输出应该能够符合由问题本身在事先确定的条件
      • 鲁棒性:例如处理算法输入的退化
      • 重用性:算法模式可推广并适用于不同类型基本元素的特性
    • 证明算法的有穷性和正确性:从适当的角度审视整个计算过程,找出其所具有的某种不变性和单调性
      • 单调性:问题的有效规模会随着算法的推进不断递减
      • 不变形:不仅应在算法初始状态下自然满足,而且应与最终的正确性相呼应----当问题的规模缩减到0时,不变性应随即等价于正确性
      • 冒泡排序的正确性证明:(不变性)经过k趟扫描交换后,最大的前k个元素必然就位;(有穷性)经过k趟扫描交换后,待求解问题的有效规模将缩减至n-k。
    • 复杂度度量:
      • 时间复杂度T(n) :特定算法处理规模为n的问题所需的时间,由于n相同,但T(n)不同,---->简化为:
                        在规模为n的所有输入中选择时间最长者作为T(n),并以T(n)度量算法的时间复杂度。
      • 渐进复杂度:注重时间复杂度随问题规模n的增长的总体变化趋势
        • 大O记号(T(n)的渐进上界):
                             若存在正的常数c和函数f(n),使的对任何n>>2都有:  T(n) <= c  * f(n),即认为在n足够大之后,f(n)给出了T(n)增长速度的一个渐进上界,记为:T(n) = O(  f(n) )
        • 大O记号性质:
          • 对于任一常数 c > 0,  有O(  f(n) ) = O( c * f(n) ):在大O记号意义下:函数各项正的常系数可以忽略并等同于1
          • 对于任意常数 a > b > 0,有 O( n ^  a  + n ^ b ) = O( n ^ a ):在大O记号意义下:多项式中的低次项均可忽略
  • 相关阅读:
    hdu 4115 石头剪子布(2-sat问题)
    AFNetWorking POST Multi-Part Request 上传图片
    左右c++与java中国的垃圾问题的分析与解决
    ACM核武器
    MAX2323E
    cocos2d-x 发动机分析:程序如何开始和结束?
    STL 源代码分析 算法 stl_heap.h
    Android 4.4(KitKat)表格管理子系统
    Swift
    Swift
  • 原文地址:https://www.cnblogs.com/joh-n-zhang/p/5759226.html
Copyright © 2011-2022 走看看