java 位向量

Posted java渣渣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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() + "\t" + 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 位向量的主要内容,如果未能解决你的问题,请参考以下文章

位向量与布尔值列表的性能

Armv8a NEON 内联汇编代码:如何将 16x8 位向量转换为四个 4x32 位(整数)向量?

创建特征向量以对空中图像中的片段进行分类

用位矩阵加载向量

使用 Cuda 进行 128 位向量加法,性能问题

如何优化 C 代码:寻找下一个设置位并找到相应数组元素的总和