zoukankan      html  css  js  c++  java
  • BitMap的简单实现

    面试结束的这些日子好几次接触到BitMap这个东西。到底是啥呢,究其原因就是虽然它的使用条件较为苛刻,但是它对应的时间复杂度和空间复杂度真的是惊人的好。

    首先是根据其思想先写了一个比较差的实现代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     //bitmap的简单应用
     9     //查出1到10中一共9个不重复的数字,到底少了哪个数字
    10     long long n=0;
    11     //假设少了数字3
    12     for(int i=0;i<10;i++){
    13         if(i!=3){
    14             n^=1<<(i);
    15             printf("the n is %lld
    ",n);
    16         }
    17     }
    18 
    19     for(int i=0;i<10;i++){
    20             n^=1<<(i);
    21     }
    22     //n^=1<<(sizeof(n)*8-2);
    23     int ans=0;
    24     while(n>>=1){
    25         ans++;
    26     }
    27     printf("%d
    ",ans);
    28     return 0;
    29 }

    也就是时间复杂度大概是n的样子,不过系数相对大了些。据说Java中有相对应的包来实现,想来应该会用补码的方式进行一个简单的优化吧。

    我能想到的就是在合理的条件下使用lowbit的方式求出每个缺省值,这样子还可以将缺少的数字推广开来。

    来自编程珠玑的简单思考

    http://blog.jobbole.com/109024/?utm_source=blog.jobbole.com&utm_medium=relatedPosts

    我要坚持一年,一年后的成功才是我想要的。
  • 相关阅读:
    pdf文件怎么转换成word文档
    数据库的发展历程
    数据库的三级模式
    数据库概述
    时间序列的自回归模型—从线性代数的角度来看
    数据清洗
    sql commit的三种方式
    数据库标准语言SQL((Structured Query Language)
    正则化推导转载
    leetcode刷题
  • 原文地址:https://www.cnblogs.com/tianxia2s/p/6696461.html
Copyright © 2011-2022 走看看