zoukankan      html  css  js  c++  java
  • 数据结构与算法之hash,bitmap简单实现

    1.hash算法就是将目标值存储前进行打散,然后将其存储到数组中,打散的操作就是hash函数,常见的就是取模,对上限取模操作后找到其下标,然后将之存储,典型代表是jdk hashmap(hash函数非简单的取模操作),hash存在的意义就是充分利用数组随机访问的特性,将取值操作的过程时间复杂度尽可能优化到O(1)。

    2.bitmap,核心思想是充分利用到计算机的最小存储单元bit,在内部创建一个byte数组,每个数组下标对于的值都可以表示8位,以此实现存储上的压缩

    2.1BitMap.java

    package com.hfm.util;
    
    import java.util.Arrays;
    
    public class BitMap {
        byte data[];
    
        int len;
        public BitMap(int cap) {
            this.len = (cap>>3)+1;
            this.data = new byte[this.len];
        }
    
        public void add(int item){
            int index = (item>>3), loc = item%8;
            data[index] |= 1<<loc;
        }
    
        public void remove(int item){
            int index = (item>>3), loc = item%8;
            data[index] ^= 1<<loc;
        }
    
        public boolean isPresent(int item){
            int index = (item>>3), loc = item % 8, num = 1 << loc;
            return (num & data[index]) == num ;
        }
    
        public static void main(String[] args) {
            BitMap map = new BitMap(100);
            map.add(1);
            map.add(11);
            map.add(19);
            map.add(89);
    
    
            for (int i = 0; i < 101; i++) {
                System.out.println(i+":"+map.isPresent(i));
            }
            System.out.println("-------------------------");
            map.remove(19);
            for (int i = 0; i < 101; i++) {
                System.out.println(i+":"+map.isPresent(i));
            }
        }
    }

    说明:以上代码只是简单的操作,没有考虑数值越界后的扩容问题及并发问题,只是提供一个思路。

  • 相关阅读:
    excel导入phpmyadmin
    Python 教程资源
    SAE部署Python-让云端自动运行Python代码
    python socket 超时设置 errno10054
    使用python一步一步搭建微信公众平台(一)
    PHP读取MySQL数据
    php连接mysql并读取数据
    php分页例子实现读取mysql数据分页显示
    51Nod1305 Pairwise Sum and Divide
    SPOJ SUBXOR
  • 原文地址:https://www.cnblogs.com/g177w/p/14731596.html
Copyright © 2011-2022 走看看