Hashmap - это установленный ассоциативный массив. Итак, ваш массив входных значений объединяется в сегменты. В схеме открытой адресации у вас есть указатель на корзину, и каждый раз, когда вы добавляете новое значение в корзину, вы узнаете, где в корзине есть свободные места. Есть несколько способов сделать это - вы начинаете с начала сегмента и каждый раз увеличиваете указатель и проверяете, занят ли он. Это называется линейным зондированием. Затем вы можете выполнить бинарный поиск, например add, где вы удваиваете разницу между началом сегмента и тем, где вы удваиваете или отступаете каждый раз, когда ищете свободное место. Это называется квадратичным зондированием.
ХОРОШО. Теперь проблема в обоих этих методах заключается в том, что если блок переполняется в адрес следующего сегмента, то вам нужно -
- Удвойте размер каждого блока - malloc (N блоков) / измените хеш-функцию -
Требуемое время: зависит от реализации malloc
- Передача / копирование данных каждого из предыдущих сегментов в новые данные сегментов. Это операция O (N), где N представляет все данные
OK. но если вы используете связанный список, не должно быть такой проблемы, верно? Да, в связанных списках у вас нет этой проблемы. Считая, что каждая корзина начинается со связанного списка, и если у вас есть 100 элементов в корзине, требуется, чтобы вы пересекли эти 100 элементов, чтобы достичь конца связанного списка, поэтому List.add (Элемент E) займет время до -
- Хэш элемента в корзину - Обычный, как во всех реализациях
- Потратьте время, чтобы найти последний элемент в указанной операции корзины-O (N).
Преимущество реализации связанного списка состоит в том, что вам не требуется операция выделения памяти и O (N) передача / копирование всех сегментов, как в случае реализации открытой адресации.
Таким образом, способ минимизировать операцию O (N) состоит в том, чтобы преобразовать реализацию в реализацию Двоичного дерева поиска, где операции поиска имеют значение O (log (N)), и вы добавляете элемент в его позицию на основе его значения , Добавленная особенность BST состоит в том, что он сортируется!