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)$
    注定失败的战争,也要拼尽全力去打赢它; 就算输,也要输得足够漂亮。
  • 相关阅读:
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    72. Edit Distance
    583. Delete Operation for Two Strings
    582. Kill Process
    indexDB基本用法
    浏览器的渲染原理
    js实现txt/excel文件下载
    git 常用命令
    nginx进入 配置目录时
  • 原文地址:https://www.cnblogs.com/yalphait/p/10076659.html
Copyright © 2011-2022 走看看