Ich versuche, Hausaufgaben zu machen, mit einem Freund und eine Frage stellt, die durchschnittliche Laufzeit der Suche, hinzufügen und für die lineare Sondieren Methode löschen. Ich denke, es ist O (n), weil es bei einer bestimmten Anzahl von Knoten prüfen muss, bis es einen offenen Knoten zum Hinzufügen findet. Und beim Suchen beginnt es beim ursprünglichen Index und bewegt sich nach oben, bis es die gewünschte Nummer findet. Aber meine Freunde sagen, es ist O (1). Welcher ist richtig?Hashkollision Linear Probing Laufzeit
Antwort
Wenn wir über Asymptotic Komplexitäten sprechen nehmen wir in der Regel in Betracht sehr große n. Nun zur Kollisionsverarbeitung in einer Hash-Tabelle sind einige der Methoden verkettet & lineares Sondieren. In beiden Fällen können zwei Dinge passieren (die Ihnen bei der Beantwortung Ihrer Frage helfen können): 1. Möglicherweise müssen Sie die Größe der Hash-Tabelle ändern, damit sie voll wird. 2. Es kann zu Kollisionen kommen.
Im schlimmsten Fall hängt es davon ab, wie Sie Ihre Hash-Tabelle implementiert haben, sagen in linearen Sondieren Sie die Nummer nicht finden, Sie bewegen sich weiter und die Nummer, die Sie suchten, war am Ende. Hier kommt die O (n) worst case Laufzeit. Wenn eine Kollision auftritt, sagen wir, dass wir die Schlüssel in einem ausgeglichenen Binärbaum gespeichert haben, so dass die Worst-Case-Laufzeit O (log n) wäre.
Nun zu bester Fall Laufzeit kommt, glaube ich, gibt es keine Verwirrung ist, in beiden Fällen wäre es O (1) sein.
O (n) würde im schlimmsten Fall passieren, und nicht in einem durchschnittlichen Fall eine gute entworfen Hash-Tabelle. Wenn das passiert, beginnt im durchschnittlichen Fall Hash-Tabellen nicht einen Platz in Datenstrukturen finden, weil dann ausgeglichene Bäume im Durchschnitt geben würden Sie O (n log) immer und obendrein den Auftrag zu erhalten.
Leider dies zu sagen, aber leider Ihr Freund ist richtig. Ihr Fall würde in Worst-Case-Szenarien passieren.
Auch hier suchen informatives Zeug heißt die fortgeführten Anschaffungslaufzeit: Time complexity of Hash table
Danke @DanAllen, dein Kommentar oben ist wirklich motivierend :) – Yavar
- 1. Hash-Tabelle lineare Probing-Datenstruktur
- 2. Spark Graphx: Zeit Die Kosten steigen pro Runde linear linear
- 3. Rückwärts abspielen Linear Gradient
- 4. Linear Baum in Flex
- 5. Android Linear Layout steching
- 6. Linear Search Algorithmus Optimierung
- 7. Linear fit mit scipy.optimize.curve_fit
- 8. Skaliert hbase wirklich linear?
- 9. Trainingskomplexität von Linear SVM
- 10. Python einfach linear plotten
- 11. Irregular-Spaced Linear Index
- 12. Linear Gradient CenterX
- 13. Linear verkettete Liste, Knoten voranstellen
- 14. Android Linear Layout Gewicht programmatisch
- 15. Linear Layout-Größe und Gewicht
- 16. MATLAB-Kurvenanpassung, exponentiell gegenüber linear
- 17. Linear Approximationstabelle Berechnung für SBox
- 18. CSS Linear Gradient funktioniert nicht
- 19. Three.js OrbitControls.js Zoom nicht linear
- 20. Linear Scale vs Log Scale
- 21. Linear-Gradienten Artefakte in Firefox
- 22. Linear-Farbverlauf aus Hintergrundbild entfernen
- 23. Linear-Suchalgorithmus in Javascript implementieren
- 24. Umwandlung einer Normalverteilung nach Linear
- 25. Wie schreibe ich linear abhängige Spalte in einer Matrix in Bezug auf linear unabhängige Spalten?
- 26. Linear Linked List - gültige/gebräuchliche Terminologie?
- 27. Irgendein Sparse Linear Algebra-Paket in Haskell?
- 28. Linear Suchen und Short Circuit Bewertung (Laufzeitfehler)
- 29. CSS3 Linear-Gradient funktioniert nicht auf Android.
- 30. Integer Linear Programming-Formulierung für Test Cover?
ich Yavar Antwort hinzufügen möchte: denken Sie daran, dass O (1) ist keine One op. Es könnte eine große Konstante sein, aber das ist egal, wenn sie nicht von einer Variablen wie n abgeleitet ist. Selbst wenn Sie 20 Knoten durchlaufen müssen, um einen Hash zu setzen, ist es immer noch ein O (1). Natürlich funktioniert das nur für Hashtabellen, wenn einige Bedingungen erfüllt sind, aber für gut gestaltete Hashtabellen, die im Durchschnitt 0 (1) sind. – Archeg