<?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=Perfekte_Hash-Funktion</id>
	<title>Perfekte Hash-Funktion - 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=Perfekte_Hash-Funktion"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Perfekte_Hash-Funktion&amp;action=history"/>
	<updated>2026-05-26T10:30:22Z</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=Perfekte_Hash-Funktion&amp;diff=367469&amp;oldid=prev</id>
		<title>imported&gt;Gunnar.Kaestle: spezifischere Wikilink-Auswahl</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Perfekte_Hash-Funktion&amp;diff=367469&amp;oldid=prev"/>
		<updated>2024-12-21T15:02:41Z</updated>

		<summary type="html">&lt;p&gt;spezifischere Wikilink-Auswahl&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Eine &amp;#039;&amp;#039;&amp;#039;perfekte Hash-Funktion&amp;#039;&amp;#039;&amp;#039; ist eine [[Hashfunktion]] &amp;lt;math&amp;gt;h\colon S \rightarrow T&amp;lt;/math&amp;gt;, die unterschiedliche Elemente &amp;lt;math&amp;gt;x \neq x&amp;#039;&amp;lt;/math&amp;gt; aus einer endlichen und festen [[Definitionsmenge|Schlüsselmenge]] &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; auf unterschiedliche Elemente &amp;lt;math&amp;gt;h(x) \neq h(x&amp;#039;)&amp;lt;/math&amp;gt; aus einer [[Bildmenge]] &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; [[Funktion (Mathematik)|abbildet]] (keine Kollisionen, [[Injektivität]]). Aus der Injektivität ergibt sich ein wichtiger Vorteil: Auf ein Element einer [[Hashtabelle]], die mit einer perfekten Hash-Funktion erstellt wurde, kann im [[Zeitkomplexität|worst Case]] in konstanter [[Zugriffszeit|Zeit zugegriffen]] werden.&lt;br /&gt;
&lt;br /&gt;
Eine perfekte Hash-Funktion heißt &amp;#039;&amp;#039;&amp;#039;minimal&amp;#039;&amp;#039;&amp;#039;, wenn &amp;lt;math&amp;gt;T = \{ 0, \dotsc, \left\vert S \right\vert - 1 \}&amp;lt;/math&amp;gt;, d.&amp;amp;nbsp;h. &amp;lt;math&amp;gt;\left\vert S \right\vert = \left\vert T \right\vert\,&amp;lt;/math&amp;gt;. Das bedeutet, dass die Bildmenge der Funktion genauso viele Elemente wie die Urbildmenge hat. In der Praxis senkt dies den [[Speicherbedarf]] des [[Feld (Datentyp)|Arrays]], das die Elemente für jedes &amp;lt;math&amp;gt;h(s)&amp;lt;/math&amp;gt; mit &amp;lt;math&amp;gt;s \in S&amp;lt;/math&amp;gt; speichert, auf das Minimum.&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu nicht perfektem Hashing, das [[Amortisierte Laufzeitanalyse|amortisiert]] &amp;lt;math&amp;gt;\mathcal O(1)&amp;lt;/math&amp;gt; Zugriffszeit benötigt und im worst Case &amp;lt;math&amp;gt;\mathcal O(\log n)&amp;lt;/math&amp;gt;, bietet perfektes Hashing selbst im worst Case einen Zugriff auf die Elemente in &amp;#039;&amp;#039;konstanter Zeit&amp;#039;&amp;#039; &amp;lt;math&amp;gt;\mathcal O(1)&amp;lt;/math&amp;gt;, ist also deutlich schneller. Dies wird erreicht, indem die Werte &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; der Schlüssel in einem von &amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt; bis &amp;lt;math&amp;gt;\left\vert T \right\vert - 1&amp;lt;/math&amp;gt; [[Feld (Datentyp) #Indizes|indizierten]] Array an der Position &amp;lt;math&amp;gt;h(s)&amp;lt;/math&amp;gt; gespeichert werden; im Gegensatz zu normalem Hashing enthält jeder Eimer (Bucket) aufgrund der Injektivität von &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; also nur genau ein Element. Dafür bezahlt man mit [[Rechenzeit]], um die Hashfunktion zu konstruieren, und benötigt mehr Speicherplatz.&lt;br /&gt;
&lt;br /&gt;
In der Praxis sucht man Hashfunktionen mit folgenden Eigenschaften:&lt;br /&gt;
* Konstruktion in &amp;lt;math&amp;gt;\mathcal O(n)&amp;lt;/math&amp;gt; Zeit, d.&amp;amp;nbsp;h. mit wachsender Schlüsselanzahl &amp;lt;math&amp;gt;\left\vert S \right\vert&amp;lt;/math&amp;gt; steigt die Zeit der Konstruktion [[Linearität (Mathematik)|linear]].&lt;br /&gt;
* Evaluation in &amp;lt;math&amp;gt;\mathcal O(1)&amp;lt;/math&amp;gt;, d.&amp;amp;nbsp;h. nach Konstruktion kann man einen Schlüssel &amp;lt;math&amp;gt;s \in S&amp;lt;/math&amp;gt; in konstanter Zeit auf einen Index &amp;lt;math&amp;gt;h(s)&amp;lt;/math&amp;gt; abbilden.&lt;br /&gt;
* Die Hashfunktion benötigt möglichst wenig Speicher.&lt;br /&gt;
* Die Hashfunktion soll minimal perfekt sein.&lt;br /&gt;
&lt;br /&gt;
Derzeit gängige minimal perfekte Hashfunktionen arbeiten in &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; Zeit zur Konstruktion und benötigen mindestens 1,56&amp;amp;nbsp;[[Bit]] pro Schlüssel.&amp;lt;ref&amp;gt;{{Internetquelle &lt;br /&gt;
 | autor=Emmanuel Esposito, Thomas Mueller Graf, Sebastiano Vigna &lt;br /&gt;
 | titel=RecSplit: Minimal Perfect Hashing via Recursive Splitting &lt;br /&gt;
 | url=https://epubs.siam.org/doi/pdf/10.1137/1.9781611976007.14 &lt;br /&gt;
 | sprache=en &lt;br /&gt;
 | datum=2020 &lt;br /&gt;
 | abruf=2020-01-23 &lt;br /&gt;
 | hrsg=2020 Proceedings of the Symposium on Algorithm Engineering and Experiments (ALENEX)}}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Minimale) perfekte Hashfunktionen sind in der Praxis dann angebracht, wenn:&lt;br /&gt;
* es eine &amp;#039;&amp;#039;feste&amp;#039;&amp;#039; Schlüsselmenge &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; gibt, der jeweils Werte zugeordnet sind (bei sich ständig ändernden Schlüsselmengen wäre eine ständige Neukonstruktion zu zeitintensiv),&lt;br /&gt;
* genug Zeit vorhanden ist, um die Hashfunktion zu konstruieren,&lt;br /&gt;
* auf die Werte ein Zugriff in konstanter Zeit benötigt wird,&lt;br /&gt;
* zusätzlicher Speicher für die Hashfunktion vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Hash]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Gunnar.Kaestle</name></author>
	</entry>
</feed>