All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.it.unimi.dsi.sux4j.bits.Select Maven / Gradle / Ivy

Go to download

Sux4j is an implementation of succinct data structure in Java. It provides a number of related implementations covering ranking/selection over bit arrays, compressed lists and minimal perfect hashing.

There is a newer version: 5.4.1
Show newest version
package it.unimi.dsi.sux4j.bits;

/*
 * Sux4J: Succinct data structures for Java
 *
 * Copyright (C) 2008-2017 Sebastiano Vigna
 *
 *  This library is free software; you can redistribute it and/or modify it
 *  under the terms of the GNU Lesser General Public License as published by the Free
 *  Software Foundation; either version 3 of the License, or (at your option)
 *  any later version.
 *
 *  This library is distributed in the hope that it will be useful, but
 *  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 *  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
 *  for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public License
 *  along with this program; if not, see .
 *
 */

import it.unimi.dsi.bits.BitVector;

import java.io.Serializable;

/** A data structure providing selection over a bit array.
 *
 * 

Selection is a basic building blocks for most succinct data structures. Usually, * instances of this class class provide quick (e.g., constant time) selection. * *

There is some variance in the literature about the exact semantics of selection—in most * cases, it is a matter of off-by-ones. This interface specifies a zero-based selection. * *

More precisely, select is applied to a bit vector in which bits positions are numbered * starting from zero. Then, select(r) is the position of the * leftmost bit set to one and preceded by r ones. * *

A number of equations link {@link Rank#rank(long) rank()} and {@link #select(long) select()}: *

    *
  • rank(0)=0; *
  • rank(length()) is the number of ones in the bit vector; *
  • if r < rank(length()), then rank(select(r))==r; *
  • if r ≥ rank(length()), then select(r)=-1; *
  • if p ≤ length(), then p≤select(rank(p)), and equality * holds iff there is a one at position p. *
*/ public interface Select extends Serializable { /** Returns the position of the bit of given rank. * Equivalently, returns the greatest position that is preceded by the specified number of ones. * * @param rank a rank. * @return the position of the bit of given rank; if no such position exists, −1 is returned. */ public long select(long rank); /** Returns the bit vector indexed by this structure. * *

Note that you are not supposed to modify the returned vector. * * @return the bit vector indexed by this structure. */ public BitVector bitVector(); /** Returns the overall number of bits allocated by this structure. * * @return the overall number of bits allocated by this structure (not including the bits * of the {@linkplain #bitVector() indexed vector}). */ public long numBits(); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy