zoukankan      html  css  js  c++  java
  • bitmap位图法学习

    最近各种忙呀.............需要了解各种知识。发现现在网上的资料真的太杂了,很难找到自己想要的,最重要的还是得靠自己。另外就是搜技术相关的东西最好还是用google。

    继续努力........

    -----------以下切入正题-------------

    bitmap位图法是利用二进制的几位来表示数据一种状态的方法,通常适用于数据量大的处理与分析。网上举得最多的例子就是给你N个不重复的乱序的数,然后再给一个数,让你判断这个数是否在这N个数中(N这个数字很大)。遇到这种数据量大,但是状态很少的问题(这个例子中就是一个数存在或者不存在)。

    在处理过程比较需要注意的是用于存储状态的位数组的方向。

    以下是一个小例子:

    #include<stdio.h>
    #include<stdlib.h>
    typedef int (*fun_bit)(int,char*,int);
    typedef struct{
        fun_bit set;
        fun_bit statistic;
    }fun_bitmap;
    /*
     *put the num to the bitmap
     *the first param is useless
     */
    int set_bit(int num,char *bitmap,int size){
        int pos,bit;
        if(size*8-1<num){
            printf("num is too large\n");
            return -1; 
        }   
        bit=num%8;
        pos=num/8;
        bitmap[pos]|=(0x01<<bit);
        return 0;
    }
    /*
     *statisc the number of unique num in bitmap
     *the first param is useless
     */
    int statistic(int num,char *bitmap,int size){
        unsigned char p=0x01;
        int i,j,sum=0;
        for(i=0;i<size;i++){
            for(j=0;j<8;j++){
                if(bitmap[i]&(p)){
                    printf("the num is:%d\n",i*8+j);
                    ++sum;  
                }   
                p<<=1;
            }   
            p=0x01;
        }   
        return sum;
    }
    int main(int argc,char *argv[]){
        int i;
        int array[]={1,2,2,3,4,3,5,6,7,8,9,10,1000};
        char bitmap[200]={0};
        int size=200;
        fun_bitmap bit={set_bit,statistic};
        for(i=0;i<13;i++){
            bit.set(array[i],bitmap,size);
        }
        printf("num total:%d\n",bit.statistic(0,bitmap,size));
        return 0;
    }
    
  • 相关阅读:
    INV*更新物料信息
    WPF设置样式的几种方式
    使用InternetGetConnectedState判断本地网络状态(C#举例)
    WinInet API详解
    WPF导航总结
    WPF中的命令与命令绑定导航
    WPF依赖属性相关博客导航
    关于WPF自定义控件(导航)
    WPF送走控件的focus方法
    MvvmLight学习篇—— Mvvm Light Toolkit for wpf/silverlight系列(导航)
  • 原文地址:https://www.cnblogs.com/aLittleBitCool/p/2180875.html
Copyright © 2011-2022 走看看