Hier mein Versuch. Unter den Annahme, dass die Längen der einzelnen Tage
ungefähr gleich lang sind.
Man startet mit einer gut geschätzten Tageslänge (z. B. 100). Zunächst
liest man das erste Datum. Dann das Datum an der Position 0 +
Tageslänge.
Eine binäre Suche würde ich nun nicht machen, weil man ja schon relativ
nahe am Ziel ist. Ist man noch beim aktuellen Datum, dann sucht man in
größer werdenden Schritten (+4, +8, +16, +32, ...), bis sich das Datum
ändert. Ist man dagegen schon beim nächsten Datum, sucht man mit der
gleichen Methode in die andere Richtung (-4, -8, -16, -32, ...).
Irgendwann hat man einen Bereich, in dem sich die Datumsgrenze befinden
muss. Also die höchste Speicherstelle, die man mit dem alten Datum
gelesen hat und und die kleinste Speicherstelle mit dem nächsten
Datum.
In diesem Bereich macht man jetzt einfach eine binäre Suche (also immer
in der Mitte nachschauen, wie schonmal erklärt).
(Ein bisschen Gehirnschmalz muss man noch für die Fälle gebrauchen,
falls die beiden oben gefundenen Daten nicht aufeinanderfolgen. In
diesem Fall sucht man einfach binär nach einer Datumsgrenze und
wiederholt die Suche in den verbleibenden Bereichen, in denen sich
noch andere Datensprünge befinden könnten. - Oder man spart sich den
Programmieraufwand und parst diesen kleinen Teil einfach linear
durch.)
Gut, dachdem man nun die genaue Grenze gefunden hat, bereichnet man die
Länge des soeben ermittelten Tages und nimmt an, dass am nächsten Tag
ungefähr genausoviele Daten abgelegt wurden. Man springt um diese Größe
nach vorn und beginnt wieder mit der Suche in größer werdenden
Schritten.