• 编程珠玑读书笔记之磁盘文件排序


    输入:

    所输入的是一个文件,至多包含n个正整数,每个正整数都要小于n,这是 n = 10^7。如果输入时某个整数出现了两次,就会产生一个致命的错误。这些整数与其他任何数据都不关联。

    输出:

    以增序形式输出的经过排序的整数列表。

    基本思想:使用一个具有一千万位的字符串表示该文件,在该字符串中,当且仅当整数i在该文件中时,第i个位才打开(设为1)。解决该问题的过程可以分为三个自然阶段。第一个阶段关闭所有的位,将集合初始化为空集。第二个阶段读取文件中的每个整数,并打开相应的位,建立该集合。第三个阶段检查每个位,如果某个位是1,就写出相应的整数,从而创建已排序的输出文件。如果n是向量中位的数目(在本例中是10000000),该程序可以用伪码如下表示:

    /*phase 1: initialize set to empty */
    for i = [0, n]
        bit[i] = 0;
    /*phase 2: insert present elements into the set */
    for each i in the input file
        bit[i] = 1;
    /*phase 3: write sorted output */
    for i = [0,n)
        if bit[i] == 1
             write i on the output file

    原则:

    位图数据结构 此数据结构代表了有限域中的稠集(dense set),每一个元素至少出现一次,没有其他的数据和元素相关联。即使不滞这些条件(例如存在多重元素或额外数据时),也可以使用有限域中的键作为表索引(表具有更复杂的条目)

    多通道(Multiple-Pass)算法 这些算法具有多个输入数据的通道,每读一次就向完成前进一步。

    时间和空间的权衡 二者不可偏废。

    简单的设计 与复杂程序相比,简单程序通常要更加可靠、安全、健壮和有效些,构建和维护时也要更加容易一些。

  • 相关阅读:
    判断谷歌坐标是否在视野矩形内
    查看数据库中表占用空间
    Abp Create
    URL Rewrite Module Configuration Reference
    fiddler 使用
    ionic
    MySQL的安装与配置——详细教程
    Navicat 连接Mysql 8.0以上版本报错1251的详细解决方案
    简单的使用Navicat for MySQL
    navicat for mysql 中文破解版(无需激活码)
  • 原文地址:https://www.cnblogs.com/jcleung/p/2044069.html
Copyright © 2020-2023  润新知