Für die google codeJam Qualifizierungsrunde war eines der Probleme herauszufinden, wie viele "recycelte Paare" es zwischen zwei gegebenen Ganzzahlen gibt.Schneller Algorithmus als verschachtelte Schleifen?
Dies war meine Lösung, aber es war nicht schnell genug für den großen Dateneingangssatz. Bei etwas wie @a = 10, @b = 200000 wird es langsam.
Ich denke, meine Lösung wäre O (2^n) (ich habe noch keinen festen Griff auf große O-Analyse) was schrecklich ist. Ich habe mich gefragt, ob es eine Standardmethode gibt, zwei Schleifen mit einem schnelleren Algorithmus zu durchlaufen.
def getPairs
(@[email protected]).each do |n|
([email protected]).each do |m|
if (containsSame(n,m)) && (isMatch(@a, n, m, @b))
@recycledPairs += 1
end
end
end
end
edit: Von Google CodeJam site:
Lasst uns ein paar verschiedene positive ganze Zahlen sagen (n, m) zurückgeführt wird, wenn Sie m, indem einige Ziffern von der Rückseite des n die erhalten Front, ohne ihre Reihenfolge zu ändern. Zum Beispiel ist (12345, 34512) ein recyceltes Paar, da Sie 34512 erhalten können, indem Sie 345 vom Ende von 12345 nach vorne verschieben. Beachten Sie, dass n und m die gleiche Anzahl von Ziffern haben müssen, um ein recyceltes Paar zu sein. Weder n noch m können führende Nullen haben.
Was sind "recycelte Paare"? – Ryan
Schleifen und verschachtelte Schleifen sind Implementierungsartefakte, kein Algorithmus. – JRL
Von google codeJam site: Nehmen wir an, ein Paar verschiedener positiver Ganzzahlen (n, m) wird wiederverwendet, wenn Sie m erhalten, indem Sie einige Ziffern von der Rückseite von n nach vorne verschieben, ohne ihre Reihenfolge zu ändern. Zum Beispiel ist (12345, 34512) ein recyceltes Paar, da Sie 34512 erhalten können, indem Sie 345 vom Ende von 12345 nach vorne verschieben. Beachten Sie, dass n und m die gleiche Anzahl von Ziffern haben müssen, um ein recyceltes Paar zu sein. Weder n noch m können führende Nullen haben. – AFraser