Ich arbeite an ein wenig Code, der in der Lage sein soll, die Ausgabe des folgenden Algorithmus effizient zu prognostizieren (vorzugsweise in O (1) Zeit), wenn er mit zwei Ints m und dargestellt wird n. Effizientes Vorhersagen der Ausgabe eines Zahlenverarbeitungsalgorithmus
algorithm(m,n):
history = set()
while True:
if (m,n) in history:
return False
elif n == m:
return True
else:
history.add((m,n))
if m>n:
x = m-n
y = 2*n
m = x
n = y
else:
x = 2*m
y = n-m
m = x
n = y
Beachten Sie, dass, wenn (m, n) erscheint in der Geschichte des folgenden Algorithmus, haben Sie eine unendliche Schleife eingegeben (das heißt 2,1 -> 1,2 -> 2,1 ...); wenn m == n, kann der Algorithmus nur einen Schritt weitergehen und muss enden (d. h. 5,5 -> 10,0 -> 10,0 ...). Im Wesentlichen muss ich vorhersagen können, ob m (Strom) und n (Strom) jemals übereinstimmen werden.
PS, wenn dieser Algorithmus einen Namen hat, würde ich es gerne wissen. Wenn es darüber hinaus eine gute Lektüre zu diesem Thema gibt (Vorhersage von Zahlenfolgen usw.), würde ich mich gerne darauf beziehen.
Riecht wie https://en.wikipedia.org/wiki/Halting_problem – Psi
@Psi: Das ist viel einfacher als das Halteproblem. Wir müssen nur das Verhalten eines Nicht-Turing-vollständigen Algorithmus analysieren. Es ist sogar garantiert zu stoppen. – user2357112
Nicht, wenn Sie eine Endlosschleife eingeben, wie angegeben. Ich sehe immer noch nicht, wie das passieren könnte. – Psi