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)$
    注定失败的战争,也要拼尽全力去打赢它; 就算输,也要输得足够漂亮。
  • 相关阅读:
    VS开发ExtJS
    ASP.NET初识9
    程序窗体和对话框
    浏览器的使用
    ASP.NET初识6
    310号的收获 将会决定 业余时间的方向。now foucs
    无代码 无说服力 4种 cast
    android Makefile 的流程—how android makefile workmakefile progress in android
    【资料】父子进程可以共享变量吗? 使用pipeline
    Sysinternals 手册阅读 about vmmap目标运行中优化内存
  • 原文地址:https://www.cnblogs.com/yalphait/p/10076659.html
Copyright © 2011-2022 走看看