class BucketRandomProjectionLSH extends BaseLSH {

    @Override
    public DenseVector hashFunction(Vector elemVec) {
        double[] brpSet = new double[randVectors.length];
        if (randVectors.length > 0) {
            int[] hashValues = new int[randVectors[0].length];
            for (int i = 0; i < brpSet.length; i++) {
                for (int j = 0; j < hashValues.length; j++) {
                    double dot = elemVec.dot(randVectors[i][j]);
                    hashValues[j] = (int) Math.floor((dot + randNumber[i][j]) / projectionWidth);
                }
                brpSet[i] = tableHash(hashValues);
            }
        }
        return new DenseVector(brpSet);
    }

    public  BucketRandomProjectionLSH(long seed, int vectorSize, int numProjectionsPerTable, int numHashTables,
                                     double projectionWidth);
    public  BucketRandomProjectionLSH(DenseVector[][] randVectors, double[][] randNumber, double projectionWidth);

}