[linux-l] mbox/Maildir/tar
Rocco Rutte
pdmef at gmx.net
Mi Nov 28 15:27:01 CET 2007
Hi,
* Ivan F. Villanueva B. wrote:
>Am Mi, Nov 28, 2007 10:42:14 +0100, Rocco Rutte schrieb:
>> O(log(n))/O(1) statt O(n)
> ^^^^^
> das verstehe ich nicht
Gute Hashtabellen (max. 50% voll, gute Hashfunktion mit guter Streuung)
haben im Mittel keine Kollisionen, d.h. der Eintrag ist nach Berechnung
der Hashsumme modulo Tabellengröße immer im Mittel sofort gefunden. Im
worst-case kommt die Komplexität glaube ich auf das Verfahren zur
Kollisionsauflösung an. Wenn man chaining (also verkettete Liste an der
Stelle in der Tabelle) benutzt, kann man im schlechtesten Fall eine
einfach verlinkte Liste haben, also O(n) (z.B. wenn die Tabelle nur 1
Zeile hat). Bei linearem Auflösen (also Soll-Stelle je 1 Stelle weiter
probieren) müsste man auch auf O(n) kommen. Für andere Verfahren weiss
ich es nicht aus dem Kopf.
Ist aber schon 'ne Weile her, dass das in der Uni dran war. IIRC gibt es
für O(1) auch einen Beweis (zumindest denke ich dass der Prof mal sowas
erwähnt hatte)...
Nachteil: Hashtabellen brauchen viel Pflege und ggfs. zu lange, um die
Elemente neu einzusortieren, damit die 50% Füllstandsbedingung erfüllt
bleibt. Obwohl Datenbanken wie PostgreSQL dafür wohl Lösungen haben
(wenn man einen Index als Hash statt als B-Baum möchte), aber trivial
sah das nicht mehr aus als ich das Paper dazu mal überflogen hatte.
MfG, Rocco
Mehr Informationen über die Mailingliste linux-l