Poniższa funkcja pobiera dwie wartości: BitSets
, tworzy kopię pierwszej (nie może być przesłonięta), przecina kopię z drugą (bitową ORAZ) i zwraca liczność wyniku .Najszybszy sposób na uzyskanie Javy liczności przecięcia BitSet
public int getIntersectionSize(BitSet bits1, BitSet bits2) {
BitSet copy = (BitSet) bits1.clone();
copy.and(bits2);
return copy.cardinality();
}
Jestem zainteresowany, czy ten kod może zostać przyspieszony? Ta funkcja nazywa się miliard razy, więc nawet mikrosekundowe przyspieszenie ma sens i jestem ciekawy najszybszego możliwego kodu.
Jedna idea: można spróbować uniknąć tworzenia nowego zestawu bitowego, który po prostu wyrzucasz. –
Więcej wymaganych informacji: jak długo trwa wywoływanie miliarda razy? Czy możesz zmienić swój algorytm, aby nie nazwać go miliard razy? –
Nie sprawdzałem wewnętrznych partycji BitSet, ale możliwe jest zrobienie tego wszystkiego za jednym zamachem, zamiast robić 'i', a następnie 'liczność', próbować policzyć liczność ** podczas ** robienia' i 'ręcznie ? –