Ich habe eine Frage gelesen und suche nach Informationen zur Lösung:
Zahlen werden zufällig generiert und in einem (expandierenden) Array gespeichert. Wie würden Sie den Median verfolgen?
Es gibt zwei Datenstrukturen, die das Problem lösen können. Einer ist der ausgeglichene Binärbaum, der andere sind zwei Haufen, die die größte Hälfte und die kleinste Hälfte der Elemente verfolgen. Ich denke, diese beiden Lösungen haben die gleiche Laufzeit wie O(n lg n)
, bin mir aber meines Urteils nicht sicher.
Was ist der beste Weg, um den Median zu verfolgen?
Mein Versuch:
In dieser Frage , Ich denke, ein Haufen ist der beste Weg, um den Median zu verfolgen. Es gibt zwei Haufen, den großen und den kleinen Haufen, die nicht sequentiell sein müssen. Zunächst berechnen wir den Mittelwert der Elemente im Array. Wenn das Element kleiner als der Mittelwert ist, setzen wir die Zahl auf den kleinen Haufen. Im Gegenteil, wir setzen die Nummer auf den großen Haufen. Wenn die Anzahl des großen Haufens gleich der Anzahl des kleinen Haufens ist, ist der größte im kleinen und der kleinste im großen Haufen der Median. Wenn die beiden Heaps unterschiedliche Größen haben, wird das Stammelement einfach aus dem Heap mit der größeren Größe entfernt und an die Wurzel des kleineren Heaps verschoben. Bei großen Heaps ist das Root-Element das kleinste und bei kleinen Heaps das Root-Element das größte. Auf diese Weise, wenn die beiden Haufen die gleiche Größe oder einen digitalen Unterschied haben,
Ich denke, diese Lösung hat die Laufzeit als O (m * n), m bedeutet die Zeiten, zu denen wir die Unwuchthaufen anpassen.
Ist dies der beste Weg, um den Median zu verfolgen?
std::nth_element
jemand?