Mögliches Duplikat:
Rollender Median-Algorithmus in C.
Vorausgesetzt, Ganzzahlen werden aus einem Datenstrom gelesen. Finden Sie den Median der bisher gelesenen Elemente auf effiziente Weise.
Lösung Ich habe gelesen: Wir können einen maximalen Heap auf der linken Seite verwenden, um Elemente darzustellen, die kleiner als der effektive Median sind, und einen minimalen Heap auf der rechten Seite, um Elemente darzustellen, die größer als der effektive Median sind.
Nach der Verarbeitung eines eingehenden Elements unterscheidet sich die Anzahl der Elemente in Heaps höchstens um 1 Element. Wenn beide Heaps die gleiche Anzahl von Elementen enthalten, finden wir den Durchschnitt der Stammdaten des Heaps als effektiven Median. Wenn die Heaps nicht ausgeglichen sind, wählen wir den effektiven Median aus der Wurzel des Heaps aus, der mehr Elemente enthält.
Aber wie würden wir einen maximalen und einen minimalen Haufen konstruieren, dh wie würden wir hier den effektiven Median kennen? Ich denke, wir würden 1 Element in max-heap und dann das nächste 1 Element in min-heap einfügen und so weiter für alle Elemente. Korrigieren Sie mich, wenn ich hier falsch liege.