《编程珠玑(第2版•修订版)》—第1章1.4节实现概要

简介: 在我们的实际问题中,每个7位十进制整数表示一个小于1 000万的整数。我们使用一个具有1 000万个位的字符串来表示这个文件,其中,当且仅当整数i在文件中存在时,第i位为1。

本节书摘来自异步社区《编程珠玑(第2版•修订版)》一书中的第1章1.4节实现概要,作者【美】Jon Bentley,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.4 实现概要
由是观之,应该用位图或位向量表示集合。可用一个20位长的字符串来表示一个所有元素都小于20的简单的非负整数集合。例如,可以用如下字符串来表示集合{1, 2, 3, 5, 8, 13}:

0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0
代表集合中数值的位都置为1,其他所有的位都置为0。

在我们的实际问题中,每个7位十进制整数表示一个小于1 000万的整数。我们使用一个具有1 000万个位的字符串来表示这个文件,其中,当且仅当整数i在文件中存在时,第i位为1。(那个程序员后来找到了200万个稀疏位,习题5研究了最大存储空间严格限制为1 MB的情况。)这种表示利用了该问题的三个在排序问题中不常见的属性:输入数据限制在相对较小的范围内;数据没有重复;而且对于每条记录而言,除了单一整数外,没有任何其他关联数据。

若给定表示文件中整数集合的位图数据结构,则可以分三个自然阶段来编写程序。第一阶段将所有的位都置为0,从而将集合初始化为空。第二阶段通过读入文件中的每个整数来建立集合,将每个对应的位都置为1。第三阶段检验每一位,如果该位为1,就输出对应的整数,由此产生有序的输出文件。令n为位向量中的位数(在本例中为10 000 000),程序可以使用伪代码表示如下:

/* 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

(回想在前言中所提到的,for i=[0, n)表示在从0至n-1的范围内对i进行迭代。)

这个实现概要已经足以解决那个程序员的问题了。习题2、习题5和习题7描述了他会遇到的一些实现细节。

相关文章
|
关系型数据库 MySQL Linux
TiDB实时同步数据到PostgreSQL(三) ---- 使用pgloader迁移数据
使用PostgreSQL数据迁移神器pgloader从TiDB迁移数据到PostgreSQL,同时说明如何在最新的Rocky Linux 9(CentOS 9 stream也适用)上通过源码编译安装pgloader。
|
存储 开发者 Docker
|
存储 JSON Java
深入理解 MyBatis-Plus 中的 JSON 处理器及案例演示
深入理解 MyBatis-Plus 中的 JSON 处理器及案例演示
1247 0
|
存储 JSON Java
实战!Mybatis-plus操作json字段实战
本文主要介绍基于mybatis-plus的json字段实战,介绍json字段的查询操作,希望对您有帮助
7490 0
实战!Mybatis-plus操作json字段实战
|
网络协议 应用服务中间件 nginx
docker容器故障致无法启动解决实例 推荐
今日内网断电后,有一台机器没有如往常一样起来,该服务器是docke上的一个容器,然后登录docker宿主机,开始问题分析及解决:   一、寻找问题 1、启动iframe-test机器 root@ubuntu:~#docker start iframe-test iframe-test 2、发现没有容器进程 root@ubuntu:~#docker ps |grep iframe-test 3、查看日志,发现是nginx配置有问题,导致中断。
1759 0
|
5天前
|
人工智能 运维 安全
|
3天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
10天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
848 109