Not logged inCSS-Forum
Forum CSS-Online Help Search Login
CSS-Shop Impressum Datenschutz
Up Topic Hauptforen / CSS-Forum / Das Samstag vor Ostern Rätsel 2015
- By Frank Brenner Date 2015-04-04 00:08
Gegeben seien zwei beliebige natürliche Zahlen a und b die ein Startzahlenpaar (a,b) bilden.

Es gibt nun zwei Transformationen T1 und T2

T1 macht aus dem Zahlenpaar (a,b) das Zahlenpaar (2a , b+1)
T2 macht aus dem Zahlenpaar (a,b) das Zahlenpaar (a+1, 2b)

Das Ziel besteht nun darin eine möglichst kurze  Reihe von Transformationen zu finden so dass das Startzahlenpaar unter
Anwendung der Transformationen zu einem Zahlenpaar überführt wird welches aus zwei gleichen natürlichen Zahlen besteht.

Beispiel 1:

(3,7) -> (4,14) -> (8,15) -> (16,16)

zuerst T2 dann zwei mal T1.

Beispiel 2:

(3,8) -> (4,16) -> (8,17) -> (9,34) -> (18,35) -> (36,36)

Frage 1

Wie lautet die kürzeste Möglichkeit für (6,18) ?

Frage 2

Gibt es zu jedem Startzahlenpaar (a,b)  eine Lösung ?
- - By Ulf Flörsheimer Date 2015-04-04 10:09
Regel     a         b
--           6       18
T2         7       36
T2         8       72
T1       16       73
T2       17     146
T2       18     292
T1       36     293
T2       37     586
T1       74     587
T1     148     588
T1     296     589
T1     592     590
T1   1184     591
T1   2368     592
T2   2369   1184
T1   4738   1185
T2   4739   2370
T2   4740   4740

Das war 'ne nette kleine Excel-Makro-Übung. Danke!

Frohe Ostern
Ulf
Parent - - By Frank Brenner Date 2015-04-04 11:24
perfekt. Frage 1 wurde richtig beantwortet.

Wie lange hat dein Excel Makro für die Berechnung benötigt ?

Wie lautet bei Frage 2 die Argumentation ob dies immer möglich ist ?

Frage 2 ist allerings schon ganz schön kniffelig und dauert bestimmt bis nach Ostern, ist aber mit Schulmathematik der Klasse 9 lösbar. Der PC kann dabei leider nicht helfen.
Parent - By Ulf Flörsheimer Date 2015-04-04 13:00
Hallo Frank,

mein Excel-Makro braucht so ca. 25 Sekunden, ist aber auch ziemlich hausbacken. Erstens wird alles auf der Tabelle (und nicht im Speicher berechnet), zweitens ohne irgendwelche Heuristiken erst bis Tiefe 1, dann, falls keine Lösung gefunden wurde, Tiefe 2, dann, falls keine Lösung gefunden wurde, Tiefe 3 usw.

Für den Beweis, dass jedes Startpaar terminieren kann, habe ich bislang keine Idee, aber ich werde mal drüber schlafen ...

Gruß Ulf
Parent - - By Ulf Flörsheimer Date 2015-04-05 20:10
Nochmals Hi, nochmals ich, ich gestehe: Mit dem Beweis komme ich keinen Schritt weiter. Ich wäre sehr an einer Lösung interessiert. Hast du für diese Aufgabe eine Quelle? Falls ja, wäre ich ebenfalls interessiert zu erfahren welche.

An meinem Makro habe ich noch ein wenig gebastelt, die Lösung für (6,18) wird jetzt in weniger als einer Sekunde gefunden. Aber der Algorithmus stößt an seine Grenzen so ab Tiefen von rd. 30. Die Lösung zum Paar (13,43) wird mit einer Tiefe von 26 noch unterhalb einer Minute gefunden, beim Paar (15,47) braucht das Makro aber schon deutlich über 5 Minuten.

Das "beste" Pärchen, das ich bislang (allerdings auf anderem Weg) gefunden habe, lautet übrigens (32,48).

