2017-05-19 6 views
0

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

Wenn Sie "Binärdatei" sagen, wie ist die Struktur der Daten in der Datei? Ist es eine Python-Liste, die irgendwann gebeizt wurde? – inspectorG4dget

+0

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. –

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