Самая быстрая структура данных для contains () в Java?



какова структура данных в Java, которая имеет самую быструю операцию для contains ()?



например, у меня есть набор чисел { 1, 7, 12, 14, 20... }



учитывая другое произвольное число x, каков самый быстрый способ (в среднем) генерировать логическое значение того, содержится ли x в наборе или нет? Вероятность есть !содержит() примерно в 5 раз выше.



все ли структуры карты обеспечивают работу o(1)? Является ли HashSet самым быстрым способом?

717   4  

4 ответов:

посмотрите на set (Hashset, enumset) и hash (HashMap,linkedhash...- иднетитыхаш..) внедрения. у них есть O (1) для contains ()

эта шпаргалка очень помогает.

для вашего конкретного случая чисел с относительно высокой плотностью я бы использовал битовый набор, он будет быстрее и намного меньше, чем набор хэшей.

единственная структура данных быстрее, чем HashSet, вероятно, будет TIntHashSet от Trove4J. это использует примитивы, избегая необходимости использовать целочисленные объекты.

Если число целых чисел невелико, вы можете создать логическое [], где каждое присутствующее значение превращается в "true". Это будет O(1). Примечание: для поиска HashSet не гарантировать, чтобы быть O(1) и, скорее всего, будет за o(лог(лог(Н))).

вы получите только O(1) для идеального распределения хэш. Однако, скорее всего, вы получите столкновения хэшированных ведер, и некоторые поиски должны будут проверить более одного значения.

хэширование (набор хэшей) является лучшим с O(1)

Comments

    Ничего не найдено.