Ich habe eine große Binärdatei (~ 4 GB), die eine Reihe von Bild- und Zeitstempeldaten enthält. Ich möchte das Bild finden, das am ehesten einem vom Benutzer angegebenen Zeitstempel entspricht. Es gibt jedoch Millionen von Zeitstempeln in der Datei. In Python 2.7, mit seek, read, struct.unpack, dauerte es über 900 Sekunden, um alle Zeitstempel in ein Array zu lesen. Gibt es einen effizienten Algorithmus, um den nächsten Wert zu finden, bei dem nicht alle Werte gelesen werden müssen? Sie nehmen monoton zu, wenn auch in sehr unregelmäßigen Abständen.Den nächsten Wert in einer Binärdatei finden
0
A
Antwort
0
Erster Versuch. Es funktioniert anscheinend jedes Mal, aber ich weiß nicht, ob es der effizienteste Weg ist:
Nehmen Sie die ersten und letzten Malstempel und die Anzahl der Frames, um einen durchschnittlichen Zeitschritt zu berechnen.Verwenden Sie den durchschnittlichen Zeitschritt und die Differenz zwischen Ziel- und Anfangszeitstempel, um den ungefähren Index zu ermitteln.
Auf ungefähre und 2 umgebende Zeitstempel gegen Ziel prüfen.
Wenn das Ziel zwischen liegt, dann Index mit minimaler Differenz nehmen. Wenn nicht, den ungefähren Index als neuen Anfang oder Ende entsprechend einstellen und wiederholen.
Verwandte Themen
- 1. den nächsten Punkt finden
- 2. Den nächsten Index zu einem Wert finden in R
- 3. javascript/jquery - Den nächsten Wert in einem Array finden
- 4. Den nächsten numerischen Wert in der Datenbank finden
- 5. Matlab: Abstand zum nächsten TRUE-Wert in einer Matrix finden
- 6. Den nächsten oder genauen Schlüssel in einer std :: map finden
- 7. Wie finden Sie den nächsten nicht gleichwertigen Wert eines Gleitkommawerts?
- 8. css den nächsten Artikel finden
- 9. Wie bearbeitet man den Hex-Wert einer Binärdatei mit C#
- 10. den nächsten Wert eines Listenelement
- 11. Formel, um den nächsten Wert in einer Spalte zu finden, die einen bestimmten Wert in einer anderen Spalte enthält
- 12. SQLite - den nächsten Wert erhalten
- 13. Finden Sie den nächsten Index durch den Unterschied mit BinarySearch
- 14. Python dict, finden Wert am nächsten x
- 15. So finden Sie den nächsten nächsten/vorherigen doppelten Wert (numeric_limits :: epsilon für eine gegebene Zahl)
- 16. Den nächstliegenden Wert finden - MySQL
- 17. Finden Sie den nächsten Breiten- und Längengrad
- 18. Den aktuellen Wert einer Python-Liste finden
- 19. So finden Sie den nächsten Marker leaflet.js
- 20. Jquery finden Sie den nächsten Index
- 21. Wie finden Sie den nächsten August? C#
- 22. Excel Funktion, um den nächsten Wert zu einer eindeutigen Zeichenkette zu finden
- 23. Finden von SQLite-Version mit einer Binärdatei in Linux verbunden
- 24. Berechnen Sie den nächsten Wert auf einer Kreisvariablen
- 25. Ich möchte den "N/A" -Wert finden und ihn mit dem nächsten Wert aktualisieren
- 26. Den größten Wert in Wörterbüchern in einer Liste finden
- 27. Nicht den nächsten größten Wert in meinem Array
- 28. Finden Sie den zweiten am nächsten Index zu schätzen
- 29. Finden Sie den nächsten Schlüssel in einem Dikton mit String?
- 30. Finden Sie den nächsten verfügbaren Chunk in einem Speicherpool
Wenn Sie "Binärdatei" sagen, wie ist die Struktur der Daten in der Datei? Ist es eine Python-Liste, die irgendwann gebeizt wurde? – inspectorG4dget
Nein, es ist ein Strom von 16-Bit-Ganzzahlen für die Bilddaten, wobei die Zeitstempel am Ende jedes Rahmens eingefügt werden. Der Zeitstempel ist 4 Bytes für die Sekunden seit Beginn des Jahres, dann 2 Bytes für das Jahr, dann 3 Bytes für 10 MHz Takt. –