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
                Freak Show by Metaebene Personal Media - Tim Pritlove

                Freak Show

                11 Listeners

                Methodisch inkorrekt! by Methodisch inkorrekt!

                Methodisch inkorrekt!

                16 Listeners

                Lage der Nation - der Politik-Podcast aus Berlin by Philip Banse & Ulf Buermeyer

                Lage der Nation - der Politik-Podcast aus Berlin

                227 Listeners

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

                c’t uplink - der IT-Podcast aus Nerdistan

                9 Listeners

                Chaosradio by Chaos Computer Club Berlin

                Chaosradio

                7 Listeners

                heiseshow by heise online

                heiseshow

                3 Listeners

                Logbuch:Netzpolitik by Metaebene Personal Media - Tim Pritlove

                Logbuch:Netzpolitik

                6 Listeners

                Jung & Naiv by Tilo Jung

                Jung & Naiv

                44 Listeners

                Holger ruft an by Übermedien

                Holger ruft an

                2 Listeners

                Die Wochendämmerung - Der stabile Wochenrückblick by Katrin Rönicke und Holger Klein (hauseins)

                Die Wochendämmerung - Der stabile Wochenrückblick

                14 Listeners

                Sicherheitshalber by Der Podcast zur sicherheitspolitischen Lage in Deutschland, Europa und der Welt.

                Sicherheitshalber

                46 Listeners

                Bit-Rauschen: Der Prozessor-Podcast von c’t by c't Magazin

                Bit-Rauschen: Der Prozessor-Podcast von c’t

                0 Listeners

                Legion by rbb | NDR | Undone

                Legion

                7 Listeners

                Haken dran – das Social-Media-Update der c't by Gavin Karlmeier

                Haken dran – das Social-Media-Update der c't

                2 Listeners

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

                Passwort - der Podcast von heise security

                3 Listeners