finden median in eine Feste Größe-verschieben-Fenster über eine lange Abfolge von Daten

Gegeben eine Sequenz von Daten (es kann Duplikate), eine Feste Größe verschieben
Fenster, verschieben Sie das Fenster bei jeder iteration aus dem Anfang der Daten
Sequenz, so dass
(1) die ältesten Daten element wird entfernt aus dem Fenster und eine neue Daten
element drückt man in die Fenster
(2) finden Sie den median der Daten innerhalb des Fensters bei jeder Bewegung.

Die folgenden Beiträge sind nicht hilfreich.

Effektiv zu finden, der Mittelwert einer zufälligen Reihenfolge

Datenverknüpfung auf Basis eines gleitenden Zeitfensters in R

Meine Idee:

Verwenden Sie 2 Haufen zu halten median. In der Seite, die das Fenster, Sortieren Sie die Daten in das Fenster
in der ersten iteration werden die min-heap-hält der größere Teil und die max-heap -
hält der kleinere Teil. Wenn das Fenster hat ungerade Anzahl von Daten, die max-heap -
gibt den median andernfalls das arithmetische Mittel der oberen Elemente der
zwei heaps ist der median.

Wenn eine neue Daten geschoben, um die Fenster, entfernen Sie die ältesten Daten von einem
der heap und vergleichen Sie die neuen Daten mit dem top-max und min-heap, so
dass zu entscheiden, welche heap die Daten gestellt werden. Suchen Sie dann den median nur
wie in der ersten iteration.

Aber, wie zu finden, ein Daten-element in einem heap ist ein problem. Heap ist ein binärer
Baum nicht eine binäre Suchbaum.

Ist es möglich, um es zu lösen mit O(n) oder O(n * lg m) wobei m die Größe des Fensters und
Platz: O(1) ?

Jede Hilfe wird wirklich geschätzt.

Dank

  • Sind stackoverflow.com/questions/5527437/... oder stackoverflow.com/questions/1309263/... nützlich?
  • Die neuesten Daten, die das nächste Element, oder gibt es einige andere Kriterien? Sind Sie der Verarbeitung dieser Elemente in einem first-in-first-out-Art und Weise?
  • in jeder iteration werden die ältesten Daten gelöscht, die Fenster und eine neue Daten in das Fenster und suchen Sie dann den neuen median im Fenster. Für die ältesten Daten , es ist FIFO. Dank
  • Ich glaube nicht, Platz O(1) möglich ist. Sie müssen speichern Sie den Inhalt des Fensters, so dass Sie nicht unter O(m).
  • Wie Sie entfernen die ältesten Daten aus einem der Haufen ?
InformationsquelleAutor user1002288 | 2012-03-23
Schreibe einen Kommentar