Solltet ihr mal eine Herausforderung suchen...

sicher, dauert ein bisschen länger

Also, ich hab das ganze mal analysiert! ;-)
Ein "bisschen länger" sieht so aus:
Reimas lösung macht exakt: 4000 durchläufe
Reimas lösung von mir optimiert: 1000 durchläufe
deine lösung: 9999 Durchläufe. Wobei du dir die ersten 999 schenken könntest.

Kannst dir ja vorstellen wie das sein würde wenn du alle 30 oder 40 stelligen Zahlen mit dieser Eigenschaft berechnen willst! :)

So Long
TheVirus

P.S.: Muss allerdings sagen dass deine Lösung einfacher umzustellen ist wenn man z.b. 30 stellige Zahlen sucht. Mit der anderen lösung bräuchte man 30 for schleifen!
 
Zuletzt bearbeitet:
brute force for ever!
wenn 10 minuten nicht ausreichen, dann lasse ich meinen comp halt über nacht laufen :):):):):)
 
Naja im grundgenommen ist's richtig. Nur würde ich die Matrix in einem zwei dimensionalen Array speichern... Dann brauchst du 2 for schleifen und fertig ist die Sache.

PHP:
function multipliziere ($matrix,$b_vektor)
{
  global m,n;
  for ($i=1;$i<=m;i++)
  {
    $wert=0;
    for ($j=1;$j<=n;i++)
    {
      $wert = $wert + $matrix[i][j] * b_vektor[j];
    }
    $c_vektor[i] = wert;
  }
  return $c_vektor;
}

Allgemein und kurz und knapp! :)

So Long
TheVirus

EDIT: 100% untested. Vielleicht müsste man vorher den $c_vektor initialisieren von 1 bis m.
 
Kann auch while, repeat und loop benutzen (wobei ich jetzt nicht weiss ob es repeat und loop auch unter PHP gibt), nur wird der code wesentlich grösser und unübersichtlicher.

For is klein, knapp und schön! ;-)

So Long
TheVirus
 
Ready for more?

So, Leute,

Jetzt gibt´s wieder mal was zu Grübeln, diesmal von mir ;-)
Es geht um den 'Turm von Hanoi'. Kennt das wer? Nicht? Ok, hier eine Erklärung:
n Scheiben mit einem Loch in der Mitte, jede ein wenig kleiner als die vorherige, sind auf einen Stab der Größe nach angeordnet, wobei immer eine kleinere auf einer größeren Scheibe liegt. Daneben gibt es noch zwei leere Stäbe. Ziel ist es nun, diese n Scheiben auf einen der zwei anderen Stäbe umzuschichten. Dabei müssen folgende zwei Grundregeln beachtet werden:
  • es darf immer nur die oberste Scheibe eines Stabes von diesem genommen und auf einen anderen gesteckt werden
  • unter einer Scheibe darf wenn dann nur eine größere Scheibe liegen
Die Aufgabenstellung lautet nun folgendermaßen: Schreibe eine Funktion, die einen vollständigen Ablauf von Spielzügen ausgibt, der zum Erfolg führt. Die Anzahl der Scheiben n wird dabei der Funktion als Parameter übergeben.

Als kleine Veranschaulichung noch ein bisschen ASCII-Art ;-) (ich weiß ja, dass erklären nicht meine Stärke ist ;))
Code:
Ausgangslage:
     ||                ||                ||
    _||_               ||                ||
   |____|              ||                ||
  |______|             ||                ||
 |________|            ||                ||
|__________|           ||                ||

---------------------------------------------
Zug 1: 1 -> 2
     ||                ||                ||
     ||                ||                ||
   __||__              ||                ||
  |______|             ||                ||
 |________|           _||_               ||
|__________|         |____|              ||

---------------------------------------------
Zug 2: 1 -> 3
     ||                ||                ||
     ||                ||                ||
     ||                ||                ||
  ___||___             ||                ||
 |________|           _||_             __||__
|__________|         |____|           |______|

---------------------------------------------
Zug 3: 2 -> 3
     ||                ||                ||
     ||                ||                ||
     ||                ||                ||
  ___||___             ||               _||_
 |________|            ||              |____|
|__________|           ||             |______|

---------------------------------------------
usw. ...

Viel Spaß beim Grübeln :)

reima
 
Zurück