<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Doppel-Hashing</id>
	<title>Doppel-Hashing - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Doppel-Hashing"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Doppel-Hashing&amp;action=history"/>
	<updated>2026-05-26T09:34:05Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Doppel-Hashing&amp;diff=607752&amp;oldid=prev</id>
		<title>imported&gt;SchlurcherBot: Bot: http → https</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Doppel-Hashing&amp;diff=607752&amp;oldid=prev"/>
		<updated>2026-01-10T21:20:56Z</updated>

		<summary type="html">&lt;p&gt;Bot: http → https&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Beim &amp;#039;&amp;#039;&amp;#039;Doppelstreuwertverfahren&amp;#039;&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;&amp;#039;Doppel-Hashing&amp;#039;&amp;#039;&amp;#039; ({{enS|double hashing}}) handelt es sich um eine Methode zur Realisierung eines &amp;#039;&amp;#039;geschlossenen [[Hashfunktion|Hash-Verfahrens]]&amp;#039;&amp;#039;.&lt;br /&gt;
In geschlossenen Hash-Verfahren wird versucht, Überläufer &amp;#039;&amp;#039;in&amp;#039;&amp;#039; der [[Hashtabelle|Hash-Tabelle]] unterzubringen, anstatt sie innerhalb der Zelle (z.&amp;amp;nbsp;B. als Liste) zu speichern. (Offene Hash-Verfahren können Einträge doppelt belegen und benötigen daher keine Sondierung.)&lt;br /&gt;
Achtung: Wie es im Artikel [[Hashtabelle]] unter „Varianten des Hashverfahrens“ steht, werden die Bezeichnungen „offenes“ bzw. „geschlossenes Hashing“ auch in genau umgekehrter Bedeutung verwendet.&lt;br /&gt;
&lt;br /&gt;
Um dies umzusetzen, verwendet man beim Doppel-Hashing eine Sondierungsfunktion, die eine sekundäre Hash-Funktion beinhaltet, z.&amp;amp;nbsp;B. &amp;lt;math&amp;gt;\;s(j,k) := j\cdot h&amp;#039;(k)&amp;lt;/math&amp;gt;, und die angewendet wird, falls der durch die primäre Hash-Funktion &amp;lt;math&amp;gt;\;h(k)&amp;lt;/math&amp;gt; berechnete Index bereits besetzt ist.&lt;br /&gt;
&lt;br /&gt;
Die vollständige Hash-Funktion lautet dann: &amp;lt;math&amp;gt;\;h(k) - s(j,k)&amp;lt;/math&amp;gt;, wobei &amp;#039;&amp;#039;j&amp;#039;&amp;#039; die Anzahl bereits „ausprobierter“ Indizes ist, d.&amp;amp;nbsp;h., dass &amp;#039;&amp;#039;j&amp;#039;&amp;#039; jedes Mal um 1 erhöht wird, wenn ein Index bereits belegt ist.&lt;br /&gt;
&lt;br /&gt;
Die Sondierungsfunktion &amp;lt;math&amp;gt;\;s(j,k)&amp;lt;/math&amp;gt; soll dabei eine Permutation der Indizes der Hash-Tabelle bilden.&lt;br /&gt;
&lt;br /&gt;
Die Folge von Hash-Funktionen, die nun mittels &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;h&amp;#039;&amp;lt;/math&amp;gt; gebildet werden, sieht so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_j(k) = (h(k)+h&amp;#039;(k)\cdot j) ~ \bmod ~ m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Kosten für diese Methode sind nahe den Kosten für ein ideales Hashing.&lt;br /&gt;
&lt;br /&gt;
== Unabhängigkeit der Hashfunktionen ==&lt;br /&gt;
Beim Doppel-Hashing werden zwei unabhängige Hash-Funktionen &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;h&amp;#039;&amp;lt;/math&amp;gt; angewandt. Diese heißen unabhängig, wenn die Wahrscheinlichkeit für eine sogenannte Doppelkollision, d.&amp;amp;nbsp;h. &amp;lt;math&amp;gt;h(k)=h(y) \land h&amp;#039;(k)=h&amp;#039;(y)&amp;lt;/math&amp;gt;, kleiner gleich &amp;lt;math&amp;gt;1/m^2&amp;lt;/math&amp;gt; und damit minimal ist, wobei &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; die Größe des Arrays ist.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
=== Beispielfunktionen ===&lt;br /&gt;
Größe des Arrays: m&lt;br /&gt;
&lt;br /&gt;
Indizes: {0; m-1}&lt;br /&gt;
&lt;br /&gt;
Primäre Hash-Funktion: &amp;lt;math&amp;gt;h(k) := k\;\bmod\;m&amp;lt;/math&amp;gt;  ([[Divisions-Rest-Methode]])&lt;br /&gt;
&lt;br /&gt;
Sekundäre Hash-Funktion: &amp;lt;math&amp;gt;\;h&amp;#039;(k) := k \;\bmod\;(m-2) +1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sondierungsfunktion: &amp;lt;math&amp;gt;\;s(j,k) := j\cdot (k\;\bmod\;(m-2) +1 )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vollständige Doppel-Hash-Funktion: &amp;lt;math&amp;gt;\;h_j(k) := (k\;\bmod\;m + j\cdot (k\;\bmod\;(m-2)+1)) \bmod m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Berechnungsbeispiel ===&lt;br /&gt;
&lt;br /&gt;
Größe des Arrays: m = 7&lt;br /&gt;
&lt;br /&gt;
;Hashfunktionen:&lt;br /&gt;
:&amp;lt;math&amp;gt;h(k) := k\;\bmod\;7  &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;h&amp;#039;(k) := k\;\bmod\;5 +1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Sondierungsfunktion :&lt;br /&gt;
:&amp;lt;math&amp;gt;h_j(k) := (h(k)+j\cdot h&amp;#039;(k))\;\bmod\;m &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hashtabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
!k || 10 || 19 || 31 || 22 || 14 || 16&lt;br /&gt;
|-&lt;br /&gt;
|h|| 3 || 5  || 3  || 1  || 0  || 2&lt;br /&gt;
|-&lt;br /&gt;
|h&amp;#039;|| 1 || 5  || 2  || 3  || 5  || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das mit Hilfe von Hashtabelle und Sondierungsfunktion gefüllte Array:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe8&amp;quot;&lt;br /&gt;
! 0 || 1|| 2 || 3 || 4 || 5 || 6&lt;br /&gt;
|-&lt;br /&gt;
|31 || 22 || 16 || 10 || - || 19 || 14&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Erklärung am Beispiel &amp;lt;math&amp;gt;k = 31&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k  =10&amp;lt;/math&amp;gt; sowie &amp;lt;math&amp;gt;k=19&amp;lt;/math&amp;gt; erzeugen keine Kollision und benötigen deshalb nicht die Doppel-Hash-Funktion &amp;lt;math&amp;gt;h_j&amp;lt;/math&amp;gt;. Der Index der Hash-Funktion &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; kann hier abgelesen werden. &amp;lt;math&amp;gt;k = 31&amp;lt;/math&amp;gt; erzeugt eine Kollision im Array an der Stelle &amp;lt;math&amp;gt;3&amp;lt;/math&amp;gt; , weshalb man nun die Doppel-Hash-Funktion &amp;lt;math&amp;gt;h_j&amp;lt;/math&amp;gt; mit &amp;lt;math&amp;gt;j=1&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;h_{1}(31) = (h(31)+1\cdot h&amp;#039;(31))\;\bmod\;7 \equiv (3+1\cdot2)\;\bmod\;7 \equiv 5\;\bmod\;7 \equiv 5&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Stelle &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt; erzeugt wieder eine Kollision, weshalb &amp;lt;math&amp;gt;h_j&amp;lt;/math&amp;gt; nun mit &amp;lt;math&amp;gt;j=2&amp;lt;/math&amp;gt; aufgerufen wird:&lt;br /&gt;
:&amp;lt;math&amp;gt;h_2(31) = (h(31)+2\cdot h&amp;#039;(31))\;\bmod\;7 \equiv (3+2\cdot 2)\;\bmod\;7 \equiv 7\;\bmod\;7 \equiv 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Stelle &amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt; ist frei und erhält somit den Inhalt &amp;lt;math&amp;gt;31&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://www-lehre.inf.uos.de/~ainf/2003/skript/node78.html Geschlossenes Hashing]&lt;br /&gt;
* [https://www-lehre.inf.uos.de/~ainf/2004/skript/node78.html Offenes Hashing]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Hash]]&lt;/div&gt;</summary>
		<author><name>imported&gt;SchlurcherBot</name></author>
	</entry>
</feed>