Here you can find the source of cardinalityInBitmapRange(long[] bitmap, int start, int end)
Parameter | Description |
---|---|
bitmap | array of words representing a bitset |
start | first index (inclusive) |
end | last index (exclusive) |
public static int cardinalityInBitmapRange(long[] bitmap, int start, int end)
//package com.java2s; /*//from w ww .j ava 2 s . c om * (c) the authors Licensed under the Apache License, Version 2.0. */ public class Main { /** * Hamming weight of the bitset in the range * start, start+1,..., end-1 * * @param bitmap array of words representing a bitset * @param start first index (inclusive) * @param end last index (exclusive) * @return the hamming weight of the corresponding range */ public static int cardinalityInBitmapRange(long[] bitmap, int start, int end) { if (start >= end) { return 0; } int firstword = start / 64; int endword = (end - 1) / 64; if (firstword == endword) { return Long.bitCount(bitmap[firstword] & ((~0L << start) & (~0L >>> -end))); } int answer = Long.bitCount(bitmap[firstword] & (~0L << start)); for (int i = firstword + 1; i < endword; i++) { answer += Long.bitCount(bitmap[i]); } answer += Long.bitCount(bitmap[endword] & (~0L >>> -end)); return answer; } }