• 算法 一些基本概念


    (以下是本人在学习程杰老师的《大话数据结构》所做的笔记)

    一、算法的定义

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

    二、算法的特性

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

    三、算法的要求

    1.正确性 2.可读性 3.健壮性 4.时间效率高和存储量低

    四、算法效率的度量方法

    1.事后统计方法(不科学、不准确) 2.事前分析估算方法

    在分析程序的运行时间时,最重要的是把程序看成独立于程序设计语言的算法或一系列步骤。

    五、算法的渐近增长

    函数的渐近增长(概念):给定两个函数 f(n) 和 g(n),如果存在一个整数N,使得对于所有的 n>N, f(n) 总是比 g(n) 大,那么我们说 f(n) 的增长渐近快于 g(n) 。

    (我的理解)就是给两个函数,n表示他们的规模,但n大于某一个值的时候,一个函数的值总是比另一个函数的大,那么我们可以理解这个函数渐近增长较快。

    六、算法的时间复杂度(重点、难点)

    1.算法的时间复杂度定义:在进行算法分析时,语句总的执行次数 T(n) 是关于问题规模n的函数,进而分析 T(n) 随n的变化情况并确定 T(n) 的数量级。算法的时间复杂度(算法的时间量度)记作 T(n) = O(f(n))。表示随着问题规模n的增长,算法执行的时间的增长率和 f(n) 的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度。其中 f(n) 是问题规模n的某个函数。

    2.大O阶方法

    (1)用常数1取代运行时间中的所有加法常数。

    (2)在修改后的运行次数函数中,只保留最高阶项。

    (3)如果最高阶项存在且不为1,则去除与这个项相乘的常数,得到的结果就是大O阶,即时间复杂度。

    3.常见的时间复杂度所消耗时间的大小

    O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n) 

  • 相关阅读:
    分布式系统学习一-概念篇
    JAVA多线程学习九-原子性操作类的应用
    JAVA多线程学习八-多个线程之间共享数据的方式
    JAVA多线程学习七-线程池
    vue 工作随笔
    智能云课堂整理
    mysql
    模板引挚 jade ejs
    node实战小例子
    昭山欢node资料学习笔记
  • 原文地址:https://www.cnblogs.com/181118ljh123/p/12182122.html
Copyright © 2020-2023  润新知