Wie berechnet man am effizientesten die Anzahl der Tage zwischen zwei Daten? Im Grunde frage ich, wie unsere favorisierten Datetime-Bibliotheken implementiert sind.
Ich habe schnell eine Lösung implementiert, die ~ 0 (n) ist, wenn ich 1 Iteration pro 4 Jahre durchlaufe. (Code unten angehängt)
Ich wurde von einem Intro gebeten, Probleme mit Computern zu lösen, um das zu implementieren, aber sie wiederholen einfach jeden Tag anstatt alle vier Jahre ... also bin ich nicht zufrieden mit dieser Lösung und kam mit dem darunter. Ist jedoch eine effizientere Lösung verfügbar? Wenn ja, wie schaffen sie das?
%Vor%Sie können ein Datum in eine Julianische Tageszahl in O (1) umwandeln.
Subtrahiere die zwei julianischen Tageszahlen.
Tyler Durdens Lösung ist sehr elegant, aber könnte eine Erklärung brauchen.
Die Schönheit des Algorithmus ist die Aussage:
%Vor%Gibt die Anzahl der Tage zwischen dem 1. März und dem Anfang des 'm'th Monats nach März zurück. (Wenn Sie es beweisen wollen, denken Sie daran, 'Ganzzahldivision' zu verwenden, die Dezimalteile abschneidet)
Um Standard-Dativkonventionen für Schuhlöffel in diese Funktion zu integrieren, werden die Eingabewerte für Monat und Jahr so verschoben, dass der Kalender im März anstatt im Januar beginnt.
%Vor%Bei der Implementierung wird das Problem der Berechnung von "Tagen pro Monat" behandelt und es werden nur "Tage pro Jahr" berechnet. Wikipedia liefert eine ausreichende Erklärung für diesen Teil.
Alle Division ist eine Ganzzahl-Division, Operator% ist der Modul.
Vorgegebene Ganzzahl y, m, d, berechnen Tag Nummer g als:
%Vor%Tags und Links algorithm