位图

(编程珠玑)
位图表示能解决的问题应具有以下三个方面不常见的属性:
  1. 输入数据限制在相对较小的范围内
  2. 数据没有重复
  3. 对于每条记录而言,除了单一整数外,没有其他任何关联数据
若给定表示文件中整数集合的位图数据结构,则可以分三个自然阶段来编写程序:
  1. 将所有位都置为零,从而将集合初始化为空
  2. 通过读入文件中的每个整数来建立集合,将每个对应的位都置为1
  3. 检查每一位,如果该位为1,就输出对应的整数,由此产生有序的输出文件。
令n为位向量中的位数,程序表示如下:
     for i = [0, n )
bit[i]=0;
     for each i in the input file
bit[i]=1;
     for i = [0, n )
          if bit[i]==1
      write i on the output file

自己的思考:

     数据结构具有数值和位置两种属性。排序是根据数值来进行位置的确定。
     位图之所以能够以较快的速度来运行,是因为它在读取数值的时候,能够不依赖其他数值的大小来进行位置的确定,而且是以O(1)的速度进行位置的确定(因为这里数据的大小就是其位置所在)。相比较其他的排序来说,没有了位置的多次变动,没有了比较,就加快了速度。
     但是,位图能解决的问题的属性也限定了其应用范围。如果数据稀疏的分布在很大的范围,数据有重复,或者不是单一的数据。位图显然就不能解决了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值