La funzione seguente richiede due BitSets
, crea una copia del primo (non deve essere sovrascritta), interseca la copia con il secondo (bit AND) e restituisce la cardinalità del risultato .Java più veloce per ottenere la cardinalità dell'intersezione BitSet
public int getIntersectionSize(BitSet bits1, BitSet bits2) {
BitSet copy = (BitSet) bits1.clone();
copy.and(bits2);
return copy.cardinality();
}
Sono interessato se questo codice può essere velocizzato? Questa funzione è chiamata miliardi di volte quindi anche un accelerazione in microsecondi ha senso, più sono curioso del codice più veloce possibile.
Un'idea: si potrebbe provare a evitare di creare un nuovo BitSet che stai semplicemente buttando via. –
Ulteriori informazioni richieste: quanto tempo impiega chiamare un miliardo di volte? E puoi cambiare il tuo algoritmo per non chiamarlo un miliardo di volte? –
Non ho controllato le parti interne di BitSet ma potrebbe essere possibile fare tutto in una volta, invece di fare un 'and' e poi' cardinality' provare a contare la cardinalità ** while ** facendo 'e' manualmente ? –