Angenommen, ich habe zwei Listen positiver Ganzzahlen mit begrenzter Männlichkeit und nehme das Produkt aller Elemente jeder Liste. Wie lässt sich am besten feststellen, welches Produkt größer ist?
Natürlich kann ich einfach jedes Produkt berechnen, aber ich hoffe, dass es einen effizienteren Ansatz gibt, da die Anzahl der Ziffern in den Produkten linear mit der Anzahl der Terme zunimmt, so dass die gesamte Berechnung quadratisch ist.
Wenn ich addieren statt multiplizieren würde, könnte ich eine "Zippering-Strategie" verwenden, bei der Einträge aus der ersten Liste schrittweise hinzugefügt und von der zweiten subtrahiert werden, um die Notwendigkeit zu umgehen, die (großen) Gesamtsummen zu berechnen. Die analogen Techniken für Produkte würden darin bestehen, die Logarithmen der Einträge zu summieren, aber das Problem besteht nun darin, dass für die Berechnung der Protokolle eine ungenaue Arithmetik erforderlich ist. Es sei denn, es gibt eine Möglichkeit zu beweisen, dass der numerische Fehler irrelevant ist?
quelle
Antworten:
(Ich verstehe die Beschreibung des Problems so, dass die Eingabenummern durch eine Konstante begrenzt sind, sodass ich die Abhängigkeit von der Grenze nicht verfolgen kann.)
Das Problem ist in linearer Zeit und logarithmischem Raum unter Verwendung von Summen von Logarithmen lösbar. Im Detail ist der Algorithmus wie folgt:
Dies dauert einige Zeit , und die Zähler verwenden den Raum O ( log n ) , da jeder Zähler im Wert durch n begrenzt ist.O(n) O(logn) n
quelle