Das Video kommt von YouTube: erst beim Abspielen verbindet sich die Seite mit YouTube (Google).
Was ist ein Array? | mit Animationen leicht erklärt | Algorithmen und Datenstrukturen
Das Wichtigste aus dem Video
Tipp auf eine Zeit – das Video springt genau dorthin.
Transkriptautomatisch erstellt · 67 Zeilen
- in diesem Video erkunden wir die erste von insgesamt 8 Datenstrukturen dieser Videoreihe und heute dreht sich alles um race
- sind wichtig da sie sehr schnell im Zugriff auf Elemente durch die Angabe eines Index sind wenn ich aus einem Array das Element an den X2 haben will
- kann ich auf diese sofort zugreifen das Element an den Index muss nicht erst wie bei anderen Datenstrukturen gesucht werden dafür besitzen andere Nachteile
- aber nach diesem Video wirst du die Vor- und die Nachteile in der Tiefe verstehen kennst du die drei Eigenschaften die in Array ausmachen das Erics linear sind
- ist die erste Eigenschaft das bedeutet dass die Elemente eine Reihenfolge haben es gibt also ein Element an der ersten Position an der zweiten und so weiter
- viel häufiger als Position wirst du aber einen anderen Begriff hören und zwar Index oder die Mehrzahl davon Indizes die Zählweise der Indizes ist etwas
- gewöhnungsbedürftig der erste Index startet nämlich bei Null und nicht intuitiver Weise bei eins der Index das letzte Elements ist die Anzahl der
- Elemente -1 die -1 kommt daher da wir das erste Element mit den x0 angeben und nicht mit eins die zweite Eigenschaft ist dass die Größe eines Aeros statisch
- ist damit ist gemeint dass die Größe und veränderbar ist dann wenn wir ein area erzeugen gehen wir die Größe mit an sie lässt sich danach aber nicht mehr
- verändern dass alle Elemente vom gleichen Datentypen sind ist die dritte und die letzte Eigenschaft in Eric kann also nur
- Zahlen oder stringsspeichern aber nicht beides gleichzeitig falls ihr das etwas abstrakt vorkommt hilft dir vielleicht die Vorstellung eines Arrays als
- Federtasche denn ja eine Federtasche erfüllt die drei Eigenschaften eines Arrays alle Stifter haben einen festen Platz und du weißt welcher Stift an der
- ersten Position zweiten und so weiter ist die Größe einer Federtasche variiert nicht sie besitzt nur Platz für eine bestimmte Anzahl an Stifte diese
- Eigenschaften gelten für Sprachen WC Java und viele weitere aber falls du in der Vergangenheit vielleicht mit Javascript oder Pfeifen programmiert
- hast könntest du dich vielleicht wundern warum die Eigenschaften nicht auch auf sie zu treffen denn sie erlauben es in einem Array unterschiedlich viele
- Datentypen zu speichern und sogar unbegrenzt viele davon zumindest scheint es auf den ersten Blick so denn unter der Haube erfüllen sie alle die gleichen
- Eigenschaften die wir uns verfolgenden genauer anschauen werden und übrigens hi ich bin Roman von developer weißt du wie Daten gespeichert werden
- ein Speicherplatz ist ein bald groß unterschiedliche Datentypen benötigen unterschiedlich viele Bytes zum Beispiel ist ein bulien
- beide ist eine eindeutige Adresse zugeordnet die ein Hexadezimalzahlen angegeben ist die Adresse gibt die Position im Speicher an
- wenn wir ein Array definieren wird im Speicher genau so viel Platz für das definierte Array reserviert wie wir angegeben haben wollen wir ein Array und
- das drei intergepassen werden also drei mal vier Bytes pro integer reserviert wir greifen wir jetzt auf die Elemente zu wenn wir ein Index angegeben
- dafür gibt es eine Formel die sofort die richtige Adresse im Speicher berechnet und sie ist auch der Grund weshalb der Zugriff auf die Elemente so performante
- ist dafür nehmen wir die erste Adresse die das Array im Speicher belegt und addieren das mit dem Ergebnis der
- Multiplikation aus der Anzahl an beides die ein Datentyp braucht und dem Index auf dem bezugreifen wollen
- ich will auf den 6.0 zugreifen ich nehme also die erste Adresse als nächstes die Anzahl an beides in diesem Fall 4 dein integer für weit groß ist
- dann brauche ich noch den Index also die 0 nun rechne ich alles zusammen und erhalte die erste Adresse des Elements an Index 0
- das funktioniert auch wenn ich auf Next 2 zugreifen will ich nehme wieder die erste Adresse die für beides und den Index also die zwei multipliziere und
- addiere alles zusammen und springe zum Element an den nächsten zwei und warum können wir nur Elemente des gleichen Datentyp speichern das hängt
- mit der Formel zusammen wenn die Elemente unterschiedlicher weit groß sind ist unklar mit wie vielen beides für die Adresse des Elements berechnen
- sollen das komische aber ist das Pfeifen und Javascript das hinbekommen dass sie
- unterschiedliche Datentypen speichern hast du eine Idee wie sie das machen in Javascript ist es so dass das Element mit dem größten Datentyp die Anzahl an
- Bytes bestimmt die kleinen Elemente müssen sich also an das größte anpassen dadurch dass dann alle Elemente wieder gleich viele Beiz haben geht die Formel
- wieder auf Python auf der anderen Seite löst das ganz anders sie speichern in dem Array nicht die Elemente selbst sondern die
- Adressen der Elemente wenn wir ein Element also auslesen wollen lesen wir die Adresse aus und springen dann im Speicher zum jeweiligen Element
- und wieso sind Arrays nun statisch das hängt auch wieder mit der Formel zusammen aber auch damit wie Daten im Speicher hinterlegt werden dennoch
- andere Daten werden gespeichert und vielleicht auch direkt an einem an würden wir jetzt ein weiteres Element speichern geht die Formel nicht mehr auf
- da die Elemente im Speicher verteilt liegen wie funktionieren die typischen Operation mit Erics beginnen wir mit dem
- Zugreifen auf ein Element das ist das was so besonders macht da wir sofort auf ein Element an einem Index zugreifen das liegt an der Formel die wir uns gerade
- erst angeschaut haben die Laufzeit des Zugreifens ist auch von eins also sehr schnell falls du mitlaufzeiten noch nicht vertraut bist verlinke ich dir ein
- Video von mir indem ich erkläre was Laufzeiten sind wenn wir Elemente einem area hinzufügen wollen können zwei worst cases Eintreffen der erste Worst Case
- ist dass wir am Anfang des Airways ein neues Element hinzufügen denn in diesem Fall müssen alle Elemente die danach kommen verschoben werden
- der zweite Worst Case ist dass unser Array voll ist und wir ein weiteres Element zu diesem Array hinzufügen wollen in diesem Fall müssen wir ein
- neues Array erstellen das größer ist als das alte dann müssen wir alle Elemente übertragen
- und können das neue Element hinzufügen ich will dir noch mal kurz zeigen was ein Speicher passiert und zwar haben wir
- unser Ray aber auch andere Daten die gespeichert sind jetzt wollen wir unser Ray um eins größer haben und müssen im Speicher nach Speicherplatz suchen wo
- dieses reinpassen würde durch die beiden worst cases kann das Hinzufügen von neuen Elementen so
- langsam sein konkret sprechen wir hier von N kommen wir zum Löschen hier ist das wieder so dass wir Elemente verschieben
- müssen wenn wir das erste Element löschen müssen alle Elemente die danach kommen nach links verschoben werden
- deshalb ist die Laufzeit des Löschens wieder hoch von innen die letzte Operation die ich zeigen will ist das suchen wenn wir ein bestimmtes Element
- suchen müssen wir Element für Element abfragen ob es das ist welches besuchen im Worst Case müssen wir alle Elemente überprüfen weshalb die Laufzeit ovn ist
- insgesamt lässt sich sagen dass Airways nicht besonders flexibel sind doch eigentlich müsste ich sagen dass statische Arrays nicht flexibel sind
- denn dynamische Eric sind es zumindest ein bisschen denn dynamische Arrays und statische Arrays die ihre Größe automatisch
- Anpassung ohne dass du es merkst während wir bei statischen Größe immer manuell anpassen müssen und genau das ist das Geheimnis von Programmiersprachen wie
- Pfeifen oder Javascript sie verwenden dynamische Arrays sie funktionieren so dass sie zwei unterschiedliche Größen haben einmal die Kapazität das ist quasi
- der reservierte Speicherplatz und dann ist dann noch die Länge das ist die Anzahl der Elemente die bereits gespeichert sind
- ist die Länge genauso groß wie die Kapazität ist das dynamische Array voll das bedeutet dass die Kapazität nun erhöht werden muss manche
- Programmiersprachen verwenden da den Faktor 1,5 und andere zwei beim Vergrößern wird im Hintergrund also im Speicher einfach nur ein neues
- statisches Array erzeugt was nun die Länge der neuen Kapazität hat nun werden alle Elemente aus dem alten statischen Array in das neue übertragen deshalb ist
- die Laufzeit von N da wir die Kapazität und damit auch die Größe des statischen Race deutlich erhöht haben müssen wir dieses eventuell gar nicht mehr
- vergrößern man spricht dann von einer Amortisierung das bedeutet dass ich einen Aufwand irgendwann für eine bessere Laufzeit
- ist es so dass wenn wir ein neues Element hinzufügen solange das Array nicht voll ist und wir keine Elemente in der Mitte oder am Anfang hinzufügen
- müssen keine Elemente verschoben werden deshalb ist die Laufzeit von 1 und das auch nur wenn man hofft dass das dynamische area inzwischen groß genug
- ist also nicht mehr wachsen muss um neue Elemente hinzuzufügen das ist sicher um eine amortisierte Laufzeit handelt wird durch das Plus symbolisiert
- in diesem Video hast du zwei Datenstrukturen kennengelernt das statische und das dynamische sind super schnell wenn es um den Zugriff auf einen
- Element an einem bestimmten Index geht dafür sind andere Operationen relativ langsam dynamische haben den Vorteil dass sie mit der Anzahl der Elemente
- mitwachsen das Hinzufügen neuer Elemente am Ende eines dynamischen Arrays hat eine amortisierte Laufzeit von 1 im nächsten Video zeige ich dir was
- LinkedList sind