<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://digida.mgpu.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9A%D1%83%D0%BA%D1%83%D1%88%D0%BA%D0%B8%D0%BD%D0%BE_%D1%85%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5</id>
	<title>Кукушкино хеширование - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://digida.mgpu.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9A%D1%83%D0%BA%D1%83%D1%88%D0%BA%D0%B8%D0%BD%D0%BE_%D1%85%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"/>
	<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9A%D1%83%D0%BA%D1%83%D1%88%D0%BA%D0%B8%D0%BD%D0%BE_%D1%85%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;action=history"/>
	<updated>2026-05-07T02:04:03Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9A%D1%83%D0%BA%D1%83%D1%88%D0%BA%D0%B8%D0%BD%D0%BE_%D1%85%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=4669&amp;oldid=prev</id>
		<title>Patarakin: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9A%D1%83%D0%BA%D1%83%D1%88%D0%BA%D0%B8%D0%BD%D0%BE_%D1%85%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=4669&amp;oldid=prev"/>
		<updated>2022-10-19T17:55:03Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 20:55, 19 октября 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Patarakin</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9A%D1%83%D0%BA%D1%83%D1%88%D0%BA%D0%B8%D0%BD%D0%BE_%D1%85%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=4668&amp;oldid=prev</id>
		<title>ru_wikipedia&gt;Joparino: /* Сравнение с аналогичными структурами */</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9A%D1%83%D0%BA%D1%83%D1%88%D0%BA%D0%B8%D0%BD%D0%BE_%D1%85%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=4668&amp;oldid=prev"/>
		<updated>2022-07-15T11:41:25Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Сравнение с аналогичными структурами&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Файл:Cuckoo hashing example.svg|thumb|Пример кукушкиного хеширования. Стрелки показывают альтернативное положение ключа. Новое значение, которое вставляется в ячейку A, выталкивая A в альтернативную ячейку, занимаемую ключом B, значение B переносится в альтернативное место, которое в настоящее время не занято. Вставка нового значения в ячейку H завершается неудачей — H входит в цикл (вместе с W), так что только что вставленный элемент должен быть вытолкнут.]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Кукушкино хеширование&amp;#039;&amp;#039;&amp;#039; — алгоритм разрешения [[Коллизия хеш-функции|коллизий]] значений [[хеш-функция|хеш-функций]] в [[хеш-таблица|таблице]] с [[Временная сложность алгоритма|постоянным]] временем выборки в {{не переведено 5|Лучший, худший и средний случаи|худшем случае||worst case analysis}}.&lt;br /&gt;
