Welche Art von Datenstruktur/Algorithmus sollte ich verwenden, um in einer Liste der Endpunkte jedes Abschnitts nachzuschlagen, in welchem Abschnitt Sie sich gerade befinden?Datenstruktur/Algorithmus für Abschnittsübersichten
Zum Beispiel, wenn ich eine Webseite mit Abschnittsüberschriften und Inhalt haben,
- Einführung (endet bei 100px)
- Abschnitt 1 (endet bei 350px)
- Abschnitt 2 (endet bei 700px)
- Schlussfolgerung (endet bei 1200px)
- Kommentare
und ich bin momentan bei 130px, sollte es zurückgeben, dass ich gerade in "Section 1" bin.
Option 1
Binary Durchsuchung Array von Endpunkten
from bisect import bisect_left
arr = [100, 350, 700, 1200]
pos = bisect_left(arr, 130, 0, arr[-1])
Dies könnte jedoch noch nehmen O (log n) für jede Änderung in der Position.
Option 2
Hash Lookup-Tabelle der aktuellen Position,
lookup = {0: "Introduction"
1: "Introduction"
...
10: "Section 1"
11: "Section 1"
...
}
section = lookup[130/10]
Dies ist schnell, aber es verschwendet viel Platz
Gibt es eine Struktur allgemeine Daten/Algorithmus das geht mit dieser Art von Problem?
'Abschnitt' Nummer kann nicht sehr groß sein, ich denke, ein einfaches Array ist in Ordnung – throwit
Wie viele Abschnitte haben Sie? Ist es möglich, dass Abschnitte zur Laufzeit erstellt/aktualisiert/gelöscht werden? –
Ich habe nur Abschnitte auf einer Webseite als Beispiel verwendet, aber es ist tatsächlich für größere Arrays verwendet, so dass ein allgemeiner Algorithmus wäre nett. @ Толя Ich habe nicht daran gedacht, es in Echtzeit zu ändern, aber es wäre toll, auch dafür eine gute Komplexität zu haben. –