zoukankan      html  css  js  c++  java
  • 【复习笔记】数据结构-外排序

    主要目的是减少访存次数

    外排序基本过程:

    • 置换选择排序(把外存文件初始化为尽可能长的顺串集)
    • 归并排序(把顺串合并排序)

    置换选择算法

    • 用一个堆来维护
    • 主要步骤:每个顺串至少长为M,平均长度2M
      • 读取M个记录到堆中,建立最小堆,设置堆尾标志LAST
      • 把根节点输出
      • 读入下一条记录,如果比刚刚输出的根节点小,根节点用LAST位置的记录代替,新纪录放进LAST位置,LAST减1;否则把记录放到根节点重新排列堆。重复。
      • LAST<0的时候前面输出的就是一个顺串,然后重复。

    归并排序

    • 访存次数与归并趟数有关
    • 有m个初始顺串,每次对k个顺串归并,归并趟数为$log_k^m$
    • 可用huffman树安排归并顺序优化

    多路归并树

    • 外部结点L[i]与内部父节点B[p]关系:
      • $p=egin{cases} frac{i+offset}{2}& ileq LowExt\ frac{i-LowExt+n-1}{2}& i>LowExt end{cases}$

    • offset是最底层外部结点之上的所有结点数目

    • LowExt是最底层外部节点个数
    • 原始方法
      • 复杂度:产生一个大小为n的顺串的总时间是$O(k*n)$
    • 赢者树
      • 每棵子树的树根记录左右结点的赢家
      • 每次L[i]改变,沿着到根节点的路径和兄弟结点的值进行比较
    • 败者树
      • 记录每次的败者,最终胜者放在B[0]
      • 每次L[i]改变,沿着到根节点的路径和父节点进行比较
      • 简化重构过程,其他没变
      • 复杂度:$O(k+nlog^k)$
    注定失败的战争,也要拼尽全力去打赢它; 就算输,也要输得足够漂亮。
  • 相关阅读:
    scrapy通过修改配置文件发送状态邮件
    python高级编程读书笔记(一)
    linux,mac安装sentry
    mac安装sentry
    pop3设置
    流程图
    车险或将二次费改 又可以省钱了?
    ATM:模拟实现一个ATM + 购物商城程序
    作业1开发一个简单的python计算器
    re正则表达式
  • 原文地址:https://www.cnblogs.com/yalphait/p/10076659.html
Copyright © 2011-2022 走看看