Schlüsseltechnologie

STP077: Liste von Listen


Listen Later

Als der inoffizielle Wikipedia-Vorlesepodcast sehen wir es als unsere Pflicht, eine Eigenheit dieser anzusprechen: nämlich Listen von Listen, obwohl es uns eigentlich um Listen im Speicher geht.

Shownotes
  • Rückbezüge:

    • fundamentale Datenstrukturen siehe STP071: Felder/Listen, assoziative Datenfelder (Maps), Graphen
    • Frage: Wie stellt man solche Datenstrukturen im Speicher dar? Gibt es darauf überhaupt die eine richtige Antwort?
    • algorithmische Komplexität siehe STP029: Liste mit n Elementen ausdrucken in O(n), aber sortieren in O(n log(n)) bis O(n^2)
    • Speicherallokation siehe STP047 und Speicherschutz siehe STP019: Bezug wird gleich klar werden
    • Listen kann man als verkettete Liste darstellen

      • klassisches Studienobjekt in Erstsemester-Datenstrukturen-Vorlesungen
      • intuitiv verständlich: Parallele zu segmentierten Halsketten
      • wahlweise einfach oder doppelt verkettet
      • effiziente Operationen: Einfügen am Ende, Entfernen am Ende
      • ineffiziente Operationen: Einfügen in der Mitte, Wahlzugriff/Suche
      • Vergleichstabelle mit Darstellung der Zeiteffizienz
      • alles in allem durchwachsene Performance -> geht es besser?
      • alternative Strategie: interne Darstellung der Liste als balancierter Baum (oder evtl. "ausgeglichener Baum")

        • außerdem Link auf die englische Wikipedia, die nicht nur unbalancierte, sondern auch balancierte Bäume zeigt
        • kann nur sortierte Listen darstellen
        • Idee: Wurzelknoten hat das Median-Element, dann der linke Ast alle kleineren und der rechte Ast alle größeren Elemente
        • im Grunde alle gängigen Operationen mittelschnell: Wahlzugriff/Suche, Einfügen an beliebigen Stellen, Entfernen von beliebigen Stellen (Änderungen erfordern im Allgemeinen ein Austarieren des Baumes)
        • große Variation von Implementationsstrategien für dieses Balancieren -> hier nicht
        • verkettete Listen und balancierte Bäume sehen auf dem Papier ziemlich effizient aus, haben aber in ihrer reinen Form pathologisch schlechtes Speicherverhalten

          • hoher Platzverbrauch: z.B. bei einfach bzw. doppelt verketteten Listen muss zu jedem Element müssen noch eine bzw. zwei Speicheradressen abgelegt werden
          • hohe Allokationslast: wenn nicht eine Arena oder ein vergleichbarer Small Object Allocator verwendet wird
          • schlechte Lokalität: beim Durchlaufen nachfolgender Elemente werden im schlimmsten Fall ständig unterschiedliche Speicherseiten getroffen, was fortlaufend Seitenfehler verursachen kann
          • in der Praxis mit Abstand dominante Implementationsstrategie: dynamische Felder

            • Beobachtung: Einfügen oder Löschen an beliebigen Stellen wird kaum gemacht; man hängt eher mehrmals ans Ende an und sortiert dann, falls nötig
            • Idee: Optimieren auf Einfügen am Ende bei möglichst optimalen Speicherverhalten
            • Umsetzung: einfaches Feld (ein fortlaufendes Stück Speicher, in dem mehrere Elemente hintereinander abgelegt werden) mit aktuellem Füllstand N und Kapazität K
            • Einfügen ans Ende: normalerweise einfach N erhöhen; wenn N nicht in K passt, größeren Speicher reservieren, alles hinüberkopieren und die alten Speicherallokation verwerfen
            • Löschen vom Ende: einfach N reduzieren, keine Deallokation erforderlich
            • Einfügen am Anfang oder in die Mitte: alle Elemente dahinter nach hinten verschieben
            • nahezu optimales Speicherverhalten von dynamischen Feldern begründet ihre Dominanz

              • Platzverbrauch: neben der Speichergröße der Elemente selber nur zwei Zahlen (N und K)
              • Allokationslast: Vergrößern geht für gewöhnlich in exponentiellen Schritten und wird damit für wachsende Listen immer seltener nötig
              • Lokalität: lineare Suche durch die Liste geht linear durch den Speicher hindurch -> folgende Speicherseiten können vom Prozessor oft schon auf Verdacht vorgeladen werden
              • trotzdem: die anderen Datenstrukturen haben auch ihre Berechtigung (z.B. modifizierte balancierte Bäume als Basis für Datenbank-Indizes)
              • Xyrill will auch noch auf analoge Weise über Maps und Graphen reden -> weiter in STP079

                ...more
                View all episodesView all episodes
                Download on the App Store

                SchlüsseltechnologieBy Xyrillian Noises


                More shows like Schlüsseltechnologie

                View all
                Bits und so by Undsoversum GmbH

                Bits und so

                26 Listeners

                wrint: gespräche zum runterladen by Holger Klein

                wrint: gespräche zum runterladen

                13 Listeners

                Methodisch inkorrekt! by Methodisch inkorrekt!

                Methodisch inkorrekt!

                14 Listeners

                Apfelfunk by Malte Kirchner & Jean-Claude Frick

                Apfelfunk

                7 Listeners

                Das Wissen | SWR by SWR

                Das Wissen | SWR

                116 Listeners

                c’t uplink - der IT-Podcast aus Nerdistan by c’t Magazin

                c’t uplink - der IT-Podcast aus Nerdistan

                7 Listeners

                Stay Forever - Retrogames & Technik by Stay Forever Team

                Stay Forever - Retrogames & Technik

                36 Listeners

                Logbuch:Netzpolitik by Metaebene Personal Media - Tim Pritlove

                Logbuch:Netzpolitik

                7 Listeners

                Computer und Kommunikation by Deutschlandfunk

                Computer und Kommunikation

                9 Listeners

                Der KI-Podcast by ARD

                Der KI-Podcast

                25 Listeners

                KI-Update – ein heise-Podcast by Isabel Grünewald, heise online

                KI-Update – ein heise-Podcast

                3 Listeners

                Passwort - der Podcast von heise security by Dr. Christopher Kunz, Sylvester Tremmel

                Passwort - der Podcast von heise security

                3 Listeners

                Geschichten aus der Mathematik by detektor.fm – Das Podcast-Radio

                Geschichten aus der Mathematik

                1 Listeners

                UNFASSBAR – ein Simplicissimus Podcast by Simplicissimus

                UNFASSBAR – ein Simplicissimus Podcast

                28 Listeners

                Darknet Diaries Deutsch by heise online

                Darknet Diaries Deutsch

                0 Listeners