Dies ist keine vollständige Antwort, aber einige Vorschläge:
Hinweis: Ich bin „s“ für den Skalierungsfaktor, und „x“ für die Doppelzimmer mit.
Fragen Sie sich zuerst, ob Brute-Force nicht funktioniert. Z.B. versuch s = 1, dann s = 2, dann s = 3 und so weiter.
Wir haben eine Liste von Zahlen x [i] und eine Toleranz t = 1/10. Wir wollen die kleinste positive ganze Zahl s finden, so dass es für jedes x [i] eine ganze Zahl q [i] gibt, so dass | s * x [i] - q [i] | < t.
Erstens, wenn wir für jedes x [i] eine geordnete Liste erstellen können, ist es einfach genug, diese zusammenzufassen, um die kleinsten s zu finden, die für alle funktionieren. Zweitens beachte, dass die Antwort nur vom Bruchteil von x [i] abhängt.
Um den obigen Test umzuordnen, haben wir | x - q/s | < t/s. Das heißt, wir wollen eine "gute" rationale Näherung für x finden, in dem Sinne, dass die Approximation besser sein sollte als t/s. Mathematiker haben eine Variante davon untersucht, bei der das Kriterium für "gut" ist, dass es besser sein muss als jedes andere mit einem kleineren "s" -Wert, und der beste Weg, diese zu finden, ist durch Verkürzungen der continued fraction expansion.
Leider ist dies nicht ganz das, was Sie brauchen, denn sobald Sie unter Ihrer Toleranz stehen, müssen Sie nicht immer besser werden - die gleiche Toleranz wird funktionieren. Die nächste offensichtliche Sache ist es, dies zu verwenden, um zu der ersten Nummer zu springen, die funktionieren würde, und von dort brutale Gewalt anzuwenden. Leider kann für jede Nummer die größte der ersten 5 sein, so dass Sie nicht alle so viel kaufen. Allerdings wird diese Methode Ihnen ein s finden, das funktioniert, nur nicht das kleinste. Können wir dieses s verwenden, um ein kleineres zu finden, wenn es existiert? Ich weiß es nicht, aber es wird eine Obergrenze für Brute Forcing setzen.
Wenn die Toleranz für jedes x < t ist, dann bedeutet dies, dass die Toleranz für das Produkt aller x < t^n sein muss. Dadurch könntest du viel weiterspringen und eine vernünftige Untergrenze für Brute-Forcing festlegen.
Der Skalierungsfaktor ist keine ganze Zahl oder eine Zehnerpotenz notwendig, oder? – Vlad
Was würden Sie erwarten, dass der Wert von x für das obige Beispiel ist? –
Übrigens ist der kleinste positive Skalierungsfaktor gleich Null. Sollten wir auch negative berücksichtigen? – Vlad