zoukankan      html  css  js  c++  java
  • java 位向量

    public class BitVectory {
        private int count;
        private int[] a;
        private static final int BIT_LEN = 32;
        private static final int MASK = 0x1f; //16禁止表示 10进制31
        private static final int SHIFT = 5;
    
        public BitVectory(int count) {
            this.count = count;
            init(count);
        }
    
        private void init(int count) {
            a = new int[(count - 1) / BIT_LEN + 1];
            for (int i = 0; i < count; i++) {
                clear(i);
            }
        }
    
        private void clear(int i) {
            a[i >> SHIFT] &= ~ (1 << (i & MASK));
        }
    
        //
        public void set(int i) {
            a[i >> SHIFT] |= (1 << (i & MASK));
        }
    
        public List<Integer> getSortedArray() {
            List<Integer> list = new ArrayList<>();
            StringBuilder s = new StringBuilder();
            for (int i = 0; i < count; i++) {
                s.append(get(i));
                if (get(i) == 1) {
                    list.add(i);
                }
            }
            System.out.println(s.toString());
            return list;
        }
    
        private int get(int i) {
            return Integer.bitCount(a[i >> SHIFT] & (1 << (i & MASK)));
        }
    
    
        public static void main(String[] args) {
            BitVectory bitVectory = new BitVectory(38);
    
            List<Integer> list = new ArrayList<>(38);
            for (int i = 0; i < 38; i++) {
                list.add((int) (Math.random() * 36));
            }
    
            list.forEach(e -> {
                bitVectory.set(e);
            });
    
            List<Integer> sortedArray = bitVectory.getSortedArray();
            System.out.println(sortedArray.size() + "	" + sortedArray);
            System.out.println(Integer.toBinaryString(bitVectory.a[0]));
            System.out.println(bitVectory.a.length);
            System.out.println(Arrays.toString(bitVectory.a));
        }
    
    }

    利用位向量对 0-N的数据进行排序 N / mask + 1个数组a来表示这些数 

  • 相关阅读:
    java 笔记(6) static关键字
    java 笔记(5)接口,static
    java 笔记(4)抽象类与抽象方法
    java 笔记(3)多态 容易理解
    看穿CSS的定位技术
    揭开浮动布局的秘密(简略版)
    不可不知的CSS盒子模型(简略版)
    初学Java web 项目
    Eclipse快捷键
    JDBC连接数据库
  • 原文地址:https://www.cnblogs.com/lijiale/p/8502672.html
Copyright © 2011-2022 走看看