<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=92.113.116.181&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=92.113.116.181&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/92.113.116.181"/>
		<updated>2026-07-15T01:31:13Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=61914</id>
		<title>Перехеширование</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=61914"/>
				<updated>2017-09-18T05:16:43Z</updated>
		
		<summary type="html">&lt;p&gt;92.113.116.181: /* При хеширования с открытой адресацией */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;При добавлении в хеш-таблицу большого количества элементов могут возникнуть ухудшения в ее работе. Обработка любого вызова будет занимать больше времени из-за увеличения размеров цепочек при хешировании на списках или кластеризации при хешировании с открытой адресацией, также, при хешировании с открытой адресацией может произойти переполнение таблицы. Для избежания таких ситуаций используется выбор новой хеш-функции и (или) хеш-таблица большего размера. Этот процесс называется '''перехеширование''' (''rehashing'').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Перехеширование при разных типах хеширования==&lt;br /&gt;
&lt;br /&gt;
===При хешировании цепочками===&lt;br /&gt;
&lt;br /&gt;
При использовании [[Разрешение коллизий|хеширования цепочками]] , элементы с одинаковым результатом хеш-функции помещают в список. Так как операции &amp;lt;tex&amp;gt;\mathrm{add(x)}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\mathrm{contains(x)}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{remove(x)}&amp;lt;/tex&amp;gt; работают за &amp;lt;tex&amp;gt;O(l)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; {{---}} длина списка, то с некоторого момента выгодно увеличить размер хеш-таблицы, чтобы поддерживать амортизационную стоимость операции &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим следующий алгоритм перехеширования: когда в хеш-таблицу добавлено &amp;lt;tex dpi = &amp;quot;150&amp;quot;&amp;gt;\frac{4n}{3}&amp;lt;/tex&amp;gt; элементов, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} размер хеш-таблицы, создадим новую хеш-таблицу размера &amp;lt;tex&amp;gt;2n&amp;lt;/tex&amp;gt;, и последовательно переместим в нее все элементы первой таблицы. При этом, сменим хеш-функцию так, чтобы она выдавала значения &amp;lt;tex&amp;gt;[0..2n-1]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Найдем амортизационную стоимость добавления, после которого было сделано перехеширование, используя метод предоплаты. С момента последнего перехеширования было произведено не менее &amp;lt;tex dpi = &amp;quot;150&amp;quot;&amp;gt;\frac{2n}{3}&amp;lt;/tex&amp;gt; операций &amp;lt;tex&amp;gt;\mathrm{add(x)}&amp;lt;/tex&amp;gt;, так как изначально в массиве находится &amp;lt;tex dpi = &amp;quot;150&amp;quot;&amp;gt;\frac{2n}{3}&amp;lt;/tex&amp;gt; элементов (или &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; в начале работы), а перехеширование происходит при наличии &amp;lt;tex dpi = &amp;quot;150&amp;quot;&amp;gt;\frac{4n}{3}&amp;lt;/tex&amp;gt; элементов. &lt;br /&gt;
&lt;br /&gt;
Для проведения перехеширования необходимо произвести &amp;lt;tex dpi = &amp;quot;150&amp;quot;&amp;gt;\frac{4n}{3}&amp;lt;/tex&amp;gt; операций &amp;lt;tex&amp;gt;\mathrm{add}(x)&amp;lt;/tex&amp;gt;, средняя стоимость которых составляет &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; , потратить &amp;lt;tex dpi = &amp;quot;150&amp;quot;&amp;gt;\frac{4n}{3}&amp;lt;/tex&amp;gt; операций на проход хеш-таблицы, и &amp;lt;tex dpi = &amp;quot;150&amp;quot;&amp;gt;\frac{4n}{3}&amp;lt;/tex&amp;gt; операций на удаление предыдущей таблицы. В итоге, если мы увеличим стоимость каждой операции &amp;lt;tex&amp;gt;\mathrm{add}(x)&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;6&amp;lt;/tex&amp;gt;, то есть на &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;, операция перехеширования будет полностью предоплачена. Значит, амортизационная стоимость перехеширования при открытом типе хеш-таблицы равна &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===При хешировании с открытой адресацией===&lt;br /&gt;
При использовании [[Разрешение коллизий|хеширования цепочками]] , операции  &amp;lt;tex&amp;gt;\mathrm{add}(x)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\mathrm{contains}(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{remove(x)}&amp;lt;/tex&amp;gt; в худшем случае работают за &amp;lt;tex&amp;gt;O(k)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} количество уже добавленных в таблицу элементов, поэтому перехеширование надо проводить при неполном заполнении хеш-таблицы.&lt;br /&gt;
&lt;br /&gt;
Будем проводить перехеширование при заполнении таблицы на &amp;lt;tex dpi = &amp;quot;150&amp;quot;&amp;gt;\frac{n}{2}&amp;lt;/tex&amp;gt;, увеличивая размер таблицы в &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; раза. Аналогично случаю с открытым хешированием, для перехеширования необходимо будет потратить &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций на обход таблицы, &amp;lt;tex&amp;gt;O(n)\cdot A&amp;lt;/tex&amp;gt; элементарных операций на добавление элементов, где &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; {{---}} стоимость операции &amp;lt;tex&amp;gt;\mathrm{add(x)}&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций на удаление таблицы. Так как &amp;lt;tex&amp;gt;A \geqslant 1&amp;lt;/tex&amp;gt;, и между последовательными перехешированиями производится &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; добавлений, то можно предоплатить перехеширование, увеличив стоимость операции &amp;lt;tex&amp;gt;\mathrm{add(x)}&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;, и не изменив стоимость остальных операций.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Амортизационный анализ]]&lt;br /&gt;
* [[Хеширование]]&lt;br /&gt;
* [[Открытое и закрытое хеширование]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* ''Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн Клиффорд'' «Алгоритмы: построение и анализ», 2-е издание. Пер. с англ. — М.:Издательский дом &amp;quot;Вильямс&amp;quot;, 2010. — 1296 с.: ил. — Парал. тит. англ. — ISBN 978-5-8459-0857-5 (рус.)&lt;br /&gt;
* Дональд Кнут. «Искусство программирования, том 3. Сортировка и поиск» {{---}} «Вильямс», 2007 г.{{---}} ISBN 0-201-89685-0&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы ]]&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Хеширование]]&lt;/div&gt;</summary>
		<author><name>92.113.116.181</name></author>	</entry>

	</feed>