Welche Speicher- und Datenstrukturlösung eignet sich am besten für die Speicherung einer großen Menge von Zahlen, die 30000 im Betrag nicht überschreiten, um eine schnelle Suche und minimalen Speicherverbrauch zu gewährleisten?
Antwort von AI
sobes.tech KI
Для хранения большого набора чисел в диапазоне от -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);
}
}
Такой подход обеспечивает минимальное использование памяти и очень быстрый поиск.