Ich benötige eine Datenstruktur zum Speichern einer Anzahl von Elementen, von denen jedes einer anderen Zeit . variiert und obwohl es eine theoretische Obergrenze hat, ist diese um viele Größenordnungen größer als das, was typischerweise verwendet wird.
Durch meine Bewerbung kann ich Folgendes sicherstellen:
Eingefügten Elemente sind immer neuer als alle vorhandenen Elemente, das heißt, wenn ein Element mit einer zugeordneten Zeit t eingelegt ist, dann t > t i ∀ i ∈ 1 , ... , n . Elemente werden einzeln eingefügt.
Es werden nur die ältesten Elemente entfernt, dh wenn das Element entfernt wird, gilt t j < t i ∀ i ∈ { 1 , … , n } ∖ { j } . Das Entfernen erfolgt meistens nacheinander, aber es gibt keinen direkten Schaden, wenn das Entfernen eines Elements verzögert wird, solange der Anteil der falsch gespeicherten Elemente kleiner als 1 bleibt.
Abgesehen vom Einfügen und Entfernen muss ich nur die beiden benachbarten Elemente für eine bestimmte Zeit mit min i t i < ˜ t < max i t i finden . Mit anderen Worten muss ich die beiden Elemente j und k so finden, dass t j < ˜ t < t k und ∄ l ∈ { 1 , … , n } : t j < t l < .
Meine Kriterien für die Datenstruktur sind:
- Das Auffinden von Elementen wie oben beschrieben sollte so schnell wie möglich erfolgen.
- Das Einsetzen und Entfernen sollte schnell gehen.
- Die Datenstruktur ist vergleichsweise einfach zu implementieren.
Solange es sich nicht um einen kleinen Laufzeitversatz handelt, hat jedes Kriterium Vorrang vor dem nächsten.
Meine bisherigen Untersuchungen haben ergeben, dass es sich bei der Antwort wahrscheinlich um eine Art selbstausgleichenden Suchbaum handelt, aber ich habe keine Informationen gefunden, die für das einseitige Einfügen oder Löschen am besten geeignet sind, und es wird mich wahrscheinlich a kosten viel Zeit, um mich selbst herauszufinden. Außerdem habe ich nur unvollständige Informationen darüber gefunden, wie gut sich die Bäume selbst organisieren und wie schnell (z. B. AVL-Bäume organisieren sich strenger als rot-schwarze Bäume), geschweige denn, wie dies durch einseitiges Einfügen oder Löschen beeinflusst wird.
quelle
Antworten:
Sie müssen auch in der Lage sein, an das Ende der Sequenz anzuhängen und von Anfang an zu löschen. Grundsätzlich benötigen Sie also eine Warteschlange.
quelle