Was ist die Big-O stack, queue, set und deque?
Was ist die Big-O Effizienz eines stack, queue, set und deque in Bezug auf insertion, - Suche, - Indizierung, - Raum und-Löschung Komplexität?
"Was bin ich hier?" - eine gute Suchmaschine?!
Danke für den Sarkasmus @MikeDinescu, ich habe seit der Suche in Google für fast eine Stunde und habe nicht viel gefunden Antwort. Meine Forschung war nicht beschränkt auf eine Quelle, bitte glaube nicht, ich habe nicht versucht, die Antwort zu finden auf meine eigenen.
Was genau haben Sie gefunden und was ist deine konkrete Frage?
Alles, was ich gefunden habe auf das Thema im Zusammenhang mit verschiedenen Implementierungen, aber nichts von dem, was ich gefunden habe, hat sich ausführlich mit Big-O. in der Tat, meine informative Quelle wurde Wikipedia gibt eine gute Grundierung, die auf diesen Datentypen, aber auch keine Erklärung, die zu Ihrer Effizienz.
Dort gehen wir. Ich habe also meine Frage, nur ein "auf-den-Punkt" - Satz. Ich habe ausgeschlossen, was, die ich habe versucht und gesucht, weil anscheinend das ist, was bekommt Ihr flamed, indem diejenigen, die mehr gebogen auf Arroganz als auf jemandem zu helfen, zu verstehen, ein Konzept, das Sie finden, schwierig zu verstehen.
Danke für den Sarkasmus @MikeDinescu, ich habe seit der Suche in Google für fast eine Stunde und habe nicht viel gefunden Antwort. Meine Forschung war nicht beschränkt auf eine Quelle, bitte glaube nicht, ich habe nicht versucht, die Antwort zu finden auf meine eigenen.
Was genau haben Sie gefunden und was ist deine konkrete Frage?
Alles, was ich gefunden habe auf das Thema im Zusammenhang mit verschiedenen Implementierungen, aber nichts von dem, was ich gefunden habe, hat sich ausführlich mit Big-O. in der Tat, meine informative Quelle wurde Wikipedia gibt eine gute Grundierung, die auf diesen Datentypen, aber auch keine Erklärung, die zu Ihrer Effizienz.
Dort gehen wir. Ich habe also meine Frage, nur ein "auf-den-Punkt" - Satz. Ich habe ausgeschlossen, was, die ich habe versucht und gesucht, weil anscheinend das ist, was bekommt Ihr flamed, indem diejenigen, die mehr gebogen auf Arroganz als auf jemandem zu helfen, zu verstehen, ein Konzept, das Sie finden, schwierig zu verstehen.
InformationsquelleAutor cereallarceny | 2014-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das hängt wirklich von der Umsetzung der einzelnen Daten-Struktur. Ich gehe über ein paar, so dass Sie können erhalten eine Idee davon, wie diese zu ermitteln.
Angenommen, der Stack-Klasse implementiert ist, mit einem
Node
(es kann umgesetzt werden mit einemLinkedList
,ArrayList
,arrray
usw. als gut).Stack hat 3 primären Methoden:
peek
,push
, undpop
.Gab es nicht viel Verarbeitung beteiligt. Es kam gerade ein primitiver Wert. Dies ist O(1) für Zeit und Raum.
Immer noch keine wirkliche Verarbeitung. Dies ist O(1) für Zeit und Raum. Lassen Sie uns überspringen
pop()
und versuchen, etwas mehr interessant. Lassen Sie uns versuchen, eine Methode genanntcontains(int v)
. Es durchsucht den Stapel, um zu sehen, ob es enthält eineNode
enthält einen Wert, der gleich zuv
.Grundsätzlich fahren wir durch den Knoten Verweise, bis wir den Wert gefunden haben, oder wir das Ende erreichen. In einigen Fällen werden Sie feststellen, Wert früh und in einigen Fällen später die Straße hinunter. Jedoch, wir kümmern uns um den schlimmsten Fall! Der Schlimmste Fall wäre, müssen wir schauen jedes einzelne
Node
. Sagen, es gibt n Knoten, dann haben wir O(n).Können Sie diese Analyse-Fähigkeiten, um die anderen Daten Strukturen, so dass Sie lösen können Sie den rest selbst. Es ist nicht allzu schlimm. Viel Glück. 🙂
InformationsquelleAutor But I'm Not A Wrapper Class
Ich habe mit diesem: http://bigocheatsheet.com/ , aber es gibt praktisch keine Informationen darüber, WARUM diese großen O-Werte verwendet werden. Sie haben zu Graben in und die Forschung für sich selbst.
InformationsquelleAutor Saltymule
Das Problem hier ist, dass diese Datenstrukturen sind in der Regel umgesetzt in Bezug auf andere. Zum Beispiel, ein
set
umgesetzt werden könnten, als eine hash-Tabelle oder mit einem rot-schwarz-Baum-Algorithmus.Einen Stapel nicht zufälligen Zugriff, aber oft implementiert als block Arbeitsspeicher (z.B. ein array mit einem einzelnen element zeigt auf der stack-Spitze, die aktualisiert wird, für
push
undpop
Operationen.Einen
queue
könnte implementiert werden als ein array oder einer verknüpften Liste mit sehr unterschiedlichen einfügen, entfernen und Indexierung Eigenschaften. Eindeque
ist eher umgesetzt werden als eine verknüpfte Liste, aber die Microsoft-Implementierung in der C++ - standard-Bibliothek verwendet einen hybrid-Ansatz (siehe Was die heque ist Los mit den Speicher-overhead von std::deque?).InformationsquelleAutor Steve
Ich bin überrascht, Sie konnte Sie nicht finden diese Informationen online.
Gibt es eine Unterscheidung gemacht werden zwischen den Datenstrukturen, die Sie aufgelistet in der Frage.
Beginnen werde ich mit der queue-und stack-Datenstrukturen. Sowohl der stack und die queue bieten spezialisierte Zugang zu den Daten, es gibt keinen wahlfreien Zugriff, nur sequentiell. Deshalb können Sie nicht sprechen über random-access-performance. In diesem Fall wird jeder anständige Implementierung eines Stacks oder einer queue bieten O(1) Zugriff für insert-und remove-Operationen (in Ihrer jeweiligen form).
Einem set ist eine sehr verschiedene Struktur und seine Leistung hängt stark von der zugrunde liegenden Implementierung. Zum Beispiel können Sie implementieren eine Reihe mit einer zugrunde liegenden hash-Tabelle für in der Nähe von Konstante Zeit einfügen, entfernen und finden Sie Operationen, oder Sie implementieren können, mit einem balancierten Suchbaum O(log n).
InformationsquelleAutor Mike Dinescu
Big-O-notation ist in der Regel reserviert für algorithmen und Funktionen, Daten-Typen.
Darüber hinaus die Zeit, die Komplexität hängt sehr stark von der Umsetzung. Fragen, für die Big-O-Zeit-Komplexität von einem "stack" - Datentyp ist wie zu Fragen, für die Big-O-Zeit, die Komplexität der "Sortierung". Es hängt alles von der Umsetzung. (Genauer gesagt, eine bestimmte Fall-spezifische Optimierungen und Anforderungen können sich ändern, die Zeit-Komplexität erheblich zu.)
Wenn Sie schauen, um die C++ - STL als Referenz-Implementierung, Sie können finden die details auf die Komplexität der einzelnen aufgeführten Datentypen von hier aus. Suche einfach nach Datentyp und operation.
InformationsquelleAutor Mr. Llama