zoukankan      html  css  js  c++  java
  • 数据结构与算法——简单排序算法(1)

    认识时间复杂度

    常数时间的操作

    一个操作如果和样本的数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。

    时间复杂度为一个算法流程中,常数操作数量的一个指标。常用0(读作big 0)来表示。具体 来说,先要对一个算法流程非常熟悉,然后去写出这个算法流程中,发生了多少常数操作, 进而总结出常数操作数量的表达式。

    在表达式中,只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分如果为千(N),那 么时间复杂度为。(f(N))。

    评价一个算法流程的好坏,先看时间复杂度的指标,然后再分析不同数据样本下的实际运行 时间,也就是“常数项时间”。

    选择排序、冒泡排序细节的讲解与复杂度分析

    时间复杂度0(N^2),额外空间复杂度0(1)

    插入排序细节的讲解与复杂度分析

    时间复杂度0(N^2),额外空间复杂度0(1)

    算法流程按照最差情况来估计时间复杂度

    二分法的详解与扩展

    1) 在一个有序数组中,找某个数是否存在

    2) 在一个有序数组中,找>=某个数最左侧的位置

    3) 局部最小值问题

    异或运算的性质与扩展

    1) 0^N == N N^N == 0

    2) 异或运算满足交换律和结合率

    3) 不用额外变量交换两个数

    4) 一个数组中有一种数出现了奇数次,其他数都出现了偶数次,怎么找到这一个数

    5) 一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到这两个数

    对数器的概念和使用

    1,有一个你想要测的方法a

    2,实现复杂度不好但是容易实现的方法b

    3,实现一个随机样本产生器

    4,把方法a和方法b跑相同的随机样本,看看得到的结果是否一样。

    5,如果有一个随机样本使得比对结果不一致,打印样本进行人工干预,改对方法a或者 方法b

    6,当样本数量很多时比对测试依然正确,可以确定方法a已经正确。

    剖析递归行为和递归行为时间复杂度的估算

    用递归方法找一个数组中的最大值,系统上到底是怎么做的?

    master公式的使用

    T(N) = a*T (N/b) + O(N^d)

    1. log(b, a) > d -> 复杂度为0(N^log(b,a))

    2. log(b, a)= d -> 复杂度为O(N^d * logN)

    3. log(b, a) < d -> 复杂度为O(N^d)

  • 相关阅读:
    Network (poj1144)
    C. Hongcow Builds A Nation
    ZYB loves Xor I(hud5269)
    D. Chloe and pleasant prizes
    Game(hdu5218)
    约瑟夫环的递推方法
    Misaki's Kiss again(hdu5175)
    Exploration(hdu5222)
    B. Arpa's weak amphitheater and Mehrdad's valuable Hoses
    C. Arpa's loud Owf and Mehrdad's evil plan
  • 原文地址:https://www.cnblogs.com/wwj99/p/12180337.html
Copyright © 2011-2022 走看看