Gibt es für Aufgaben dieses Typs eigentlich allgemeine Baumbeschneidungsalgorithmen bzw. -heuristiken? Falls ja, wäre ich ebenfalls an einem Tipp interessiert. Ein paar Ideen hatte ich selber schon, aber die sind nicht übertrieben effektiv.

So, und nun noch schöne Rest-Ostern!

Ulf
Parent - By Frank Brenner Date 2015-04-05 23:03 Edited 2015-04-05 23:12
Anstatt mit Baumsuche vorwärts so wie bei Schachengines kannst du auch Rückwärts rechnen so wie bei Schhachdatenbanken.

Beim Rückwärts rechnen muss du aber auch trickreich sein, um große Distanzen zu finden, da die zahlen recht schnell groß werden und zb ein 2dim Array sehr schnell den Speicher sprengt.

Hinterher könnte man dann eine Kombination aus vorwärtssuche und Datenbankwissen veranstalten, auch so wie bei Schachprogrammen.

Als nächstes kommt der Beweis.

Den Beweis habe ich allerings nicht selber gefunden.

Er stammt  von von Tyler Seacrest  aus dem Jahre  2001 aus rec.puzzles
Einen original Link habe dorthin habe ich leider nicht.

Die Beweisidee ist, dass das paar (a,b) in mehreren Schritten vereinfacht wird, indem nach jedem Schritt die Differenz der beiden Werte echt kleiner wird und am Schluß 0 beträgt.

Ein einzelner "Schritt" umfasst dafür allerdings   (auch für kleine (a,b))   sehr viele Transformationen. Mitten in einem Schritt kann die Differenz durchaus einmal gigantisch werden. Am ende eines Schrittes jedoch ist sie stets nachweislich kleiner als zu Beginn des Schrittes

Der Beweis ist konstruktiv, aber er konstruiert  bei weitem nicht die kürzeste Zugfolge.

Gegeben sei (x,x+n) wobei n>= 0 und x ist eine nat.zahl
(Im Fall (x+n,x) verläuft das Verfahren anaog man muss nur T1 und T2 vertauschen)

T1: (x,x+n) → (x+1, 2*(x+n))

n mal anwenden erhalten wir

(x+n , 2^n *x + 2^n *n)

Wenn wir für ein bliebiges b mit  1 <= b < n

T2: (x,x+n) → (2*x, x+n+1)  

(n-b) mal anwenden, erhalten wir

(2^(n-b) *x + 2^(n-b) *n , 2^n *x + 2^n *n + n - b)

Nun wenden wir einmal T1 an und erhalten

(2^(n-b) *x + 2^(n-b) *n + 1  , 2^(n+1) *x + 2^(n+1) *n + 2n - 2b)

Schließlich wenden wir (b+1) mal T2 an:

(2^(n+1)*x + 2^(n+1)*n + 2^(b+1)  ,  2^(n+1)*x + 2^(n+1)*n + 2n - b + 1)

Der Betrag der Differenz der beiden Zahlen beträgt nun:

| 2^(b+1) + b - (2n + 1) |

Wenn man sich den Ausdruck genau ansieht stellt man fest, dass es für n > 1 stets ein b gibt mit 1<=b < n so dass der Ausdruck einen Wert von <n ergibt.

Auf diese Weise können wir durch mehrfache Anwendung des o.g Alogrithmus die Differenz verkleinern bis sie schließlich nur noch 0 1 oder 2 beträgt.

Beträgt die Differenz 1 so führt folgender Durchlauf zu einer Diffenz von 2:

(x , x+1)
(x+1, 2x+2)
(x+2, 4x+4)
(2x+4, 4x+5)
(4x+8, 4x+6)

Beträgt die Differenz 2 so führt ein erneuter Durchlauf mit b = 1 zu zwei gleichen Werten.
Up Topic Hauptforen / CSS-Forum / Das Samstag vor Ostern Rätsel 2015

Powered by mwForum 2.29.3 © 1999-2014 Markus Wichitill