zoukankan      html  css  js  c++  java
  • [算法]使用bitmap高效进行矩阵运算

    如果程序中经常要对矩阵进行与或非等运算,可以把整型数组的矩阵转化成char型的bitmap,通过直接的位运算进行这些与或非操作会大大地提高效率。

    class bitmap
    {
    
        char *buf;
    public:
        int buf_len;//buf的长度
        int bit_len;//bitmap的位数
        bitmap(int *group,int group_len){
            bit_len=group_len;
            buf_len=group_len/8+1;
            buf=new char[buf_len];
            memset(buf,0,sizeof(char)*buf_len);
            int i;
            for(i=0;i<group_len;++i){
                if(group[i])
                    set(i);
            }
        }
        ~bitmap(){
            delete []buf;
        }
        void set(int n);
        int get(int i);
        void set_and(const bitmap &m);
    };
    
    void bitmap::set(int n){
        int i=n/8;
        int offset=n%8;
        unsigned char mask=(0x80>>offset);
        buf[i]|=mask;
    }
    
    int bitmap::get(int i){
        int index=i/8;
        int offset=i%8;
        unsigned char mask=(0x80>>offset);
        if(buf[index] & mask)
            return 1;
        else
            return 0;
    }
    
    void bitmap::set_and(const bitmap &m){
        int i;
        for(i=0;i<buf_len;++i){
            buf[i]&=m.buf[i];//直接对8位的char按位与
        }
    }
    
    int  main()
    {
        int g[10]={1,1,0,0,1,0,1,0,1,0};
        int z[10]={1,0,0,1,1,0,1,1,0,0};
        bitmap bg(g,10);
        bitmap bz(z,10);
        bg.set_and(bz);
        int i;
        for(i=0;i<10;++i){
            cout<<bg.get(i)<<" ";
        }
        cout<<endl;
        return 0;
    }
  • 相关阅读:
    Eclipse安装aptana
    mysql获取下一篇和上一篇文章的ID
    Java回顾之Spring基础
    纯CSS实现各类气球泡泡对话框效果
    百度编辑器ueditor的简单使用
    实施接口
    Java快速教程
    Java GUI程序设计
    JAVA之关于This的用法
    Java 数组基础
  • 原文地址:https://www.cnblogs.com/iyjhabc/p/3314131.html
Copyright © 2011-2022 走看看