Daniel Thoma: Quersumme

Beitrag lesen

Hallo Struppi,

Naja, ist zumindest in JS immer noch halb so langsam wie die Version mit split() und im Firefox nochmal langsamer wie charAt() Funktion, im IE sind beide relativ gleich.

Also mir ging es hier eher um eine allgemein saubere Lösung und darum, die einstellige Quersumme ohne Rekursion zu berechnen. Normalerweise sollte es auch schneller sein, direkt auf Zahlen zu rechnen, als dauernd zwischen Strings und Zahlen hin und her zu konvertieren. Um das zu konvertieren müssen ja schließlich die gleichen Rechenoperationen ausgeführt und zusätzlich noch ein String erzeugt werden.

Ich habe meinen Algorithmus jetzt auch mal kurz in JS implementiert und bin zu dem Ergebnis gekommen, dass meine Variante ungefähr doppelt so schnell ist, wie die Variante mit charAt.

Meine Implementierungen:

  
function impl1(n) {  
  summe = 0; while (n > 0) {  
    summe += n % 10;  
    n = Math.floor(n / 10);  
    if (summe > 10) {  
      summe -= 9  
    }  
  }  
  return summe;  
}  
  
function impl2(n) {  
  summe = 0;  
  n = "" + n;  
  for (var i = 0; i < n.length; i++) {  
    summe += parseInt(n.charAt(i));  
    if (summe > 10) {  
      summe -= 9;  
    }  
  }  
  return summe;  
}  

Getestet habe ich das im FF 1.5 (unter Linux)
Im Prinzip ist es natürlich denkbar, dass bei einer Scriptsprache wie JS es schneller ist, den Interpreter die Zahl in einen String konvertieren zu lassen. Wenn das so ist, liegt das aber daran, dass die Scriptsprache relativ langsam abgearbeitet wird und die Bibliotheksaufrufe dagegen sehr schnell (weil nicht in der Scriptsprache implementiert) sind. Dann kann es natürlich von Vorteil sein, möglichst wenig direkt in der Scriptsprache zu implementieren.
Wenn man die Quersumme aber sowieso nur für ein Beispiel berechnet und nicht mehrere Tausend mal, dann spielt das alles keine Rolle und man kann sich für den schönsten Algorithmus, sprich den, der nicht mit Strings rumbastelt, entscheiden ;-)

Grüße

Daniel

0 58

Quersumme

prinz martin
  • javascript
  1. 0
    Struppi
    1. 0
      Der Martin
      1. 0
        derletztekick
        1. 0
          Prinz Martin
          1. 0
            Prinz Martin
            1. 1
              Struppi
      2. 0
        Struppi
        1. 0
          Struppi
          1. 0
            Vinzenz Mai
          2. 0
            derletztekick
            1. 0
              Struppi
              1. 0
                derletztekick
                1. 0
                  Struppi
                  1. 0
                    derletztekick
                    1. 0
                      Gunnar Bittersmann
                  2. 0
                    Der Martin
                    1. 0
                      Struppi
                      1. 0
                        Der Martin
                        1. 0
                          Struppi
                      2. 0

                        der zaunpfahl

                        seth
                        • software
                        1. 0
                          Struppi
            2. 0
              Struppi
              1. 0
                derletztekick
              2. 0
                Gunnar Bittersmann
                1. 0
                  Struppi
                  1. 0
                    Gunnar Bittersmann
                  2. 0
                    derletztekick
                    1. 0
                      Struppi
                      1. 0
                        derletztekick
                        1. 0
                          Gunnar Bittersmann
                2. 0

                  loesung von Gunnars aufgabe

                  seth
                  • sonstiges
                  1. 0
                    Gunnar Bittersmann
                    1. 0
                      Ashura
                      • menschelei
                      1. 0
                        Gunnar Bittersmann
                        1. 0
                          seth
                3. 0
                  Christian Seiler
                  1. 0
                    seth_not@home
                    • programmiertechnik
                    1. 0
                      Ashura
                      1. 0
                        seth
                        1. 0
                          Ashura
                          1. 0
                            seth
                            1. 0
                              Ashura
                              1. 0
                                seth
                          2. 0
                            Jörg Lorenz
                            1. 0
                              seth
                              1. 0
                                Jörg Lorenz
                                1. 0

                                  rot13

                                  seth
                                  • sonstiges
                                  1. 0
                                    Jörg Lorenz
                          3. -1
                            at
                      2. 0
                        Ashura
                        • menschelei
                        1. 0
                          seth
              3. 0
                Gernot Back
          3. 0
            Daniel Thoma
            1. 0
              Struppi
              1. 0
                Daniel Thoma
                1. 0
                  Struppi
                  1. 0
                    Gunnar Bittersmann