&lt;br /&gt;
Предложено в 2001 году{{sfn|Pagh, Rodler|2001|с=121–133}}. Название отсылает к поведению некоторых видов [[Кукушковые|кукушек]], когда птенец выталкивает из гнезда яйца или других птенцов; аналогичным образом в алгоритме предусматривается возможность выталкивания старого ключа при вставке нового.&lt;br /&gt;
&lt;br /&gt;
== Операции ==&lt;br /&gt;
Кукушкино хеширование является видом {{не переведено 5|Открытая адресация|открытой адресации||open addressing}}, в которой каждая непустая ячейка [[хеш-таблица|хеш-таблицы]] содержит [[Первичный ключ|ключ]] или пару «[[ключ — значение]]». [[Хеш-функция]] используется для определения места для каждого ключа, и его присутствие в таблице (или значение, ассоциированное с ним) может быть найдено путём проверки этой ячейки в таблице. Однако открытая адресация страдает от [[Коллизия хеш-функции|коллизий]], которые случаются, когда более одного ключа попадают в одну ячейку.&lt;br /&gt;
Основная идея кукушкиного хеширования заключается в разрешении коллизий путём использования двух хеш-функций вместо одной. Это обеспечивает два возможных положения в хеш-таблице для каждого ключа. В одном из обычных вариантов алгоритма хеш-таблица разбивается на две меньшие таблицы меньшего размера и каждая хеш-функция даёт индекс в одну из этих двух таблиц. Можно обеспечить также для обеих хеш-функций индексирование внутри одной таблицы.&lt;br /&gt;
&lt;br /&gt;
Выборка требует просмотра всего двух мест в хеш-таблице, что требует постоянного времени в худшем случае (&amp;#039;&amp;#039;см.&amp;#039;&amp;#039; [[«O» большое и «o» малое]]). Это контрастирует с многими другими алгоритмами хеш-таблиц, которые не обеспечивают постоянное время выборки в худшем случае. Удаление также может быть осуществлено очищением ячейки, содержащей ключ за постоянное время в худшем случае, что осуществляется проще, чем в других схемах, таких как [[линейное зондирование]].&lt;br /&gt;
&lt;br /&gt;
Когда вставляется новый ключ и одна из двух ячеек пуста, ключ может быть помещён в эту ячейку. В случае же, когда обе ячейки заняты, необходимо переместить другие ключи в другие места (или, наоборот, на их прежние места), чтобы освободить место для нового ключа. Используется [[жадный алгоритм]] — ключ помещается в одну из возможных позиций, «выталкивая» любой ключ, который был в этой позиции. Вытолкнутый ключ затем помещается в его альтернативную позицию, снова выталкивая любой ключ, который мог там оказаться. Процесс продолжается, пока не найдётся пустая позиция. Возможен, однако, случай, когда процесс вставки заканчивается неудачей, попадая в [[бесконечный цикл]] или когда образуется слишком длинная цепочка (длиннее, чем заранее заданный порог, зависящий [[логарифм]]ически от длины таблицы). В этом случае хеш-таблица перестраивается {{не переведено 5|Алгоритм на месте|на месте||In-place algorithm}} с новыми [[хеш-функция]]ми:{{цитата|автор=Pagh &amp;amp; Rodler, «Cuckoo Hashing»|Нет необходимости размещения новой таблицы для повторного хеширования — мы можем просто просматривать таблицу для удаления и повторной вставки всех ключей, которые находятся не в той позиции, в которой должны были бы стоять.{{sfn|Pagh, Rodler|2001|с=121–133}} }}&lt;br /&gt;
&lt;br /&gt;
== Вычислительная сложность ==&lt;br /&gt;
Ожидаемое время вставки постоянно{{sfn|Pagh, Rodler|2001|с=121–133}}, даже если принимать во внимание возможную необходимость перестройки таблицы, пока число ключей меньше половины ёмкости хеш-таблицы, то есть {{не переведено 5|Коэффициент нагрузки (информатика)|коэффициент загрузки||Load factor (computer science)}} меньше 50 %.&lt;br /&gt;
&lt;br /&gt;
Чтобы обеспечить это, используется теория [[Случайный граф|случайных графов]] — можно образовать [[неориентированный граф]], называемый «кукушкиным графом», в котором вершинами являются ячейки хеш-таблицы, а рёбра для каждого хешируемого соединяют два возможных положения (ячейки хеш-таблицы). Тогда жадный алгоритм вставки множества значений в кукушкину хеш-таблицу успешно завершается тогда и только тогда, когда кукушкин граф для этого множества значений является [[псевдолес]]ом, графом максимум с одним циклом в каждой [[Компонента связности графа|компоненте связности]]. Любой порождённый вершинами подграф с числом рёбер, большим числа вершин, соответствует множеству ключей, для которых число слотов в хеш-таблице недостаточно. Если хеш-функция выбирается случайно, кукушкин граф будет [[Случайный граф|случайным графом]] в {{не переведено 5|Модель Эрдёша – Реньи|модели Эрдёша – Реньи||Erdős–Rényi model}}. С высокой степенью вероятности для случайного графа, в котором отношение числа рёбер к числу вершин ограничено сверху 1/2, граф является псевдолесом и алгоритм кукушкиного хеширования располагает успешно все ключи. Более того, та же теория доказывает, что ожидаемый размер [[Компонента связности графа|компонент связности]] кукушкиного графа мал, что обеспечивает постоянное ожидаемое время вставки{{sfn|Kutzelnigg|2006|с=403–406}}.&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
Если даны следующие две хеш-функции:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;h\left(k\right)=k\mod 11&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;h&amp;#039;\left(k\right)=\left\lfloor\frac{k}{11}\right\rfloor\mod 11&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:1em&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! k !! h(k) !! h&amp;#039;(k)&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 9 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 50 || 6 || 4&lt;br /&gt;
|-&lt;br /&gt;
| 53 || 9 || 4&lt;br /&gt;
|-&lt;br /&gt;
| 75 || 9 || 6&lt;br /&gt;
|-&lt;br /&gt;
| 100 || 1 || 9&lt;br /&gt;
|-&lt;br /&gt;
| 67 || 1 || 6&lt;br /&gt;
|-&lt;br /&gt;
| 105 || 6 || 9&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 3 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 36 || 3 || 3&lt;br /&gt;
|-&lt;br /&gt;
| 39 || 6 || 3&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Столбцы в следующих двух таблицах показывают состояние хеш-таблицы после вставки элементов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:1em&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;11&amp;quot; | 1. table for h(k)&lt;br /&gt;
|-&lt;br /&gt;
| || 20 || 50 || 53 || 75 || 100 || 67 || 105 || 3 || 36 || 39&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||  ||  ||  ||  ||  ||  ||  ||  ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||  ||  ||  ||  || 100 || 67 || 67 || 67 || 67 || 100&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||  ||  ||  ||  ||  ||  ||  ||  ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 ||  ||  ||  ||  ||  ||  ||  || 3 || 36 || 36&lt;br /&gt;
|-&lt;br /&gt;
| 4 ||  ||  ||  ||  ||  ||  ||  ||  ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 ||  ||  ||  ||  ||  ||  ||  ||  ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||  || 50 || 50 || 50 || 50 || 50 || 105 || 105 || 105 || 50&lt;br /&gt;
|-&lt;br /&gt;
| 7 ||  ||  ||  ||  ||  ||  ||  ||  ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 ||  ||  ||  ||  ||  ||  ||  ||  ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 20 || 20 || 53 || 75 || 75 || 75 || 53 || 53 || 53 || 75&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||  ||  ||  ||  ||  ||  ||  ||  ||  ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;11&amp;quot; | 2. table for h&amp;#039;(k)&lt;br /&gt;
|-&lt;br /&gt;
| || 20 || 50 || 53 || 75 || 100 || 67 || 105 || 3 || 36 || 39&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||  ||  ||  ||  ||  ||  ||  ||  || 3 || 3&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||  ||  || 20 || 20 || 20 || 20 || 20 || 20 || 20 || 20&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||  ||  ||  ||  ||  ||  ||  ||  ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 ||  ||  ||  ||  ||  ||  ||  ||  ||  || 39&lt;br /&gt;
|-&lt;br /&gt;
| 4 ||  ||  ||  || 53 || 53 || 53 || 50 || 50 || 50 || 53&lt;br /&gt;
|-&lt;br /&gt;
| 5 ||  ||  ||  ||  ||  ||  ||  ||  ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||  ||  ||  ||  ||  ||  || 75 || 75 || 75 || 67&lt;br /&gt;
|-&lt;br /&gt;
| 7 ||  ||  ||  ||  ||  ||  ||  ||  ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 ||  ||  ||  ||  ||  ||  ||  ||  ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 ||  ||  ||  ||  ||  || 100 || 100 || 100 || 100 || 105&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||  ||  ||  ||  ||  ||  ||  ||  ||  ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
=== Циклы ===&lt;br /&gt;
Если вы хотите вставить элемент 6, вы получите бесконечный цикл. В последней строке таблицы мы находим ту же начальную ситуацию, что и в начале.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h\left(6\right)=6\mod 11=6&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;h&amp;#039;\left(6\right)=\left\lfloor\frac{6}{11}\right\rfloor\mod 11=0&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| ключ || ! colspan=&amp;quot;2&amp;quot; | table 1 || ! colspan=&amp;quot;2&amp;quot; | table 2&lt;br /&gt;
|-&lt;br /&gt;
| || старое&amp;lt;BR&amp;gt;значение || новое&amp;lt;BR&amp;gt;значение || старое&amp;lt;BR&amp;gt;значение || новое&amp;lt;BR&amp;gt;значение&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 50 || 6 || 53 || 50&lt;br /&gt;
|-&lt;br /&gt;
| 53 || 75 || 53 || 67 || 75&lt;br /&gt;
|-&lt;br /&gt;
| 67 || 100 || 67 || 105 || 100&lt;br /&gt;
|-&lt;br /&gt;
| 105 || 6 || 105 || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 36 || 3 || 39 || 36&lt;br /&gt;
|-&lt;br /&gt;
| 39 || 105 || 39 || 100 || 105&lt;br /&gt;
|-&lt;br /&gt;
| 100 || 67 || 100 || 75 || 67&lt;br /&gt;
|-&lt;br /&gt;
| 75 || 53 || 75 || 50 || 53&lt;br /&gt;
|-&lt;br /&gt;
| 50 || 39 || 50 || 36 || 39&lt;br /&gt;
|-&lt;br /&gt;
| 36 || 3 || 36 || 6 || 3&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 50 || 6 || 53 || 50&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Вариации ==&lt;br /&gt;
Изучались некоторые вариации кукушкиного хеширования, в основном с целью улучшить использование пространства путём увеличения {{не переведено 5|Коэффициент нагрузки (информатика)|коэффициента загрузки||Load factor (computer science)}}. В этих вариантах может достигаться порог загрузки больше 50 %. Некоторые из этих методов могут быть использованы для существенного уменьшения числа необходимых перестроек структуры данных.&lt;br /&gt;
&lt;br /&gt;
От обобщения кукушкиного хеширования, использующего более двух хеш-функций, можно ожидать лучшего использования хеш-таблицы, жертвуя некоторой скоростью выборки и вставки. Использование трёх хеш-функций повышает коэффициент загрузки до 91 % {{sfn|Mitzenmacher|2009}}.&lt;br /&gt;
Другое обобщение кукушкиного хеширования, называемое &amp;#039;&amp;#039;блочным кукушкиным хешированием&amp;#039;&amp;#039;, содержит более одного ключа на ячейку. Использование двух ключей на ячейку позволяет повысить загрузку выше 80 %{{sfn|Dietzfelbinger, Weidling|2007|с=47–68}}.&lt;br /&gt;
&lt;br /&gt;
Ещё один изучавшийся вариант — &amp;#039;&amp;#039;кукушкино хеширование с запасом&amp;#039;&amp;#039;. «Запас» — это массив ключей постоянной длины, который используется для хранения ключей, которые не могут быть успешно вставлены в главную хеш-таблицу. Эта модификация уменьшает число неудач до обратно-полиномиальной функции со степенью, которая может быть произвольно большой, путём увеличения размера запаса. Однако большой запас означает более медленный поиск ключа, которого нет в основной таблице, либо если он находится в запасе. Запас можно использовать в комбинации с более чем двумя хеш-функциями или с блоковым кукушкиным хешированием для получения как высокой степени загрузки, так и малого числа неудач вставки{{sfn|Kirsch, Mitzenmacher, Wieder|2010|с=1543–1561}}. Анализ кукушкиного хеширования с запасом распространился и на практические хеш-функции, не только случайные модели хеш-функций, используемые в теоретическом анализе хеширования{{sfn|Aumüller, Dietzfelbinger, Woelfel|2014|с= 428–456}}.&lt;br /&gt;
&lt;br /&gt;
Некоторые исследователи предлагают использовать в некоторых [[Кэш процессора|кэшах процессора]] упрощенное обобщение кукушкиного хеширования, называемого [[Кэш процессора|несимметричным ассоциативным кэшем]].&amp;lt;ref&amp;gt;&lt;br /&gt;
[http://www.irisa.fr/caps/PROJECTS/Architecture/ «Micro-Architecture»].&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сравнение с аналогичными структурами ==&lt;br /&gt;
Есть другие алгоритмы, которые используют несколько хеш-функций, в частности [[фильтр Блума]] — эффективная по памяти структура данных для нечётких множеств. Альтернативная структура данных для задач с теми же нечёткими множествами, основанная на кукушкином хешировании, называемая [[Кукушкин фильтр|кукушкиным фильтром]], использует даже меньшую память и (в отличие от классических фильтров Блума) позволяет удаление элемента, не только вставку и проверку существования. Однако теоретический анализ этих методов проведён существенно слабее, чем анализ фильтров Блума{{sfn|Fan, Kaminsky, Andersen|2013|с=36–40 }}.&lt;br /&gt;
&lt;br /&gt;
Исследования 2006 года{{sfn|Zukowski, Heman, Boncz|2006}} показали, что кукушкино хеширование существенно быстрее [[Хеш-таблица|метода цепочек]] для малых хеш-таблиц, находящихся в [[Кэш процессора|кэше]] современных процессоров. В том же году{{sfn|Ross|2006}} разработана блочная версия кукушкиного хеширования (блок содержит более одного ключа), которая работает быстрее обычных методов для больших хеш-таблиц в случае высокого коэффициента загрузки. Скорость работы блочной версии кукушкиной хеш-таблицы исследована в 2009 году{{sfn|Askitis|2009|с=113–122}}.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* {{не переведено 5|Совершенная функция хеширования|||Perfect hashing}}&lt;br /&gt;
* [[Линейное зондирование]]&lt;br /&gt;
* {{не переведено 5|Двойное хеширование|||Double hashing}}&lt;br /&gt;
* [[Коллизия хеш-функции]]&lt;br /&gt;
* [[Хеширование]]&lt;br /&gt;
* {{не переведено 5|Квадратичное зондирование|||Quadratic probing}}&lt;br /&gt;
* {{не переведено 5|Хеширование «Классики»|||Hopscotch hashing}}&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
{{примечания |2}}&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
* {{книга&lt;br /&gt;
|автор=Rasmus Pagh, Flemming Friche Rodler&lt;br /&gt;
|ref=Pagh, Rodler&lt;br /&gt;
|часть= Cuckoo Hashing&lt;br /&gt;
|url= http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.25.4189| doi = 10.1007/3-540-44676-1_10&lt;br /&gt;
|заглавие=Algorithms — ESA 2001&lt;br /&gt;
|серия=Lecture Notes in Computer Science&lt;br /&gt;
|том=2161&lt;br /&gt;
|страницы=121–133&lt;br /&gt;
|год=2001&lt;br /&gt;
|isbn=978-3-540-42493-2&lt;br /&gt;
}}&lt;br /&gt;
* {{книга&lt;br /&gt;
|автор=Reinhard Kutzelnigg&lt;br /&gt;
|ref=Kutzelnigg&lt;br /&gt;
|url=https://www.dmtcs.org/dmtcs-ojs/index.php/proceedings/article/viewFile/dmAG0133/1710.pdf&lt;br /&gt;
|заглавие=Fourth Colloquium on Mathematics and Computer Science&lt;br /&gt;
|вклад=Bipartite random graphs and cuckoo hashing&lt;br /&gt;
|серия=Discrete Mathematics and Theoretical Computer Science&lt;br /&gt;
|год=2006&lt;br /&gt;
|том=AG&lt;br /&gt;
|страницы=403–406&lt;br /&gt;
}}&lt;br /&gt;
* {{книга&lt;br /&gt;
|автор=M. Mitzenmacher&lt;br /&gt;
|ref=Mitzenmacher&lt;br /&gt;
|вклад=Some Open Questions Related to Cuckoo Hashing&lt;br /&gt;
|заглавие=Proceedings of of the 17th Annual European Symposium on Algorithms (ESA)&lt;br /&gt;
|год=2009&lt;br /&gt;
|url=http://www.eecs.harvard.edu/~michaelm/postscripts/esa2009.pdf&lt;br /&gt;
|accessdate=2010-11-10 &lt;br /&gt;
}}&lt;br /&gt;
* {{статья&lt;br /&gt;
|автор=Martin Dietzfelbinger, Christoph Weidling&lt;br /&gt;
|ref=Dietzfelbinger, Weidling&lt;br /&gt;
|doi= 10.1016/j.tcs.2007.02.054&lt;br /&gt;
|выпуск=1—2&lt;br /&gt;
|издание =Theoret. Comput. Sci.&lt;br /&gt;
|mr= 2330641&lt;br /&gt;
|страницы= 47–68&lt;br /&gt;
|заглавие= Balanced allocation and dictionaries with tightly packed constant size bins&lt;br /&gt;
|том= 380&lt;br /&gt;
|год= 2007&lt;br /&gt;
}}&lt;br /&gt;
* {{статья&lt;br /&gt;
|автор=Adam Kirsch, Michael D. Mitzenmacher, Udi Wieder&lt;br /&gt;
|ref=Kirsch, Mitzenmacher, Wieder&lt;br /&gt;
|doi=10.1137/080728743&lt;br /&gt;
|выпуск= 4&lt;br /&gt;
|издание= SIAM J. Comput.&lt;br /&gt;
|mr= 2580539&lt;br /&gt;
|страницы= 1543–1561&lt;br /&gt;
|заглавие= More robust hashing: cuckoo hashing with a stash&lt;br /&gt;
|том= 39&lt;br /&gt;
|год= 2010&lt;br /&gt;
}}&lt;br /&gt;
* {{статья&lt;br /&gt;
|автор=Martin Aumüller, Martin Dietzfelbinger, Philipp Woelfel&lt;br /&gt;
|ref=Aumüller, Dietzfelbinger, Woelfel&lt;br /&gt;
|doi= 10.1007/s00453-013-9840-x&lt;br /&gt;
|выпуск= 3&lt;br /&gt;
|издание= Algorithmica&lt;br /&gt;
|mr= 3247374&lt;br /&gt;
|страницы= 428–456&lt;br /&gt;
|заглавие= Explicit and efficient hash families suffice for cuckoo hashing with a stash&lt;br /&gt;
|том= 70&lt;br /&gt;
|год= 2014&lt;br /&gt;
}}&lt;br /&gt;
* {{статья&lt;br /&gt;
|автор=Bin Fan, Michael Kaminsky, David Andersen&lt;br /&gt;
|ref=Fan, Kaminsky, Andersen&lt;br /&gt;
|заглавие=Cuckoo Filter: Better Than Bloom&lt;br /&gt;
|издание=;login:&lt;br /&gt;
|год=2013&lt;br /&gt;
|том=38&lt;br /&gt;
|выпуск=4&lt;br /&gt;
|страницы=36–40&lt;br /&gt;
|url=http://www.cs.cmu.edu/~binfan/papers/login_cuckoofilter.pdf&lt;br /&gt;
|accessdate=12 June 2014&lt;br /&gt;
|издательство=USENIX&lt;br /&gt;
}}&lt;br /&gt;
* {{статья&lt;br /&gt;
|автор=Marcin Zukowski, Sandor Heman, Peter Boncz&lt;br /&gt;
|ref=Zukowski, Heman, Boncz&lt;br /&gt;
|заглавие=Architecture-Conscious Hashing&lt;br /&gt;
|издательство=Proceedings of the International Workshop on Data Management on New Hardware (DaMoN)&lt;br /&gt;
|год=2006&lt;br /&gt;
|url=http://www.cs.cmu.edu/~damon2006/pdf/zukowski06archconscioushashing.pdf&lt;br /&gt;
|accessdate=2008-10-16&lt;br /&gt;
}}&lt;br /&gt;
* {{статья&lt;br /&gt;
|автор=Kenneth Ross&lt;br /&gt;
|ref=Ross&lt;br /&gt;
|заглавие=Efficient Hash Probes on Modern Processors&lt;br /&gt;
|издательство=IBM Research Report RC24100&lt;br /&gt;
|год=2006 &lt;br /&gt;
|url=http://domino.research.ibm.com/library/cyberdig.nsf/papers/DF54E3545C82E8A585257222006FD9A2/$File/rc24100.pdf&lt;br /&gt;
|id=RC24100&lt;br /&gt;
|accessdate=2008-10-16 &lt;br /&gt;
}}&lt;br /&gt;
* {{книга&lt;br /&gt;
|заглавие=Fast and Compact Hash Tables for Integer Keys&lt;br /&gt;
|автор=Nikolas Askitis &lt;br /&gt;
|ref=Askitis&lt;br /&gt;
|год=2009&lt;br /&gt;
|isbn=978-1-920682-72-9&lt;br /&gt;
|url=http://crpit.com/confpapers/CRPITV91Askitis.pdf&lt;br /&gt;
|страницы=113–122&lt;br /&gt;
|издание=Proceedings of the 32nd Australasian Computer Science Conference (ACSC 2009)&lt;br /&gt;
|том=91&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://www.ru.is/faculty/ulfar/CuckooHash.pdf A cool and practical alternative to traditional hash tables], U. Erlingsson, M. Manasse, F. Mcsherry, 2006.&lt;br /&gt;
* [https://web.archive.org/web/20110615042618/http://www.it-c.dk/people/pagh/papers/cuckoo-undergrad.pdf Cuckoo Hashing for Undergraduates, 2006], R. Pagh, 2006.&lt;br /&gt;
* [http://mybiasedcoin.blogspot.com/2007/06/cuckoo-hashing-theory-and-practice-part.html Cuckoo Hashing, Theory and Practice] (Part 1, [http://mybiasedcoin.blogspot.com/2007/06/cuckoo-hashing-theory-and-practice-part_15.html Part 2] and [http://mybiasedcoin.blogspot.com/2007/06/cuckoo-hashing-theory-and-practice-part_19.html Part 3]), Michael Mitzenmacher, 2007.&lt;br /&gt;
* {{книга&lt;br /&gt;
|автор=Moni Naor, Gil Segev, Udi Wieder&lt;br /&gt;
|вклад=History-Independent Cuckoo Hashing&lt;br /&gt;
|заглавие=International Colloquium on Automata, Languages and Programming (ICALP) |место=Reykjavik, Iceland&lt;br /&gt;
|год=2008&lt;br /&gt;
|url=http://www.wisdom.weizmann.ac.il/~naor/PAPERS/cuckoo_hi_abs.html&lt;br /&gt;
|accessdate=2008-07-21&lt;br /&gt;
}}&lt;br /&gt;
* [http://www.cs.princeton.edu/~mfreed/docs/cuckoo-eurosys14.pdf Algorithmic Improvements for Fast Concurrent Cuckoo Hashing], X. Li, D. Andersen, M. Kaminsky, M. Freedman. EuroSys 2014.&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
* [https://github.com/efficient/libcuckoo Concurrent high-performance Cuckoo hashtable written in C++]&lt;br /&gt;
* [http://sourceforge.net/projects/cuckoo-cpp/ Cuckoo hash map written in C++]&lt;br /&gt;
* [http://www.theiling.de/projects/lookuptable.html Static cuckoo hashtable generator for C/C++]&lt;br /&gt;
* [https://github.com/joacima/Cuckoo-hash-map/blob/master/CuckooHashMap.java Generic Cuckoo hashmap in Java]{{Недоступная ссылка|date=Октябрь 2018 |bot=InternetArchiveBot }}&lt;br /&gt;
* [http://hackage.haskell.org/packages/archive/hashtables/latest/doc/html/Data-HashTable-ST-Cuckoo.html Cuckoo hash table written in Haskell]&lt;br /&gt;
* [https://github.com/salviati/cuckoo Cuckoo hashing for Go]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы поиска]]&lt;br /&gt;
[[Категория:Хеширование]]&lt;br /&gt;
&lt;br /&gt;
{{rq|checktranslate|style}}&lt;/div&gt;</summary>
		<author><name>ru_wikipedia&gt;Joparino</name></author>
	</entry>
</feed>