Главная > Программирование > Распределенные хэш-таблицы.Теория (третья часть)

Распределенные хэш-таблицы.Теория (третья часть)

site-supportХочу напомнить для создателей сайта что с помою этого языка программируются многие приложения для сайтов, и их знание очень облегчает работу. Но также нужно помнить и о том, что создав сайт и полностью его оформив это еще пол пути. Любую площадку нужно наполнять качественным контентом и продвигать. Лучшее продвижение сайтов в челябинске для тех кто программировать умеет но продвигать нет времени, ведь решения задач с программными кодами занимает безумно много времени.
Итак, продолжим, так как мы изменили алгоритм ввода, мы также изменим функцию поиска требуемого элемента. Вам нужен некий способ для проверки того, что вы нашли нужный элемент, а не что-нибудь другое. Простейший путь – это сравнить ключи. (Это ли запись с фамилией «Whitney»? Или та?). Если элемент который вы нашли не подошел, просто пройдите к следующему элементу до тех пор, пока вы не найдете то, что вам нужно или вы обнаружите пустую ячейку (которая означает, что элемент отсутствует в таблице).
Звучит легко, верно? Хорошо, перейдем к сложному. Что если у вас так много столкновений, что вы переходите к концу таблицы?
Если вы пытаетесь ввести «Zorbas» и все элементы таблицы заполнены, что тогда? Примерно так:

258 “Whitney” | <— нет, не пустая
259 “Zeno” | не пустая
——————— <— Хм-м-м, что тогда?
Простейшая вещь, это вернуться обратно к началу. Если и здесь все заполнено, тогда нам необходимо изменить размер массива, до тех пор, пока все элементы поместятся в массив. Если мы изменяем размер массива, конечно, нам придется перенастроить нашу хэш-функцию (или как-нибудь иначе справиться с этим), чтобы она охватывала весь требуемый диапазон, тут главное, чтобы хватило памяти. (Заметьте, что изменение размера массива означает что случайное введение значение в список будет вызывать (О)n количество операций копирования, но в среднем, это случается только однажды для каждой (О)n введения значения, таким образом, ввод будет занимать некое константное значение времени, О (1). (Если вы не уверены в том, что означает термин «О(n)» и «константное время», поищите статьи на тему эффективности алгоритмов).
Как бы то ни было, изменение размеров массива – это не так страшно, если вы знаете объем пространства, которое вам нужно.
Обработка коллизий отдельными потоками
Вторая стратегия обработки коллизий заключается в хранении связанного списка каждого элемента в структуре базы данных хэш-таблицы. Этот способ работает так: когда коллизии случается, вы можете просто добавить элемент в связанный список, который находится в резерве хэш индекса. Если у вас только один элемент с определенным значением хэш, тогда у вас есть единственный список элементов – значит, производительность не упадет.
Если же у вас несколько элементов кэшируются одним значением, вы увидите снижение производительности, но не больше, чем могли бы увидеть хэш столкновений.


Комментарии:

Об авторе: Johan8888