Angenommen, wir lesen eine Folge von Zahlen nacheinander. So finden Sie das k -kleinste Element nur mit dem O ( k ) -Zellenspeicher und in linearer Zeit ( O ( n ) ). Ich denke, wir sollten die ersten k Terme der Sequenz speichern und, wenn wir den k + 1 -ten Term erhalten, einen Term löschen, von dem wir sicher sind, dass er nicht das k -kleinste Element sein kann, und dann den k + 1 -ten Term speichern . Wir sollten also einen Indikator haben, der diesen unbrauchbaren Begriff in jedem Schritt anzeigt, und dieser Indikator sollte in jedem Schritt schnell aktualisiert werden. Ich begann mit "max";; Es kann jedoch nicht schnell aktualisiert werden. Bedeutet, wenn wir max berücksichtigen, dann verpassen wir beim ersten Löschen das Maximum und sollten in und seiner Ursache ( n - k ) × O ( k ) Zeit nach max suchen , damit es nicht linear ist. Vielleicht sollten wir die ersten k Terme der Sequenz intelligenter speichern .
Wie löse ich dieses Problem?