Seite 7 von 25 ErsteErste ... 3456789101117 ... LetzteLetzte
Ergebnis 91 bis 105 von 369

Thema: Ein Narr lernt Java

  1. #91
    Minion Avatar von Tzu Iop
    Registriert seit
    28.10.05
    Ort
    Im EG ohne Aufzug *schulterzuck*
    Beiträge
    6.377
    Zitat Zitat von Peregrin_Tooc Beitrag anzeigen
    Project Euler ist einfach toll. [...]
    PHP-Code:
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.util.HashMap;

    //How many triangle words does the list of common English words contain?
    public class Prb042_sltn {

        
    /**
         * @param args
         */
        
    public static void main(String[] args) {
            
    HashMap<IntegerIntegertrianglenumbers = new HashMap<IntegerInteger>();
            
    String str ""line="";
            try {
                
    BufferedReader input = new BufferedReader(new FileReader("bin/words.txt"));
                
    line input.readLine();    
            } 
            catch (
    Exception e) {
                
    // TODO Auto-generated catch block
                
    e.printStackTrace();
            }
            
    String[] words line.split("\",\"");
            
    words[0]=words[0].substring(1);
            
    int count 0n=;
            for(
    int k=1<= nk++){ // Die Schleife tut nichts, da n = 0 und k = 1 und damit direkt k > n.
                
    trianglenumbers.put(kk*(k+1)/2);
            }    
            for(
    int k=0words.lengthk++){    
                
    int value StringCharMethods.wordvalue(words[k]);
                while(
    n*(n+1)/<= value){
                    
    trianglenumbers.put(nn*(n+1)/2);
                    
    n++;
                }
                if(
    trianglenumbers.containsValue(value)){
                    
    count++;
                    
    //System.out.println(words[k]+" is the "+count+". triangle word and it's value is "+value);
                
    }
            }
            
    System.out.print(count);
        }

    Siehe Kommentar. Ansonsten selbst mehr kommentieren, wenn du Code an andere weiter gibts, sonst ist das etwas schwer verständlich.
    Papoy!

  2. #92
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    Stimmt, die Schleife tut nichts, die steht da nur noch, weil ich für n mal einen anderen Wert genommen hatte. Ist aus dem Code rausgeflogen, aber nicht aus der Zwischenablage

    @Flati: Danke, ich hatte es nachgelesen Die Oracle-API ist ganz gut, auch wenn ich gerade bei den Reader-Unterklassen echt noch nicht durchsteige, da hilft wohl nur Anwendung
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  3. #93
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    Merke: longs explizit als long deklarieren
    PHP-Code:
    final long START=2*3*5*7*11*13*17*23*29
    ergibt keinen long-Wert
    Da kann man sich ja tot debuggen
    was so ein "L" für einen Unterschied machen kann...
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  4. #94
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    PHP-Code:
    public static boolean prime(long n){ /**tests if a given long is prime */
            
    if(== 1|n<0){
                return 
    false
            }
            
            for(
    long i=2Li*i<=ni++){
                if(
    n%i==0){
                    return 
    false;
                }
            }
            return 
    true;
        }
        
        public static 
    ArrayList<LongoddPrimeList(long n){ /**returns a list of all primes below n */
            
    ArrayList<Long= new ArrayList<Long>();
            if(
    <2){
                return 
    L;
            }
            
    L.add(2L);
            for(
    long i=3Li<=ni++){
                    
    boolean prime true;
                    for(
    Long pL){
                        if(
    i%p==0){
                            
    prime=false;
                            break;
                        }
                    }
                    if(
    prime){
                        
    L.add(i);
                    }
                }
            return 
    L;
        }
        public static 
    ArrayList<LongprimeList(long n){ /**returns a list of all primes below n */
            
    ArrayList<Long= new ArrayList<Long>();
            for(
    long i=2Li<=ni++){
                if(
    prime(i)){
                    
    L.add(i);
                }
            
            }
        return 
    L;
        } 
    Ich bin etwas verwirrt.
    Die erste Methode testet naiv, ob eine Zahl prim ist.
    Die dritte Methode gibt ne Primzahlliste aus, wo für jede Zahl naiv geprüft wird, ob sie prim ist.
    Die zweite Methode sollte, so dachte ich, viel schneller sein, da nur für jede kleinere Primzahl geprüft wird, ob sie die zu untersuchende Zahl teilt. Ist aber vieeeeel langsamer. Liegt das daran, dass der Zugriff auf die Liste so langsam ist? Kann man das schneller machen?
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  5. #95
    Minion Avatar von Tzu Iop
    Registriert seit
    28.10.05
    Ort
    Im EG ohne Aufzug *schulterzuck*
    Beiträge
    6.377
    Zitat Zitat von Peregrin_Tooc Beitrag anzeigen
    [...]
    Ich bin etwas verwirrt.
    Die erste Methode testet naiv, ob eine Zahl prim ist.
    Die dritte Methode gibt ne Primzahlliste aus, wo für jede Zahl naiv geprüft wird, ob sie prim ist.
    Die zweite Methode sollte, so dachte ich, viel schneller sein, da nur für jede kleinere Primzahl geprüft wird, ob sie die zu untersuchende Zahl teilt. Ist aber vieeeeel langsamer. Liegt das daran, dass der Zugriff auf die Liste so langsam ist? Kann man das schneller machen?
    ArrayList benutzt unten drunter einen Array, d.h. da muss eventuell häufiger kopiert werden, wenn das Array zu klein ist. Ich hätte deswegen folgende Verbesserungsvorschläge, die man testen könnte:
    - LinkedList stattdessen benutzen (Kein Kopieren beim Einfügen)
    - Beim Erzeugen der Liste, die Länge auf n/log n setzen, dann wird weniger oft vergrößert. (int-Argument im Listen Konstruktor)
    - Vector probieren und dort auch die Länge beim Erzeugen auf n/log n setzen.

    edit:
    Zur genaueren Erklärung ArrayList verhält sich in etwa wie ein Unbounded Array, d.h. es wird für das Einfügen nur armotisiert konstante Zeit erwartet.
    Geändert von Tzu Iop (08. Juli 2012 um 22:32 Uhr)
    Papoy!

  6. #96
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    Aber das Problem des "Addierens" hat man ja bei beiden Methoden, da kann der Zeitunterschied nicht herkommen.
    Um alle Primzahlen unter 100.000 aufzulisten, brauch ich mit der schnellen Methode 116ms, mit der langsamen 3.655 ms.
    Bei 200.000 sinds 252 bzw 14.901; bei 300.000 sinds 474 bzw. 31950

    Will sagen, die schnelle geht linear, die langsame quadratisch. Das kann ja nur am Zugriff liegen?
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  7. #97
    Minion Avatar von Tzu Iop
    Registriert seit
    28.10.05
    Ort
    Im EG ohne Aufzug *schulterzuck*
    Beiträge
    6.377
    Zitat Zitat von Peregrin_Tooc Beitrag anzeigen
    Aber das Problem des "Addierens" hat man ja bei beiden Methoden, da kann der Zeitunterschied nicht herkommen.
    Um alle Primzahlen unter 100.000 aufzulisten, brauch ich mit der schnellen Methode 116ms, mit der langsamen 3.655 ms.
    Bei 200.000 sinds 252 bzw 14.901; bei 300.000 sinds 474 bzw. 31950

    Will sagen, die schnelle geht linear, die langsame quadratisch. Das kann ja nur am Zugriff liegen?
    Ich sehe gerade, dass du einen kleinen aber feinen Fehler gemacht hast:
    PHP-Code:
    if(== 1||n<0
    Muss es heißen, denn | ist bitweises Oder und || logisches. Dein Ausdruck wertet immer zu True aus und damit ist auch die Methode immer sofort zu Ende. Linearzeit kann bei dem Primzahlentest nämlich niemals eintreten.
    Papoy!

  8. #98
    Administrator
    Registriert seit
    20.08.04
    Beiträge
    8.965
    Verstand op nul, frituur op 180.

  9. #99
    Minion Avatar von Tzu Iop
    Registriert seit
    28.10.05
    Ort
    Im EG ohne Aufzug *schulterzuck*
    Beiträge
    6.377
    Ändert übrigens nichts daran, dass Java anscheinend die Schleifen aus der ersten Methode recht gut optimiert. Ich bekomme da nämlich auch ordentlich Laufzeitunterschiede.
    Papoy!

  10. #100
    Altes Mann Avatar von goethe
    Registriert seit
    01.11.03
    Ort
    Ullem
    Beiträge
    34.390
    da gibt es eine Funktion und eine boolsche Variable, die beide "prime" heißen. Die boolesche Variable wird mit jedem Schleifendurchlauf erzeugt (boolean prime = true; Speichallokierung) und wieder zerstört --> habe ich das richtig verstanden? Ein Compiler würde das sicher optimieren, aber was macht java dann?


    You can check out any time you like, but you can never leave


  11. #101
    Registrierter Benutzer
    Registriert seit
    04.04.09
    Beiträge
    5.069
    Wo ich gerade damit rumspiele: Wenn man
    Code:
    for(Long p: L){ 
                        if(i%p==0){ 
                            prime=false; 
                            break; 
                        } 
                    }
    zu
    Code:
    for(Long p: L){
                    	if(p*p > i){
                    		break;
                    	}
                        if(i%p==0){ 
                            prime=false; 
                            break; 
                        } 
                    }
    ändert, macht es ein klein wenig aus.

  12. #102
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    Zitat Zitat von Tzu Iop Beitrag anzeigen
    Ich sehe gerade, dass du einen kleinen aber feinen Fehler gemacht hast:
    PHP-Code:
    if(== 1||n<0
    Muss es heißen, denn | ist bitweises Oder und || logisches. Dein Ausdruck wertet immer zu True aus und damit ist auch die Methode immer sofort zu Ende. Linearzeit kann bei dem Primzahlentest nämlich niemals eintreten.
    Nein, das stimmt nicht (aber du hast Recht, || wäre besser), der Primzahltest gibt für 0 und 1 durchaus false aus. Und (nur) für Primzahlen true. "|" ist das nicht-Kurzschluss-oder und erzwingt, das beide Ausdrücke ausgewertet werden. Ersetzt habe ich es aber nun eh durch
    PHP-Code:
    if(n<2
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  13. #103
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    Zitat Zitat von goethe Beitrag anzeigen
    da gibt es eine Funktion und eine boolsche Variable, die beide "prime" heißen. Die boolesche Variable wird mit jedem Schleifendurchlauf erzeugt (boolean prime = true; Speichallokierung) und wieder zerstört --> habe ich das richtig verstanden? Ein Compiler würde das sicher optimieren, aber was macht java dann?
    Das ist eine gute Frage. An und für sich müsste der Garbage-Collector nach jedem Durchlauf die Variable killen. Vielleicht kann man an der Stelle was drehen.

    Zitat Zitat von Quietsch Beitrag anzeigen
    Wo ich gerade damit rumspiele: Wenn man
    Code:
    for(Long p: L){ 
                        if(i%p==0){ 
                            prime=false; 
                            break; 
                        } 
                    }
    zu
    Code:
    for(Long p: L){
                    	if(p*p > i){
                    		break;
                    	}
                        if(i%p==0){ 
                            prime=false; 
                            break; 
                        } 
                    }
    ändert, macht es ein klein wenig aus.
    Stimmt, das hilft natürlich, aber sollte nicht soo viel ausmachen.
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  14. #104
    Registrierter Benutzer
    Registriert seit
    04.04.09
    Beiträge
    5.069
    Zitat Zitat von Peregrin_Tooc Beitrag anzeigen
    Stimmt, das hilft natürlich, aber sollte nicht soo viel ausmachen.
    Bei mir hat's den Unterschied zwischen ~10s und ~0,8s ausgemacht. Du sparst dir dadurch, vor allem bei den größeren Zahlen, unheimlich viele Listenzugriffe.

  15. #105
    Minion Avatar von Tzu Iop
    Registriert seit
    28.10.05
    Ort
    Im EG ohne Aufzug *schulterzuck*
    Beiträge
    6.377
    Zitat Zitat von Peregrin_Tooc Beitrag anzeigen
    Das ist eine gute Frage. An und für sich müsste der Garbage-Collector nach jedem Durchlauf die Variable killen. Vielleicht kann man an der Stelle was drehen.
    Macht quasi nichts aus. Da das auf dem Stack landet wie jede lokale Variable. Man spart sich vielleicht einen Maschinenbefehl pro Schleifendurchlauf.

    Zitat Zitat von Peregrin_Tooc Beitrag anzeigen
    Stimmt, das hilft natürlich, aber sollte nicht soo viel ausmachen.
    Oh, doch macht es. War selbst etwas überrascht.
    Papoy!

Seite 7 von 25 ErsteErste ... 3456789101117 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •