zoukankan      html  css  js  c++  java
  • 第一章:位向量/位图

    1.位图排序

    //1.关闭所有位,初始化集合为空
    for i=[0,n)
        bit[i]=0;
    
    //2.读取文件,打开相应的位,建立集合
    for each i in the input file
        bit[i]=1;
    
    //3.检查每个位,如果某个位为1,就写出相应的数,从而创建已排序的文件
    for i=[0,n)
        if(bit[i])
            write i to the output file

    2.位图的实现

    2.1

    #define BITSPERWORD 32
    #define SHIFT 5
    #define MASK 0x1F
    #define N 10000000
    
    int a[1+N/BITSPERWORD];
    
    void clr(int i){
        a[i>>SHIFT] &= ~(1<<(i&MASK));
    }
    
    void set(int i){
        a[i>>SHIFT] |= (1<<(i&MASK));
    }
    
    int test(int i){
        return a[i>>SHIFT] & (1<<(i&MASK));
    }

    2.2 C++中bitset

    3.生成[0,n)之间不重复的随机整数

    //先把所有可能数顺序放到数组,然后打乱顺序,则保证不重复
    for i=[0,n)
        a[i]=i;
    
    for i=[0,n)
        swap(a[i], a[randint(i,n)]);
    
    //随机返回一个[m,n)之间的值
    int randint(int m,int n){
        return rand()%(n-m)+m;
    }

    4.首次访问元素时将其初始化

    用空间换时间带来的一个问题是,初始化空间本身可能会占用大量时间。解决方案如下:

    使用另外两个n元素向量form,to以及整数top中包含的符号能够初始化向量data[i]。如果data[i]已经初始化,那么from[i]<top并且to[form[i]]==i。

    top=0;
    
    //访问data[i]
    form[i] = top;
    to[top] = i;
    data[i] = 0;
    top++;

    通过更多的空间来减少初始化的时间,所以只能在空间便宜时间昂贵,而且向量比较稀疏的情况下使用。

  • 相关阅读:
    小心服务器内存居高不下的元凶WebAPI服务
    注册登录过程点滴(二):使用MVC Remote验证的注意点
    .net framework 4.5为啥在IIS中找不到了
    windows平台下载Android源码
    unix及linux文件锁
    分布式软件系统
    C++ base
    linux目录结构
    linux中pkill的简单用法
    Linux中Kill进程的N种方法
  • 原文地址:https://www.cnblogs.com/bukekangli/p/4278856.html
Copyright © 2011-2022 走看看