Welke opslagmethode en datastructuur is het meest geschikt voor het opslaan van een grote verzameling getallen die niet hoger zijn dan 30000 in modulus, om snelle zoekopdrachten en minimaal geheugenverbruik te garanderen?
Antwoord van AI
sobes.tech AI
Для хранения большого набора чисел в диапазоне от -30000 до 30000 с целью быстрого поиска и минимального использования памяти лучше всего использовать структуры данных с компактным представлением и эффективным доступом.
Варианты:
-
Массив с индексированием: если числа целые и диапазон известен, можно использовать булев массив (битсет) длиной 60001 (от -30000 до 30000), где каждый бит указывает на наличие числа. Поиск будет O(1), память — около 7.5 КБ (60001 бит).
-
Отсортированный массив с бинарным поиском: хранить числа в отсортированном массиве и искать через бинарный поиск за O(log n). Память — минимальна, но поиск чуть медленнее.
-
HashSet или TreeSet: в Java можно использовать HashSet<Integer> для быстрого поиска (O(1) в среднем), но с накладными расходами на хранение объектов и хеш-таблицы.
Пример использования битсета в Java:
import java.util.BitSet;
public class NumberSet {
private static final int OFFSET = 30000;
private BitSet bitSet = new BitSet(60001);
public void add(int number) {
bitSet.set(number + OFFSET);
}
public boolean contains(int number) {
return bitSet.get(number + OFFSET);
}
}
Такой подход обеспечивает минимальное использование памяти и очень быстрый поиск.