x3: rekursion mit Schutzmechanismus

Moin an das Forum,

Kann net schlafen, weil ich an folgendes Problem denken muss:

Rekursion: Beispiel: ich durchsuche ein Verzeichnis, von dem ich nicht weiss, wie groß es ist.

Oder: Ich will eine Datei in ein Programm laden und weiss nicht wie groß sie ist.

in beiden Fällen ist es kritisch einfach alles in den Arbeitsspeicher zu saugen, wenn die Datenmenge zu groß, und der Speicher zu klein.

Nur in den Arbeitsspeicher laden, wenn der Benutzer es anfordert, ist zu langsam.

Wie sieht es von der theoretischen Seite aus mit Lösungen für das Problem? Ich hab mal was von Bäumen gehört, die auf den Speicherbereich(der Festplatte) verweisen, es werden also nur die Zeiger auf die Speicherbereiche in den Arbeitsspeicher geladen.

Wo gibbet gute Tutorials, die sich mit der praktischen Umsetzung von sowas beschäftigen?

Geht sowas nur mit C(++) oder bieten auch java/python/perl/php/javascript/html (haha) solche Möglichkeiten?

  1. Hi !

    Rekursion:
    Beispiel: ich durchsuche ein Verzeichnis, von dem ich nicht weiss, wie groß es ist.

    Du meinst sicherlich, daß das Verzeichnis zig Unterverzeichnisse. Nun, nehmen wir mal an, daß keiner auf die Idee kommt, ein Verzeichnis in der 15. Ebene als Link auf das Verzeichnis in der 2. Ebene zu machen und das Programm im Kreis läuft. Dann mach' Dir mal keine Sorgen, daß der Stack überläuft, wenn er dort die ganzen Rücksprung-Adressen ablegt.

    Oder: Ich will eine Datei in ein Programm laden und weiss nicht wie groß sie ist.

    Tja, da hat Deine Programmiersprache bestimmt die passenden Kommandos, um die Größe der Datei festzustellen. Falls nicht: Datei in entsprechendem Mode einlesen, die gelesen Bytes addieren und am Ende kommt eine Summe raus. Sie entspricht der Größe der Datei. Geht mit Hochsprachen relativ zügig. Assembler soll sich dafür auch eignen.

    Wie sieht es von der theoretischen Seite aus mit Lösungen für das Problem? Ich hab mal was von Bäumen gehört, die auf den Speicherbereich(der Festplatte) verweisen, es werden also nur die Zeiger auf die Speicherbereiche in den Arbeitsspeicher geladen.

    Und auf welche Speicherbereiche zeigen die Zeiger ? Auf die Platte, den Monitor, den Teppich ?

    Wo gibbet gute Tutorials, die sich mit der praktischen Umsetzung von sowas beschäftigen?

    www.google.de bietet bestimmt das eine oder andere.

    Gruß

    Hans

    1. Du meinst sicherlich, daß das Verzeichnis zig Unterverzeichnisse.

      hat, ja richtig.

      Nun, nehmen wir mal an, daß keiner auf die Idee kommt, ein Verzeichnis in der 15. Ebene als Link auf das Verzeichnis in der 2. Ebene zu machen und das Programm im Kreis läuft. Dann mach' Dir mal keine Sorgen, ...

      Warum? Woher weißt Du das?

      ...daß der Stack überläuft, wenn er dort die ganzen Rücksprung-Adressen ablegt.

      Ja, das trifft es, Rücksprung-Adresse, Stack, das hagelt Google-Ergebnisse, neues Wort, wo gibbet gute Tutorials, die sich mit der praktischen Umsetzung von genau diesem Punkt bitte beschäftigen? Oder anders gesagt, woher weißt Du das? Vielleicht hast Du noch mehr Fachausdrücke, nicht irgendwas, sondern passend zu meinem Problem, Du scheinst zu wissen, wie es programmiert wird, also rücks schon raus.

      Oder: Ich will eine Datei in ein Programm laden und weiss nicht wie groß sie ist.

      Tja, da hat Deine Programmiersprache bestimmt die passenden Kommandos, um die Größe der Datei festzustellen. Falls nicht: Datei in entsprechendem Mode einlesen, die gelesen Bytes addieren und am Ende kommt eine Summe raus. Sie entspricht der Größe der Datei. Geht mit Hochsprachen relativ zügig.

      Nein, Hans, da hast du mich ganz falsch verstanden, Ich meinte eher in etwa das folgende: Wenn ich z.B. ein großes Dokument, sagen wir, eine Schachdatenbank von der Grösse ein Gigabyte+ in einem Schachbearbeitungsprogramm betrachte, wie wird das technisch umgesetzt, beispielsweise das Datenbankfenster, wenn der User schnell vom Anfang zum Ende scrollt, und ähnliche Probleme, so etwas hatte ich eher gemeint, nicht get_filesize().

      Assembler soll sich dafür auch eignen.

      Du Kannst Assembler? Jaa, Assembler wäre toll, gibbet gute Tutorials dazu? Und ich meine nicht den Müll, den man bei Google findet. Mieses Layout, Kein Inhaltsverzeichnis, Seitenweise nur Text ohne Absätze, tote Links, grelle Hintergründe, Keine Erklärung wie man da Beispiele ans Laufen kriegt, etc... etc... etc, ist eben nicht alles SELFhtml) Welches ist das mit Abstand beste Assembler-Tutorial, das Du kennst?

      Wie sieht es von der theoretischen Seite aus mit Lösungen für das Problem? Ich hab mal was von Bäumen gehört, die auf den Speicherbereich(der Festplatte) verweisen, es werden also nur die Zeiger auf die Speicherbereiche in den Arbeitsspeicher geladen.

      Und auf welche Speicherbereiche zeigen die Zeiger ? Auf die Platte, den Monitor, den Teppich ?

      Hat ein Monitor ne Festplatte?, und Teppiche? Klar, gibts alles. Aber bei mir befindet sich die Festplatte im Computergehäuse (das mit den grünen Platten innen und den bunten Steckern).

      Ich erklärs noch mal, ich gebe zu, meine Ausführung war sehr unklar: Nicht der Inhalt Eines großen Teiles einer Festplatte, sagen Wir 10 TB wird in den Arbeitspeicher gelesen, sondern, ach lassen wir das mit den B-Bäumen mal unter den Tisch fallen, das ist für mich zur Zeit noch zu kompliziert, und ich habe den Verdacht, das Du davon auch keine Ahnung hast.

      Wo gibbet gute Tutorials, die sich mit der praktischen Umsetzung von sowas beschäftigen?

      www.google.de bietet bestimmt das eine oder andere.

      Also Hans, dann zeig mal was Du wirklich draufhast, oder willst Du mich, der der Schüler ist, mit einem Verweis auf Google abfertigen?

      1. Hi x3,

        woher ich das alles weiß ?

        Also: von 1988 bis 1990 habe ich ein Berufskolleg besucht und dort vieles erfahren. Nach einer kleinen Pause beim olivgrünen Verein habe ich mein Wissen während eines 11-semestrigen Studiums (darunter Praktika bei IBM und Forschungsinstitut) vertieft. Danach folgten 9 Jahre Berufserfahrung bevor ich jetzt Dir antworte.

        Willst Du allen ernstes erwarten, daß ich Dir mein ganzes Wissen in einem einzigen Posting weitergeben kann ?

        Also hier mal das Wichtigste:

        Heap = Arbeitsspeicher
        Stack = Speicher, auf dem kurzfristig Variablen, Speicheradressen, Rücksprungadressen etc abgelegt werden.

        Stell Dir vor, Du hast in der linken Hand ("Heap") eine Schüssel mit Pudding, in der rechten Hand ("Heap") eine mit Soße. Jetzt willst Du die Tür aufmachen. Also mußt Du eine Hand frei bekommen. Du stellst Schüssel1 auf einen Tisch ("push"-Kommando, Schüssel1 auf dem Stack), stellst Schüssel2 auf den Boden ("push"-Kommando, Schüssel2 auf dem Stack), öffnest die Tür, holst Schüssel2 in die eine Hand ("Heap", "pop"-Kommando, Schüssel2 vom Stack, Schüssel2 muß zuerst kommen, da FIFO), holst Schüssel1 ("Heap", "pop"-Kommando, Schüssel1 vom Stack) und gehst durch die Tür. Jetzt sind wieder beide Schüsseln im hauptspeicher und der Stack ist aufgeräumt. Wenn der Stack jetzt allerdings so klein wäre, daß nur eine Schüssel drauf paßt, wäre bei der zweiten Schüssel ein "Stack overflow" gekommen, weil der Stack plötzlich im Bereich vom Heap wäre.

        Such einfach mal nach Tutorials von einfachen Sprachen, wie Pascal, C. Lass die objektorientierten Dinger weg. Je nachdem, wie gut Du bist, kannst Du Teile der Tutorials überspringen (Was ist ein Array, Unterschied zwischen Funktion/Prozedur etc.) Und vergiß ganz schnell zu glauben, jahrelanges Wissen/Erfahrung könnte man sich mit einem Mausklick aneignen.

        Gruß

        Hans

        1. Hallo Hans,

          Heap = Arbeitsspeicher
          Stack = Speicher, auf dem kurzfristig Variablen, Speicheradressen, Rücksprungadressen etc abgelegt werden.

          Naja, im Arbeitsspeicher liegt ja beides. Unter dem Heap versteht man eigentlich den Speicherbereich, in dem ein Programm beliebige Datenstrukturen mit Zeigern aufbauen kann und unter dem Stack, die Datenstruktur, in der die Daten verwaltet werden, die man für Funktionsaufrufe braucht. Dabei eignet sich natürlich ein Stack als Datenstruktur, weil man beim Aufrufen einer Funktion für Parameter, lokale Variablen etc. Speicher reservieren muss und diese Daten also auf den Stack legen kann und nach dem Abarbeiten des Funktionsaufrufs diesen Speicher wieder frei gibt.

          Grüße

          Daniel

          1. Hi,

            @ Hans:

            Also: von 1988 bis 1990 habe ich ein Berufskolleg besucht und dort vieles erfahren. Nach einer kleinen Pause beim olivgrünen Verein habe ich mein Wissen während eines 11-semestrigen Studiums (darunter Praktika bei IBM und Forschungsinstitut) vertieft. Danach folgten 9 Jahre Berufserfahrung bevor ich jetzt Dir antworte.

            Dann verstehst Du sicherlich, wenn ich mit meinen ca fünf Jahren Web/Programmiererfahrung noch einige Fragen habe.

            Willst Du allen ernstes erwarten, daß ich Dir mein ganzes Wissen in einem einzigen Posting weitergeben kann ?

            ne, aber Du kannst es ja versuchen, mir das, was ich wissen will zu erklären. (Hab ja nicht gefragt: "Erkär mir mal schnell die ganze Informatik")

            Also hier mal das Wichtigste:

            Heap = Arbeitsspeicher Stack = Speicher, auf dem kurzfristig Variablen, Speicheradressen, Rücksprungadressen etc abgelegt werden.

            Also kann ich mir einen Stack zum Beispiel als eine Datei (Also gespeichert auf der Festplatte) vorstellen, in der ich die Pfade der noch zu durchsuchenden Verzeichnisse zwischenspeichere ?! Oder ist der Stack irgendwas ausserhalb von Festplatte/Arbeitsspeicher?

            Stell Dir vor, Du hast in der linken Hand ("Heap") eine Schüssel mit Pudding(...)

            Danke, schönes Beispiel, jetzt hab ich Hunger... Nee, ich glaube, jetzt kann ich das in ein Programm umsetzen. Viele Konzepte erschließen sich mir erst, wenn ich einen konkret programmtechnisch-praktischen Nutzen erkenne.

            Zum Beispiel: Was ist der Sinn von Vererbung/überschreiben von Methoden: Ich kann verschiedene Objekte in eine Liste packen, indem ich die die benötigten Funktionen in eine Elternklasse oder (in Java) in ein Interface packe, und dann die Elternklasse als den Typ der Liste nehme. Dann kann ich aber trotzdem die überschriebenen Methoden der Kindklassen aufrufen. Als ich das gecheckt hatte, war mir Vererbung klar.

            Oder das Überladen von Methoden: dadurch kann ich dem Nutzer der Klasse die Tipparbeit abnehmen, indem ich Methoden erstelle, die sich selbst mit voreingestellten Parametern aufrufen (zum Beispiel Serverroot=localhost usw.) Das habe ich beim Durchstöbern von den Standard Javaklassen gesehen, wird da extensiv angewendet.

            jetzt hab ich also ein konkretes Beispiel gefunden, zur Verwendung von Stacks, danke...

            Such einfach mal nach Tutorials von einfachen Sprachen, wie Pascal, C.

            C++ ist tatsächlich die nächste Sprache, die ich mir angucke (erstes Beispiel kompiliert, hab auch schon die Stadtbibliothek durchstöbert, und das Buch 'C++ Programmierung' von Andre Williams genommen, gefällt mir sehr gut). Und Pascal finde ich insofern interessant, weil die kompilierten Programme so schnell wie C-Programme sein sollen. (Das schlaucht an Java enorm, mein alter Rechner wird echt gemartert.)

            Lass die objektorientierten Dinger weg.

            Weniger, nachdem ich mir die Semantik und Syntax von Java reingezogen habe -sehr schön, aber meiner Meinung nach ein paar krasse Designschwächen (z.B. Objekt objekt = new Objekt(), statt einfach objekt = Objekt()), versuche ich eigentlich, nur noch in OOP zu schreiben. Vor allem weil meine Programmierexperimente immer größer und unlesbarer werden.

            Meine letze Entdeckung war, das javascript(!) hier ja ausgesprochen weitreichende Möglichkeiten bietet, bis hin zur Vererbung, sehr cool.

            Ein Beispiel einer einfachen Model-View-Controller- initialisierung in javascript, falls es jemand gebrauchen kann. Habe ich nach einem Tutorial von tin-Ho Chan und Gerhard Stegmann (leider vom Netz genommen, aber ich habs mir gesaugt, hehe) zum üben erstellt (auch in java), und hey, es funzt! (Allerdings habe ich keine Ahnung, warum mein Firefox vier Pop-ups anzeigt, ist auch nicht auf IE getestet, nur Firefox, Opera und Netscape)

            
            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                   "http://www.w3.org/TR/html4/loose.dtd">
            
            <html>
            
               <head>
                  <title>MVC-Initialisierung Schablone</title>
               </head>
            
               <body>
                  <script type="text/javascript">
            
            
            
                     model=new Model();
                     model.init();
            
                     view=new View(model);
                     view.init();
            
                     model.notifyObservers();
            
            
            
                     function Model()
                     {
                        var setOfObservers=new Array();
            
                        this.addObserver=function(observer) {
                           setOfObservers.push(observer);
                        };
            
                        this.deleteObserver=function(observer) {
                           for (i=0; i<setOfObservers.length; i++) {
                              /*hab nicht getestet ob das korrekt ist, '==' oder 'equals()' ?!*/
                              if (setOfObservers[i] == observer) {
                                 setOfObservers.splice(i,1);
                              }
                           }
                        };
            
                        this.notifyObservers=function() {
                           for (i=0; i<setOfObservers.length;i++) {
                              setOfObservers[i].update();
                           }
                        };
            
                        this.init=function() {
                           /* Model initialisieren mit Daten */
                        };
                     }
            
            
            
                     function View(model)
                     {
                        this.prototype=new Observer();
                        var self = this;
                        /*nötig, weil this nicht aus privaten Funktionen aus aufgerufen werden kann, vergleiche wikipedia-javascript*/
                        this.myModel=model;
                        this.myModel.addObserver(this);
                        makeController();
                        this.myController.init();
            
                        this.init=function() {
                           /* View initialisieren mit Daten */
                        };
            
                        this.update=function() {
                           alert("Hallo vom View");
                        };
            
                        function makeController() {
                           self.myController=new Controller(self.myModel, self);
                        }
                     }
            
            
            
                     function Controller (model, view)
                     {
                        this.prototype=new Observer();
                        this.myModel=model;
                        this.myView=view;
                        this.myModel.addObserver(this);
            
                        this.init=function() {
                           /* Controller initialisieren mit Daten */
                        };
            
                        this.update=function()
                        {
                           alert("Hallo vom Controller");
                        };
                     }
            
            
            
                     /*ist das in javascript überhaupt nötig?!*/
                     function Observer()
                     {
                        this.update=function() {
                           alert("nur die überschriebenen Methoden werden aufgerufen");
                        };
                     }
                 </script>
            
            
               </body>
            
            </html>
            
            

            Je nachdem, wie gut Du bist, kannst Du Teile der Tutorials überspringen (Was ist ein Array, Unterschied zwischen Funktion/Prozedur etc.)

            Warte mal, Unterschied Funktion/Prozedur, das hab ich mal gelesen in 'Einführung in die Informatik', kanns aber nicht mehr finden...doch, Funktion, gibt den Rückgabewert mit Return zurück, bei der Prozedur muß der Rückgabewert in der Kopfzeile genannt werden.. aber was hat das für praktische Auswirkungen, ist das nicht einfach nur ein semantischer Unterschied? Ja, ich merke, das ich anfange Tutorials von hinten nach vorne zu lesen, weil ich die Einführungen gar nicht mehr brauche

            Und vergiß ganz schnell zu glauben, jahrelanges Wissen/Erfahrung könnte man sich mit einem Mausklick aneignen.

            Das habe ich schon nach meinem ersten Programmierversuch aufgegeben, Datenbankzugriff mittels javascript... nebenbei, soweit ich weiß hast Du mir Google empfohlen ;-)

            @Daniel:

            vielen Dank, für den Link, eigentlich finde ich zu fast allem immer einen guten Artikel in der Wikipedia, ich vergesse nur manchmal, da zu suchen, ich steh halt manchmal auf dem Schlauch...

            Das Datenbanken intern B-Bäume benutzen, ist ja interessant, das wusste ich gar nicht.

            Nur das mit den fehlenden Tutorials zum Umgang mit großen Datenmengen ist schade, ein Umstand, den ich in ferner Zukunft mal zu ändern gedenke...

            z.B. OOP oder das mvc-Prinzip sind ja Versuche, ein verallgemeinertes Prinzip für den Aufbau von Software bereitzustellen, kann mir nicht vorstellen, das die Informatik für obiges Thema noch keine verallgemeinernden Schemas gefunden hat, wenn nicht, dann ist das eben ein (noch) schwarzer Fleck auf der Informatik-Landkarte...

            Gruß

            1. Hallo x3,

              Also kann ich mir einen Stack zum Beispiel als eine Datei (Also gespeichert auf der Festplatte) vorstellen, in der ich die Pfade der noch zu durchsuchenden Verzeichnisse zwischenspeichere ?! Oder ist der Stack irgendwas ausserhalb von Festplatte/Arbeitsspeicher?

              Nein, ein Stack ist erstmal einfach eine Datenstruktur, auf die man oben etwas drauflegen und wieder wegnehmen kann. Im wesentlichen gibt es die Operationen push (etwas auf den Stack legen), pop (etwas runter nehmen), peek (oberstes Element zurückgeben aber nicht löschen) und size (Anzahl der Elemente zurückgeben).
              Unter dem Stack versteht man üblicherweise einen Stack der für einen von der Laufzeitumgebung bzw von vom Kompiler generierten Code verwaltet wird und der dazu dient, die Parameter, lokalen Variablen u.ä. einer Prozedur/Funktion zu verwalten. Dabei werden eben beim Betreten der Funktion die Variablen auf den Stack gelegt und beim Verlassen wieder runter genommen. Bei einer tiefen Rekursion werden also sehr viele Elemente auf den Stack gelegt, wenn es zu viele sind (idR ist dieser Stack größenmäßig beschränkt) kommt es zu einem Stack-Overflow und das Programm wird beendet.
              Hans erwähnte das Thema vermutlich nur, weil er meinte, das sei evtl. Dein Problem mit großen Datenmengen. An diese Grenze stößt man aber fast nur dann, wenn man eine Endlosrekursion erzeugt hat oder wirklich sehr ungeschickt vorgeht.

              jetzt hab ich also ein konkretes Beispiel gefunden, zur Verwendung von Stacks, danke...

              Stacks kann man sicher auch in einer Datei aufbauen, aber das ist eher ungewöhnlich. Du musst die Daten dann ja dann auch in dieser Reihenfolge verarbeiten.

              Weniger, nachdem ich mir die Semantik und Syntax von Java reingezogen habe -sehr schön, aber meiner Meinung nach ein paar krasse Designschwächen (z.B. Objekt objekt = new Objekt(), statt einfach objekt = Objekt())

              Ich habe ja schon viel Kritik an Java gehört, aber das hat noch niemand als Designschwäche gesehen. Eine Instanzierung ist ja Semantisch etwas anderes als ein Aufruf einer Methode, wonach Deine Variante aussieht, auch wenn die Namenskonventionen dann nicht stimmen. Warum soll es dafür nicht eine entsprechende Syntax geben?

              Warte mal, Unterschied Funktion/Prozedur, das hab ich mal gelesen in 'Einführung in die Informatik', kanns aber nicht mehr finden...doch, Funktion, gibt den Rückgabewert mit Return zurück, bei der Prozedur muß der Rückgabewert in der Kopfzeile genannt werden.. aber was hat das für praktische Auswirkungen, ist das nicht einfach nur ein semantischer Unterschied?

              Eigentlich ist es fast nur ein syntaktischer unterschied. Funktionen kann man eben in Ausdrücken aufrufen, für Prozeduren braucht man Hilfsvariablen die man als Ausgabeparameter mitgeben kann. Der Compiler wird aus dem Aufruf einer Prozedur mit einem Ausgabeparameter und einer Funktion vermutlich ziemlich ähnlichen, nach Optimierung womöglich sogar den gleichen Code erzeugen.

              z.B. OOP oder das mvc-Prinzip sind ja Versuche, ein verallgemeinertes Prinzip für den Aufbau von Software bereitzustellen.

              Naja ein allgemeines Lösungsschema für Architektur gibt es erst recht nicht. Es gibt so eine Hand voll Konzepte und das war's dann im wesentlichen.

              Grüße

              Daniel

              1. Hi,

                Bin grade etwas in Zeitnot, deshalb dauerts immer ein bisschen mit dem posten..

                Also, ich schreibe gerade ein Programm (php), welches so einen Algorithmus (zwischenspeichern in Stack) enthält und wenn ich fertig bin, poste ich das einfach mal und ihr könnt mir dann sagen, ob das so richtig ist.

                Zu der Sache mit der Objektinstanzierung in Java:

                der Aufruf = new Objektxy() ist ja in Java (Ob in anderen Sprachen auch, weiss ich nicht) immer der Aufruf einer Methode, nämlich der Konstruktormethode. Da in Java so etwas sehr häufig geschieht, macht das meines Erachtens schon etwas aus.

                
                Objekt objekt = new Objekt()
                objekt = Objekt()
                
                

                Das sind weniger als zwei Drittel zu tippen.

                Hätte man vereinbart, das Objekte (und damit auch die Konstruktormethode) immer mit einem Großbuchstaben anfangen MÜSSEN (Was ja bereits eine empfohlene, aber nicht bindende Maßname ist), könnte man daran auch zweifelsfrei erkennen, das es sich um die Instanzierung eines Objektes handelt. Zur Not könnte man auch ...

                
                objekt = new Objektxy()
                
                

                ...schreiben. Ich finde jedenfalls die erste Schreibweise sehr umständlich

                Viele Grüsse

                1. Hallo x3,

                  Zu der Sache mit der Objektinstanzierung in Java:

                  der Aufruf = new Objektxy() ist ja in Java (Ob in anderen Sprachen auch, weiss ich nicht) immer der Aufruf einer Methode, nämlich der Konstruktormethode.

                  Nun, nicht wirklich. Die Semantik eines Konstruktoraufrufs ist von der eines Methodenaufrufs ziemlich verschieden. Bei einem Konstruktoraufruf wird automatisch ein neues Objekt instanziert, es werden Eigenschaften initialisiert und Konstruktoren übergeordneter Klassen geladen.

                  Man könnte sich nun natürlich überlegen, eine kürzere Syntax zu verwenden. Aber erstens geht es hier um lächerliche vier Zeichen und zweitens ist eine mäglichts kurze Syntax kein Entwurfsziel von Java. Ein Ziel hingegen ist, gute Lesbarkeit und unmissversändliche Semantik.
                  Der Aufruf eines Konstruktors muss also auf jeden Fall klar erkennbar sein. Indem man Semantik an die Großkleinschreibung hängt, gelingt einem das sicher nicht.

                  Unter Designmängel versteht man üblicherweise auch Schwächen der Programmsemantik, also z.B. das bestimmte Konstrukte zu unflexibel, fehleranfällig oder sonst wie problematisch sind. Syntax ist dagegen relativ unwichtig und Gewohnheitssache. Man könnte sich vermutlich für einige Dinge eine schönere Syntax ausdenken, aber beim new-Operator kann man da eigentlich kaum etwas grundlegend anders machen.

                  Grüße

                  Daniel

      2. Hallo x3,

        Nun, wenn Du wirklich sehr große Datenmengen verarbeiten musst, musst Du Dir ebenen vorher überlegen, was Du wirklich im Arbeitsspeicher halten musst und dann, wie Du das organisieren kannst.
        So etwas passiert nicht automatisch (ok, das Betriebssystem lagert auch Arbeitsspeicher auf die Festplatte aus) aber darüber hinaus bleibt Dir nichts anderes übrig, als Daten von der Platte zu lesen, Deine Datenstruktur im Arbeitsspeicher aufzubauen, damit zu Arbeiten und die Daten zurück zu schreiben.
        Die von Dir angesprochenen B-Bäume sind Suchbäume, die besonders dafür geeignet sind, auf Festplatten o.ä. gespeichert zu werden. So etwas einzusetzen, ist natürlich sehr sinnvoll, wenn Du in den Daten suchen musst.
        Eine Beschreibung zu B-Bäumen findest Du hier: < http://de.wikipedia.org/wiki/B-Baum>
        Bevor man so etwas selber implementiert, kann man sich auch überlegen, ob es nicht eine Datenbank gibt, die den Anforderungen entspricht. Das muss kein Datenbanksystem sein wie MySQL o.a. es gibt auch Bibliotheken um Datenbank-Dateien zu lesen und zu schreiben.

        Ein Tutorial, wie man mit großen Datenmengen umgeht, wirst Du kaum finden. Wie man das macht, kommt eben darauf an, wie die Daten strukturiert sind bzw wie man sie strukturieren kann und welche Operationen man durchführen muss.

        Grüße

        Daniel