Latency Hiding in Tree Lookups using Out Of Order Execution
|
|
- Mareke Chantal Messner
- vor 5 Jahren
- Abrufe
Transkript
1 Latency Hiding in Tree Lookups using Out Of Order Execution Lukas Karnowski 21. November 2017 Zusammenfassung Moderne Prozessoren beschleunigen die Ausführung, indem sie Out-Of- Order-Execution verwenden. Werden Programme auf dieses Konzept optimiert, so ist eine deutliche Geschwindigkeitszuname zu verzeichnen. Diese Arbeit wendet die Optimierungen auf den Lookup in einem Adaptive-Radix-Tree an und ist so in der Lage, in bestimmten Fällen, die Anzahl an Lookups pro Sekunde zu verdoppeln. 1 Einleitung Die Entwicklung von Prozessoren lässt sich mit Moore s Law beschreiben. Dies besagt, dass sich die Komplexität von integrierten Schaltkreisen alle 18 Monate verdoppelt. Damit einhergehend wurde früher vermutet, dass sich ebenfalls die Taktrate neuer Prozessoren regelmäßig verdoppelt, was eine Verdoppelung der Ausführungszeit zur Folge hätte. Die Realität heute zeigt jedoch, dass sich die Taktfrequenz moderner Prozessoren nicht mehr signifikant steigt. Warum also lässt sich Moore s Law heutzutage noch anwenden? Dies lässt sich damit erklären, dass neben der Taktfrequenz auch einige andere Mechanismen eingeführt worden sind, die Ausführungsgeschwindigkeit zu erhöhen. Darunter fällt unter anderem Caching und Out-Of-Order-Execution. Ersteres verbessert die Zugriffszeit auf häufig verwendete Bereiche im Hauptspeicher, letzteres erlaubt es, Instruktionen außerhalb ihrer Reihenfolge im Assembler Code auszuführen. Diese Arbeit präsentiert einen verbesserten Lookup-Algorithmus für den Adaptive- Radix-Tree, einer Hauptspeicherindexstruktur. Dieser Algorithmus ist speziell auf Out-Of-Order-Execution und Caching ausgelegt. Dafür wird in Abschnitt 2 zunächst Hintergrundwissen über die verwendete Datenstruktur gegeben, sowie Out- Of-Order-Execution erläutert. Anschließend wird in Abschnitt 3 die Implementierung erläutert und die Ergebnisse diskutiert. Schließlich wird in Abschnitt 4 die Technik bewertet und mögliche zukünftige Arbeit beschrieben. 2 Hintergrund In diesem Abschnitt soll dem Leser ein Überblick über die verwendeten Konzepte gegeben werden. Daher erläutern die beiden folgenden Unterkapitel einerseits die verwendete Baumstruktur Adaptive-Radix-Tree (ART), und andererseits das Konzept der Out-Of-Order-Execution (OOOE), mit der moderne Prozessoren rechenintensive Operationen zurückstellen können. 1
2 2.1 Der Adaptive-Radix-Tree Der ART (Adaptive-Radix-Tree) ist eine Baumstruktur die speziell für effiziente Indexierung in Hauptspeicherdatenbanksystemen genutzt werden kann. Dabei verhält sie sich genau wie ein normaler Radix-Baum (manchmal auch Trie oder Präfixbaum genannt), bei denen in jedem Knoten der Präfix der darunterliegenden Schlüssel gespeichert wird. Nutzt man dies zur Speicherung von Datentypen fester Größe, so hat der daraus entstehende Radix-Baum immer eine konstante Höhe. Zum Beispiel könnte man bei der Speicherung von 64-Bit Schlüsseln jeden Schlüssel in 8 Bytes zerlegen, sodass jede Baumebene genau einem Byte entspricht und der daraus entstehende Baum genau eine Höhe von 8 besitzt (ohne die Blattknoten). Der ART optimiert dieses Konzept indem er die einzelnen Knoten innerhalb des Baumes dynamisch vergrößert beziehungsweise verkleinert und so seine sehr effiziente Datenspeicherung ermöglicht. Des Weiteren ist der ART in der Lage, Pfade zu komprimieren und so Lookup-Zeiten zu verringern. Diese Konzepte heißen Path- Compression und Lazy-Expansion [1], sind aber für diese Arbeit nicht relevant. Ein Beispiel für einen einfachen ART ist in Abbildung 1 gezeigt. Es werden 3-stellige Wörter gespeichert. Jede Baumebene entspricht einem Zeichen und jeder Knoten ist für alle Wörter zuständig, die den Präfix besitzen, der innerhalb des Knotens notiert ist. So besitzt zum Beispiel der Wurzelknoten den Präfix des leeren Wortes ɛ, womit alle gespeicherten Wörter unterhalb dieses Knotens liegen. ɛ 1. Stelle A 2. Stelle AN AR 3. Stelle AND ANT ANY ARE ART Blätter Abbildung 1: Beispielhafter ART. Speicherung von 3-stelligen Wörtern (nach [1]) Knotentypen Wie bereits genannt passt der ART die Knotengröße an die aktuelle Datenauslastung an. Dies geschieht mit Hilfe verschiedener Knotentypen, die jeweils eine feste Anzahl an Knoten beinhalten können. Insgesamt besitzt der ART vier solcher Knotentypen. Dabei wird davon ausgegangen dass ein Teilschlüssel genau ein Byte groß ist. Node4: Zuerst jeweils ein Byte für die 4 Teilschlüssel und anschließend 4 Pointer auf die nächsten Knoten. Node16: (Gleicher Aufbau wie Node4) Zuerst jeweils ein Byte für die 16 Teilschlüssel und anschließend 16 Pointer auf die nächsten Knoten. Node48: Zuerst ein Byte Array der Größe 256 und anschließend 48 Pointer auf die nächsten Knoten. Der Inhalt des Byte Arrays ist der Offset innerhalb der Pointer. 2
3 Node256: Array von 256 Pointer auf die nächsten Knoten. Für diese Arbeit ist es nicht relevant wie jeweils der Kindknoten aus den einzelnen Knotentypen extrahiert werden kann. Die Funktion dafür hat den Namen findchild() und wird genauer in [1] erläutert Lookup Der Lookup im ART lässt sich nun wie folgt durchführen: In jedem Schritt wird im gerade traversierten Node ein Lookup nach dem aktuellen Teilschlüssel durchgeführt. Dies übernimmt die Funktion findchild() und gibt dabei den nächsten Knoten zurück. Damit startet der Algorithmus wieder erneut. Eine vereinfachte, rekursive Version in Pseudo-Code zeigt Abbildung 2. 1 lookup ( node, key, depth ) : 2 i f node == NULL 3 r e t u r n NULL 4 i f i s L e a f ( node ) 5 i f l e a f M a t c h e s ( node, key, depth ) 6 r e t u r n node 7 r e t u r n NULL 8 //... 9 next = f i n d C h i l d ( node, key [ depth ] ) 10 r e t u r n lookup ( next, key, depth+1) Abbildung 2: Vereinfachter Lookup Algorithmus im ART (nach [1]) Anhand dieses Lookup-Algorithmus wird in Abschnitt 3 eine effizientere Version präsentiert, der die Out-Of-Order Fähigkeiten des Prozessors ausnutzt. Um ein besseres Verständnis für Out-Of-Order-Execution zu bekommen, wird im folgenden Unterabschnitt genauer darauf eingegangen. 2.2 Out-Of-Order-Execution Moderne Prozessoren sind in der Lage, Instruktionen in anderer Reihenfolge durchzuführen, als sie im Assembler Code angegeben wurden. Dabei stellt der Prozessor sicher, dass es nach außen so wirkt, als wäre alles in der korrekten Reihenfolge durchgeführt worden. Intern schafft es der Prozessor so, die Ausführungszeit von Code zu reduzieren. Ein einfaches Beispiel ist der Ausdruck (a+b)+(c+d). Der Prozessor kann bereits beginnen (c+d) zu berechnen, bevor (a+b) fertig berechnet wurde, da keine Abhängigkeit zwischen dem ersten und dem zweiten Ausdruck besteht [3]. Das dabei verwendete Konzept nennt sich Out-Of-Order-Execution (OOOE). Bei solchen einfachen arithmetischen Operationen fällt der Geschwindigkeitsunterschied kaum auf. Betrachtet man aber einen Hauptspeicherzugriff, so kann dieser deutlich länger dauern, wenn das adressierte Datum nicht in einem der Caches liegt. Schafft man es also, zwei Hauptspeicherzugriffe mit Cache-Miss hintereinander auszuführen, so müsste der Prozessor in der Lage sein, diese parallel durchzuführen. Um diese Theorie zu verifizieren, wird im folgenden Unterabschnitt ein Experiment mit verketteten Listen präsentiert Linked-List-Experiment In diesem Experiment wird eine einfache verkettete Liste (Linked-List) traversiert. Ein Node ist dabei einfach ein Datentyp, der einen Pointer auf das nächste Element beinhaltet und einige Daten. Die Anzahl der Daten ist gerade so gewählt, 3
4 dass ein Node genau eine Cache Line von 64 Byte belegt. In Abbildung 3 ist der entsprechende Code gezeigt. Die Liste wird auf dem Heap alloziert und die Reihenfolge der einzelnen Nodes zufällig festgelegt. Die Anzahl an Elementen ist von der Größenordnung 2 20, sodass möglichst nur ein kleiner Teil in den Cache passt. 1 s t r u c t Node { 2 Node next ; 3 std : : uint8_t data [ 5 6 ] ; 4 } ; 5 //... 6 f o r ( Node c u r r = l i s t ; c u r r!= n u l l p t r ; c u r r = curr >next ) { 7 // Empty body 8 } Abbildung 3: Iteration über eine einfach verkettete Liste. Der Prozessor sollte bei diesem Code nicht in der Lage sein mittels OOOE Speicherzugriffe parallel durchzuführen, da in jeder Schleifeniteration das Ergebnis der vorherigen Iteration benötigt wird. Verifizieren lässt sich dies, indem man den Ausschnitt des Assembler-Codes in Abbildung 4 betrachtet. 1 0 x3590 : mov (%rax ),% rax 2 0 x3593 : t e s t %rax,% rax 3 0 x3596 : j n e 0 x3590 Abbildung 4: Assembler Code zur Iteration über eine einfach verkettete Liste. Man kann gut erkennen, dass eine Abhängigkeit zwischen der ersten Instruktion (0x3590) und der zweiten (0x3593) besteht, da zunächst das Ergebnis des Speicherzugriff in das Register %rax geschrieben wird und anschließend mit diesem Ergebnis die test-instruktion durchgeführt wird. Diese Abhängigkeit zwischen den ersten beiden Instruktionen nennt sich RAW, was für Read After Write steht [4]. Die erste Instruktion muss also beendet werden, bevor die zweite ausgeführt werden kann. Um nun dem Prozessor die Möglichkeit zu geben, OOOE einzusetzen, sollen nun zwei Listen parallel iteriert werden. Der Code dafür ist in Abbildung 5 gezeigt. Wichtig hierbei ist, dass beide Listen nur noch jeweils halb so viele Elemente besitzen (im Vergleich zum ersten Beispiel aus Abbildung 3). In der Summe werden aber immer noch gleich viele Elemente besucht, weshalb man die Ausführungszeit beider Experimente miteinander vergleichen kann. Der Assembler Code dazu befindet sich in Abbildung 6. 1 f o r ( Node c u r r 1 = l i s t 1, c u r r 2 = l i s t 2 ; 2 c u r r 1!= n u l l p t r && c u r r 2!= n u l l p t r ; 3 c u r r 1 = curr1 >next, c u r r 2 = curr2 >next ) { 4 // Empty body 5 } Abbildung 5: Iteration über zwei einfach verkettete Listen. 4
5 1 0 x3600 : mov (%rax ),% rax 2 0 x3603 : mov (%rdx ),%rdx 3 0 x3606 : t e s t %rax,% rax 4 0 x3609 : j e 0 x x360b : t e s t %rdx,%rdx 6 0 x360e : j n e 0 x x3610 :... Abbildung 6: Assembler Code zur Iteration über zwei einfach verketteten Listen. Anhand des Assembler Codes lässt sich erkennen, dass nun keine Abhängigkeit mehr zwischen den ersten beiden Instruktionen besteht, da sie jeweils auf unterschiedliche Register zugreifen. Daher ist der Prozessor in der Lage, beide Instruktionen parallel auszuführen. Um zu erkennen, welchen Geschwindigkeitsunterschied dies ausmacht, wurde der obige Code mit Zeitmessungen versehen, deren Ergebnisse in Abbildung 8 zu sehen sind. Die X-Achse gibt dabei die Anzahl an parallel iterierten Listen an, die Y-Achse die Anzahl an besuchten Listeneinträgen pro Mikrosekunde. Die technischen Daten des Rechners, auf dem die Experimente durchgeführt worden sind, werden in Abbildung 7 gezeigt. Prozessor Mikroarchitektur L1-Cache L2-Cache L3-Cache Intel R Core TM i5-5200u Broadwell 32KiB 256KiB 3 MiB Abbildung 7: Technische Daten des Rechners, auf dem die Experimente ausgeführt wurden Besuchte Listeneinträge pro µs Anzahl an Listen Abbildung 8: Ergebnisse des Linked-List Experiments. 5
6 Es lässt sich gut erkennen, dass die Anzahl an besuchten Listeneinträgen mit steigender Anzahl an Listen steigt, die Zuname jedoch mit der Zeit immer geringer wird, bis schließlich kaum noch eine Zuname zu verzeichnen ist. Ein ähnliches Bild zeichnet sich ab, wenn man dasselbe Experiment auf anderen Prozessoren laufen lässt. So zeigt Abbildung 9 die Messungen von einem Intel Skylake und Sandy Bridge Prozessor Skylake Sandy Bridge Besuchte Listeneinträge pro µs Anzahl an Listen Abbildung 9: Weitere Messungen auf Intel Skylake und Sandy Bridge Prozessoren. Interessant hierbei zu sehen ist, dass der neuere Skylake Prozessor in der Lage ist, deutlich mehr zu parallelisieren und so die Geschwindigkeit fast verzehnfacht. Der ältere Sandy Bridge Prozessor hingegen ist nur in der Lage bis zu fünf Listen gleichzeitig zu iterieren, bis keine Geschwindigkeitszuname mehr zu verzeichnen ist. Dies zeigt sehr schön die bereits in der Einleitung angesprochene Entwicklung modernerer Prozessoren, nicht mehr die Taktfrequenz zu erhöhen, sondern anderweitig die Ausführung zu beschleunigen - in diesem Fall durch Out-Of-Order-Execution Evaluation Im vorangegangenen Unterabschnitt wurde gezeigt, dass moderne Prozessoren sehr gut Speicherzugriffe parallelisieren können. Auf den für die Experimente verwendeten Rechnern konnte die Geschwindigkeit fast verzehnfacht werden. Beachten muss man allerdings, dass die Experimente unter optimalen Bedingungen ausgeführt worden sind. Der verwendete Code wurde ausschließlich zum Test der OOOE verwendet, weshalb der Overhead durch mögliche andere Operationen nicht beachtet wurde. Nutzt man dasselbe Konzept im Kontext von Indexstrukturen, so ist zu erwarten, dass die Geschwindigkeit nicht derartig erhöht werden kann. Um dies 6
7 zu verifizieren, wird im folgenden Abschnitt die Implementierung des genannten Konzepts der OOOE anhand des Lookups im ART aufgezeigt. 3 Implementierung im Adaptive-Radix-Tree In diesem Abschnitt wird die Optimierung auf OOOE anhand des ART beschrieben. Dabei wird zunächst die Implementierung im ART erläutert, und anschließend Messergebnisse mit den durchgeführten Testfällen präsentiert. Abschließend werden diese Ergebnisse bezüglich ihrer Praxistauglichkeit diskutiert. 3.1 Die Implementierung In diesem Abschnitt wird die Implementierung im ART präsentiert. Die Technik nennt sich Group-Prefetching [2] und führt mehrere Lookups zur gleichen Zeit aus. In Unterunterabschnitt wurde bereits der Lookup Algorithmus für den ART Baum erläutert. Das Problem daran: Der Zustand eines Lookups wird dabei innerhalb der Ausführungseinheit der Funktion gespeichert, mehrere Lookups gleichzeitig sind damit nicht möglich. Um dieses Problem zu umgehen, wird für Group-Prefetching eine neue Datenstruktur eingeführt, die den Zustand eines einzelnen Lookups speichert. Die Deklaration dieser Datenstruktur befindet sich in Abbildung s t r u c t GPState { 2 std : : uint8_t key [ 8 ] ; 3 Node node ; 4 5 unsigned depth = 0 ; 6 bool s k i p p e d P r e f i x = f a l s e ; 7 bool f i n i s h e d = f a l s e ; 8 9 GPState ( ) : node ( n u l l p t r ) {} 10 GPState ( Node node ) : node ( node ) {} 11 } ; Abbildung 10: Datenstruktur zur Speicherung des Zustand eines Lookups. Die Variablen im Zustand gleichen denen aus dem ursprünglichen Lookup Algorithmus. Dabei ist key der Lookup-Schlüssel (ändert sich nach Initialisierung nicht mehr), node der Aktuelle Knoten im Lookup, depth wie weit der Lookup bereits fortgeschritten ist, skippedprefix irrelevant für diese Arbeit und finished ob der Lookup abgeschlossen wurde. Der eigentliche Lookup-Algorithmus arbeitet mit diesen Zuständen, indem er einen std::vector mit Zuständen erhält, und in jedem Durchlauf einer Schleife jeden der Lookups um einen Schritt voranschreiten lässt. Der Algorithmus ist in Abbildung 11 gezeigt. 7
8 1 void lookupgp ( std : : vector <GPState> &s t a t e s ) { 2 std : : s i z e _ t lookupcount = s t a t e s. s i z e ( ) ; 3 std : : s i z e _ t f i n i s h e d C o u n t = 0 ; 4 5 w h i l e ( f i n i s h e d C o u n t < lookupcount ) { 6 f o r ( auto &s t a t e : s t a t e s ) { 7 i f ( s t a t e. f i n i s h e d ) { 8 c o n t i n u e ; 9 } 10 // i f ( s t a t e. node == NULL i s L e a f ( s t a t e. node ) ) { 12 s t a t e. f i n i s h e d = t r u e ; 13 ++f i n i s h e d C o u n t ; 14 c o n t i n u e ; 15 } 16 // s t a t e. node = f i n d C h i l d ( s t a t e. node, s t a t e. key [ s t a t e. depth ] ) ; 18 s t a t e. depth++; 19 } 20 } 21 } Abbildung 11: Gekürzter Group-Prefetching Lookup-Algorithmus. Die Anzahl an gleichzeitigen Lookups - Group-Size gennannt - wird durch die Anzahl der Elemente im Zustandsvektor states festgelegt. Mit dieser Kenngröße kann, wie im Experiment mit verketteten Listen, der Algorithmus an die Hardware angepasst werden. Um herauszufinden, welche Auswirkung die Implementierung auf die Ausführungszeit hat, wird im folgenden Abschnitt auf die Messergebnisse eingegangen. 3.2 Messergebnisse Um ein möglichst reales Szenario zu simulieren, wird der Test anhand eines Joins im TPC-H Schema durchgeführt 1. Konkret wurde ein Join auf den beiden Tabellen mit den meisten Einträgen durchgeführt, also ein Join zwischen lineitem und orders. In relationaler Algebra gesprochen wird also der natürliche Join lineitem orders durchgeführt. Dabei hat lineitem einen Fremdschlüssel auf die Tabelle orders, womit modelliert wird, welche Gegenstände in einer Bestellung enthalten sind. Für die Mächtigkeit der beiden beiden Tabellen gilt lineitem und orders = 1, Beim Join wird über die Einträge in lineitem iteriert und für jeden Fremdschlüssel auf orders ein Lookup im ART durchgeführt. Zunächst werden die Schlüssel in sortierter, aufsteigender Reihenfolge iteriert. Die Ergebnisse dieses Experiments befinden sich in Abbildung 12. Die X-Achse gibt dabei die Group-Size an, und die Y-Achse wie viele Lookups der Join pro Mikrosekunde durchführen konnte. Die rote Linie markiert die Lookups pro Mikrosekunde, die mit dem normalen Lookup erreicht werden können
9 Lookups pro µs Regulär Group-Size Abbildung 12: TPC-H Join in sortierter Reihenfolge. Es lässt sich erkennen dass die Group-Prefetching Methode ab einer Group-Size von 3 bessere Ergebnisse erzielt als ein normaler Lookup, allerdings auch, dass ab einer Group-Size von 10 die Verbesserung stagniert und sogar weniger Lookups durchgeführt werden können. In diesem Fall wurde der Join in sortierter, aufsteigender Reihenfolge durchgeführt. Dies ist in einer realen Datenbank nicht immer möglich, da die Daten nicht immer in der entsprechenden Reihenfolge vorliegen. Deshalb wurden für die Ergebnisse in Abbildung 13 die Tupel vorher randomisiert Lookups pro µs Regulär Group-Size Abbildung 13: TPC-H Join in unsortierter Reihenfolge. 9
10 Interessanterweise ist in diesem Fall eine Verbesserung bis zu einer Group-Size von 2 7 = 128 erkennen, weshalb auch eine logarithmische X-Achse für die Grafik verwendet wurde. Mit der Group-Prefetching Methode lassen sich also mehr als doppelt so viele Lookups pro Sekunde durchführen, insofern der Join in unsortierter Reihenfolge durchgeführt wird. Im folgenden Kapitel wird nun diskutiert, ob die Methode des Group-Prefetching für die Praxis relevant ist. 3.3 Evaluation Mit der Group-Prefetching Methode lassen sich sehr gute Ergebnisse erzielen, wenn auch nicht so gute wie im Linked-List Experiment gezeigt. Dabei konnte fast eine Verzehnfachung an Lookups pro Sekunde erreicht werden, währen im Rahmen des ART nur eine Verdoppelung der Lookups festgestellt werden konnte. Nichtsdestotrotz ist es bemerkenswert, dass eine einfache Optimierung des Lookup-Algorithmus derartige Verbesserungen in der Geschwindigkeit hervorrufen kann. Die Tatsache dass es nicht an das LinkedList-Experiment herankommt, lässt sich dadurch erklären, dass neben dem eigentlichen Speicherzugriff weitaus mehr Code benötigt wird, um einen Lookup durchzuführen. Dieser Overhead darf also nicht vernachlässigt werden. Die Frage lautet nun, wie man automatisiert feststellen kann, in welchem Fall der normale Lookup sinnvoller ist, und in welchem Fall die Group-Prefetching Methode. Wie man gesehen hat ist im Rahmen von Joins immer dann eine Verbesserung zu verzeichnen, wenn die Group-Size mindestens einen Wert von 3 annimmt. Es ist also immer sinnvoll für einen Join die Group-Prefetching Methode zu verwenden, jedoch nicht immer klar, welchen genauen Wert die Group-Size annehmen soll. Dies hängt von der Reihenfolge ab, in der über die Join-Schlüssel iteriert werden kann. Sind diese sortiert, so wäre eine Group-Size von 9 optimal, sind die Schlüssel unsortiert, so würde etwas in der Größenordnung 2 7 die Anzahl an Lookups maximieren. Diese konkreten Werte hängen von der Hardware ab, auf der die Lookups ausgeführt werden. Es ist also nicht klar ob auf einem anderen, moderneren Prozessor die exakt gleichen Ergebnisse erzielt werden. Um also den optimalen Wert zu bestimmen, sollte das obige Experiment auf der entsprechenden Hardware durchgeführt werden. Im Allgemeinen lässt sich festhalten, dass die Group-Prefetching Methode immer dann vorzuziehen ist, wenn schon im Voraus die Lookup-Schlüssel bekannt sind. Als weniger sinnvoll stellt sich die Methode dann heraus, wenn nur einzelne Schlüssel nachgeschlagen werden müssen, wie es beispielsweise bei einfachen SQL Abfragen der Form SELECT * FROM tabelle WHERE attribut = Wert der Fall ist. 4 Fazit und zukünftige Arbeit Es ist sehr beeindruckend welchen Effekt die Optimierung auf OOOE haben kann. Deshalb ist dieses Thema durchaus relevant für zukünftige Arbeit, wie zum Beispiel die Implementierung der Technik an anderen Datenstrukturen. Des Weiteren wäre es interessant welchen Effekt Asynchronous-Memory-Access-Chaining [2] auf die Implementierung im ART hat, bei dem anstatt auf alle Lookups in einer Gruppe zu warten, abgeschlossene Lookups durch neue ersetzt werden. Ferner sollte untersucht werden, warum genau für sortierte Schlüssel bei einem Join eine geringere Group-Size ausreicht, während bei unsortierten Schlüsseln größere Werte die Geschwindigkeit optimieren. Abschließend möchte ich mich bei meinem Seminarleiter Maximilian Schüle bedanken, der mich auf dieses Thema aufmerksam gemacht hat, sowie bei Timo Kersten für die fachliche Betreuung dieser Arbeit. 10
11 Literatur [1] Viktor Leis, Alfons Kemper, Thomas Neumann. The Adaptive Radix Tree: ARTful Indexing for Main-Memory Databases [2] Onur Kocberber, Babak Falsafi, Boris Grot. Asynchronous Memory Access Chaining [3] Agner Fog. Optimizing software in C [4] Andrew S. Tanenbaum, Todd Austin. Structured Computer Organization. Pearson,
Algorithmen & Datenstrukturen Midterm Test 2
Algorithmen & Datenstrukturen Midterm Test 2 Martin Avanzini Thomas Bauereiß Herbert Jordan René Thiemann
Dynamische Datenstrukturen
Dynamische Datenstrukturen B-Bäume größere Datenmengen verwalten Extern speichern Art der Speicherung berücksichtigen sonst kein optimaler Datenzugriff möglich Art der Speicherung großer Datenmengen Magnetplatten
Übersicht. Datenstrukturen und Algorithmen. Übersicht. Heaps. Vorlesung 8: Heapsort (K6) Joost-Pieter Katoen. 7. Mai 2015
Datenstrukturen und Algorithmen Vorlesung 8: (K6) 1 Joost-Pieter Katoen Lehrstuhl für Informatik Software Modeling and Verification Group http://moves.rwth-aachen.de/teaching/ss-15/dsal/ 7. Mai 015 3 Joost-Pieter
Optimierungen der Lattice Boltzmann Methode auf x86-64 basierten Architekturen
Optimierungen der Lattice Boltzmann Methode auf x86-64 basierten Architekturen J. Treibig, S. Hausmann, U. Ruede 15.09.05 / ASIM 2005 - Erlangen Gliederung 1 Einleitung Motivation Grundlagen 2 Optimierungen
Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1
Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1 Aufgabe 1. / 16 P Instruktionen: 1) In dieser Aufgabe sollen Sie nur die Ergebnisse angeben. Diese können Sie direkt bei den Aufgaben notieren. 2) Sofern
Natürliche Bäume. (Algorithmen und Datenstrukturen I) Prof. Dr. Oliver Braun. Letzte Änderung: :16. Natürliche Bäume 1/16
Natürliche Bäume (Algorithmen und Datenstrukturen I) Prof. Dr. Oliver Braun Letzte Änderung: 18.03.2018 18:16 Natürliche Bäume 1/16 Bäume Begriffe (1/2) Bäume sind verallgemeinerte Listenstrukturen ein
Kapitel 1 Parallele Modelle Wie rechnet man parallel?
PRAM- PRAM- DAG- R UND R Coles und Kapitel 1 Wie rechnet man parallel? Vorlesung Theorie Paralleler und Verteilter Systeme vom 11. April 2008 der Das DAG- Das PRAM- Das werkmodell Institut für Theoretische
elementare Datenstrukturen
elementare Datenstrukturen Wie die Daten das Laufen lernten Andreas Ferber af@myipv6.de elementare Datenstrukturen p./40 KISS elementare Datenstrukturen p./40 KISS (Keep It Simple, Stupid) Immer die einfachste
Datenstrukturen. Mariano Zelke. Sommersemester 2012
Datenstrukturen Mariano Zelke Sommersemester 2012 Kapitel 3: Elementare Datenstrukturen Mariano Zelke Datenstrukturen 2/18 Einfach verkettete Listen Mariano Zelke Datenstrukturen 3/18 Eine Zeiger-Implementierung
Grundlagen der Künstlichen Intelligenz
Grundlagen der Künstlichen Intelligenz 6. Klassische Suche: Datenstrukturen für Suchalgorithmen Malte Helmert Universität Basel 7. März 2014 Klassische Suche: Überblick Kapitelüberblick klassische Suche:
Wie groß ist die Page Table?
Wie groß ist die Page Table? Im vorigen (typischen) Beispiel verwenden wir 20 Bits zum indizieren der Page Table. Typischerweise spendiert man 32 Bits pro Tabellen Zeile (im Vorigen Beispiel brauchten
Algorithmen und Datenstrukturen. Bäume. M. Herpers, Y. Jung, P. Klingebiel
Algorithmen und Datenstrukturen Bäume M. Herpers, Y. Jung, P. Klingebiel 1 Lernziele Baumstrukturen und Ihre Verwendung kennen Grundbegriffe zu Bäumen anwenden können Baumstruktur in C anlegen können Suchbäume
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 17/18. Kapitel 14. Bäume. Bäume 1
Kapitel 14 Bäume Bäume 1 Ziele Den Begriff des Baums in der Informatik kennenlernen Bäume als verkettete Datenstruktur repräsentieren können Rekursive Funktionen auf Bäumen verstehen und schreiben können
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 13. Bäume. Bäume 1
Kapitel 13 Bäume Bäume 1 Ziele Den Begriff des Baums in der Informatik kennenlernen Bäume als verkettete Datenstruktur repräsentieren können Rekursive Funktionen auf Bäumen verstehen und schreiben können
Wissensentdeckung in Datenbanken
Wissensentdeckung in Datenbanken SQL, Häufige Mengen Nico Piatkowski und Uwe Ligges 11.05.2017 1 von 16 Überblick Was bisher geschah... Modellklassen Verlustfunktionen Numerische Optimierung Regularisierung
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1
Kapitel 14 Bäume Bäume 1 Ziele Den Begriff des Baums in der Informatik kennenlernen Bäume als verkettete Datenstruktur repräsentieren können Rekursive Funktionen auf Bäumen verstehen und schreiben können
Universität Augsburg, Institut für Informatik Wintersemester 2008/2009 Prof. Dr. W. Kießling 03. Februar Semesterklausur
Universität Augsburg, Institut für Informatik Wintersemester 2008/2009 Prof. Dr. W. Kießling 03. Februar 2009 Dr. A. Huhn, M. Endres, T. Preisinger Datenbanksysteme I Semesterklausur Hinweise: Die Bearbeitungszeit
In heutigen Computern findet man schnellen/teuren als auch langsamen/billigen Speicher
Speicherhierarchie In heutigen Computern findet man schnellen/teuren als auch langsamen/billigen Speicher Register Speicherzellen, direkt mit der Recheneinheit verbunden Cache-Speicher Puffer-Speicher
Tutoraufgabe 1 (SCC):
Prof. aa Dr. E. Ábrahám Datenstrukturen und Algorithmen SS F. Corzilius, S. Schupp, T. Ströder Allgemeine Hinweise: Die Hausaufgaben sollen in Gruppen von je bis Studierenden aus der gleichen Kleingruppenübung
Datenstrukturen. einfach verkettete Liste
einfach verkettete Liste speichert Daten in einer linearen Liste, in der jedes Element auf das nächste Element zeigt Jeder Knoten der Liste enthält beliebige Daten und einen Zeiger auf den nächsten Knoten
7. Dynamische Datenstrukturen Bäume. Informatik II für Verkehrsingenieure
7. Dynamische Datenstrukturen Bäume Informatik II für Verkehrsingenieure Übersicht dynamische Datenstrukturen Wozu? Oft weiß man nicht von Beginn an, wieviele Elemente in einer Datenstruktur untergebracht
TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.
TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D. Blatt Nr. 07 Übung zur Vorlesung Einsatz und Realisierung von Datenbanksystemen im SoSe16 Moritz Kaufmann
Kapitel 12: Induktive
Kapitel 12: Induktive Datenstrukturen Felix Freiling Lehrstuhl für Praktische Informatik 1 Universität Mannheim Vorlesung Praktische Informatik I im Herbstsemester 2009 Folien nach einer Vorlage von H.-Peter
"Organisation und Technologie von Rechensystemen 4"
Klausur OTRS-4, 29.09.2004 Seite 1 (12) INSTITUT FÜR INFORMATIK Lehrstuhl für Rechnerarchitektur (Informatik 3) Universität Erlangen-Nürnberg Martensstr. 3, 91058 Erlangen 29.09.2004 Klausur zu "Organisation
9 Minimum Spanning Trees
Im Folgenden wollen wir uns genauer mit dem Minimum Spanning Tree -Problem auseinandersetzen. 9.1 MST-Problem Gegeben ein ungerichteter Graph G = (V,E) und eine Gewichtsfunktion w w : E R Man berechne
Hauptspeicherindexstrukturen. Stefan Sprenger Semesterprojekt Verteilte Echtzeitrecherche in Genomdaten 10. November 2015
Hauptspeicherindexstrukturen Stefan Sprenger Semesterprojekt Verteilte Echtzeitrecherche in Genomdaten 10. November 2015 Agenda Einführung in Hauptspeichertechnologien Indexstrukturen in relationalen Datenbanken
Sortieren II / HeapSort Heaps
Organisatorisches VL-07: Sortieren II: HeapSort (Datenstrukturen und Algorithmen, SS 2017) Vorlesung: Gerhard Woeginger (Zimmer 4024 im E1) Email: dsal-i1@algo.rwth-aachen.de Webseite: http://algo.rwth-aachen.de/lehre/ss17/dsa.php
Technische Informatik 1 Übung 8 Instruktionsparallelität (Rechenübung) Andreas Tretter 8./9. Dezember Bitte immer eine Reihe freilassen
Technische Informatik 1 Übung 8 Instruktionsparallelität (Rechenübung) Andreas Tretter 8./9. Dezember 2016 Bitte immer eine Reihe freilassen Ziele der Übung Verschiedene Arten von Instruktionsparallelität
Row Chaining & Row Migration Alte Bekannte - immer noch aktuell! DOAG 2014 Datenbank Dierk Lenz
Row Chaining & Row Migration Alte Bekannte - immer noch aktuell! DOAG 2014 Datenbank Dierk Lenz Herrmann & Lenz Services GmbH Herrmann & Lenz Solutions GmbH Erfolgreich seit 1996 am Markt Firmensitz: Burscheid
Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8
ETH Zürich Institut für Theoretische Informatik Prof. Dr. Angelika Steger Florian Meier, Ralph Keusch HS 2017 Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8 Lösungsvorschlag zu Aufgabe 1
Zum Aufwärmen nocheinmal grundlegende Tatsachen zum Rechnen mit reelen Zahlen auf dem Computer. Das Rechnen mit Gleitkommazahlen wird durch den IEEE
Zum Aufwärmen nocheinmal grundlegende Tatsachen zum Rechnen mit reelen Zahlen auf dem Computer. Das Rechnen mit Gleitkommazahlen wird durch den IEEE 754 Standard festgelegt. Es stehen sogenannte einfach
Übungsklausur Algorithmen I
Jun.-Prof. Hofheinz, Jun.-Prof. Meyerhenke (ITI, KIT) 08.06.2015 Übungsklausur Algorithmen I Aufgabe 1. (Algorithm Engineering) Nennen Sie zwei Konzepte, die Algorithm Engineering im Gegensatz zu theoretischer
B*-BÄUME. Ein Index ist seinerseits wieder nichts anderes als eine Datei mit unpinned Records.
B*-Bäume 1 B*-BÄUME Beobachtung: Ein Index ist seinerseits wieder nichts anderes als eine Datei mit unpinned Records. Es gibt keinen Grund, warum man nicht einen Index über einem Index haben sollte, und
Prüfung A Informatik D-MATH/D-PHYS :15 14:55
Prüfung A Informatik D-MATH/D-PHYS 17. 12. 2013 13:15 14:55 Prof. Bernd Gartner Kandidat/in: Name:. Vorname:. Stud.-Nr.:. Ich bezeuge mit meiner Unterschrift, dass ich die Prufung unter regularen Bedingungen
Informatik II, SS 2014
Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 7 (21.5.2014) Binäre Suche, Hashtabellen I Algorithmen und Komplexität Abstrakte Datentypen : Dictionary Dictionary: (auch: Maps, assoziative
Algorithmen und Datenstrukturen (für ET/IT)
Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Wiederholung: Ziele der Vorlesung Wissen: Algorithmische
5.5 Prioritätswarteschlangen
5.5 Prioritätswarteschlangen LIFO- und FIFO-Warteschlangen entfernen Werte aus der Warteschlange in Abhängigkeit davon, wann sie in diese eingefügt wurden Prioritätswartschlangen interpretieren die Werte
Technische Informatik I - HS 18
Institut für Technische Informatik und Kommunikationsnetze Prof. L. Thiele Technische Informatik I - HS 18 Übung 7 Datum : 22.-23. November 2018 Pipelining Aufgabe 1: Taktrate / Latenz In dieser Aufgabe
ADS: Algorithmen und Datenstrukturen
ADS: Algorithmen und Datenstrukturen Teil X Peter F. Stadler & Konstantin Klemm Bioinformatics Group, Dept. of Computer Science & Interdisciplinary Center for Bioinformatics, University of Leipzig 13.
3.2. Divide-and-Conquer-Methoden
LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS DATABASE 3.2. Divide-and-Conquer-Methoden Divide-and-Conquer-Methoden Einfache Sortieralgorithmen reduzieren die Größe des noch
(a, b)-bäume / 1. Datenmenge ist so groß, dass sie auf der Festplatte abgespeichert werden muss.
(a, b)-bäume / 1. Szenario: Datenmenge ist so groß, dass sie auf der Festplatte abgespeichert werden muss. Konsequenz: Kommunikation zwischen Hauptspeicher und Festplatte - geschieht nicht Byte für Byte,
Klausur Algorithmen und Datenstrukturen SS August Arbeitszeit 90 min
TU Ilmenau, Fakultät für Informatik und Automatisierung FG Komplexitätstheorie und Effiziente Algorithmen Univ.-Prof. Dr. M. Dietzfelbinger, Dipl.-Ing. C. Mattern Klausur Algorithmen und Datenstrukturen
Anwendungsbeispiel MinHeap
Anwendungsbeispiel MinHeap Uns seien n ganze Zahlen gegeben und wir möchten darin die k größten Zahlen bestimmen; zudem gelten, dass n deutlich größer als k ist Wir können das Problem mit Laufzeit in O(n
B / B* - Bäume. Guido Hildebrandt Seminar Datenbanksysteme
B / B* - Bäume Guido Hildebrandt Seminar Datenbanksysteme 25.11.2010 Gliederung Einleitung Binärbaum B - Baum B* - Baum Varianten Zusammenfassung Quellen Gliederung Einleitung Binärbaum B - Baum B* - Baum
Programmieren und Problemlösen
Dennis Komm Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 27. Februar 2019 Komplexität von Algorithmen Aufgabe Primzahltest Schreibe ein Programm, das eine ganze Zahl x als Eingabe
Datenstrukturen und Algorithmen (SS 2013)
Datenstrukturen und Algorithmen (SS 2013) Präsenzübung Musterlösung Dienstag, 28.05.2013 Aufgabe 1 (Allgemeine Fragen [20 Punkte]) 1. Tragen Sie in der folgenden Tabelle die Best-, Average- und Worst-Case-
Tutoraufgabe 1 (Starke Zusammenhangskomponenten):
für Informatik Prof. aa Dr. Ir. Joost-Pieter Katoen Allgemeine Hinweise: Datenstrukturen und Algorithmen SS1 Übungsblatt (Abgabe 4.0.01) Christian Dehnert, Friedrich Gretz, Benjamin Kaminski, Thomas Ströder
Grundzüge DS & Alg (WS14/15) Lösungsvorschlag zu Aufgabenblatt 3. Aufgabe 1. (a) nicht-heap (b) Heap 25. (c) Beinahe-Heap 9.
Lösungsvorschlag zu Aufgabenblatt Aufgabe 1 (a) nicht-heap 1 1 5 5 1 1 (b) Heap 5 1 1 14 5 10 4 (c) Beinahe-Heap 1 1 4 1 10 Heapify 1. Iteration. Iteration. Iteration 1 1 1 1 1 1 10 4 1 10 4 1 10 4 1 1
Advanced Programming in C
Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer
Algorithmen und Datenstrukturen
Technische Universität München SoSe 2017 Fakultät für Informatik, I-16 Lösungsblatt 4 Dr. Stefanie Demirci 31. Mai 2017 Rüdiger Göbl, Mai Bui Algorithmen und Datenstrukturen Aufgabe 1 Komplexität Berechnung
Probeklausur Name: (c)
Einführung in die Praktische Informatik 30.1.2013 Probeklausur Name: Teil I: Datentypen (20 Punkte) Lösen sie die Probleme, indem sie die korrekten Lösungen ankreuzen bzw. in die vorgesehenen Freiräume
Kapitel 4: Bäume i. 1. Einleitung. 2. Ein Datenmodell für Listen. 3. Doppelt-verkettete Listen. 4. Bäume. 5. Das Collections-Framework in Java
Kapitel 4: Bäume i 1. Einleitung 2. Ein Datenmodell für Listen 3. Doppelt-verkettete Listen 4. Bäume 5. Das Collections-Framework in Java Prof. Dr. Peer Kröger: EiP (WS 18/19) Teil 11: Datenstrukturen
Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser
Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Wiederholung: Ziele der Vorlesung Wissen: Algorithmische
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens aw@awilkens.com Überblick Grundlagen Definitionen Eigene Entwicklungen Datenstrukturen Elementare Datentypen Abstrakte Datentypen Elementare
Es sei a 2 und b 2a 1. Definition Ein (a, b)-baum ist ein Baum mit folgenden Eigenschaften:
Binäre Suchbäume (a, b)-bäume (Folie 173, Seite 56 im Skript) Es sei a 2 und b 2a 1. Definition Ein (a, b)-baum ist ein Baum mit folgenden Eigenschaften: 1 Jeder Knoten hat höchstens b Kinder. 2 Jeder
Datenstrukturen. Ziele
Datenstrukturen Ziele Nutzen von Datenstrukturen Funktionsweise verstehen Eigenen Datenstrukturen bauen Vordefinierte Datenstrukturen kennen Hiflsmethoden komplexer Datenstrukten kennen Datenstrukturen
Datenpfaderweiterung Der Single Cycle Datenpfad des MIPS Prozessors soll um die Instruktion min $t0, $t1, $t2 erweitert werden, welche den kleineren
Datenpfaderweiterung Der Single Cycle Datenpfad des MIPS Prozessors soll um die Instruktion min $t0, $t1, $t2 erweitert werden, welche den kleineren der beiden Registerwerte $t1 und $t2 in einem Zielregister
Algorithmen und Datenstrukturen
Universität Innsbruck Institut für Informatik Zweite Prüfung 16. Oktober 2008 Algorithmen und Datenstrukturen Name: Matrikelnr: Die Prüfung besteht aus 8 Aufgaben. Die verfügbaren Punkte für jede Aufgabe
, 2014W Übungsgruppen: Mo., Mi.,
VU Technische Grundlagen der Informatik Übung 7: Speichermanagement 183.579, 2014W Übungsgruppen: Mo., 12.01. Mi., 14.01.2015 Aufgabe 1: Cache-Adressierung Ein Prozessor mit einer Adresslänge von 20 Bit
Teilprüfung Software- und Internettechnologie Programmierkurs 2 Wintersemester 2004/2005
Universität Mannheim Fakultät für Mathematik und Informatik Lehrstuhl für Praktische Informatik IV Prof. Dr. Wolfgang Effelsberg Teilprüfung Software- und Internettechnologie Programmierkurs 2 Wintersemester
One of the few resources increasing faster than the speed of computer hardware is the amount of data to be processed. Bin Hu
Bin Hu Algorithmen und Datenstrukturen 2 Arbeitsbereich fr Algorithmen und Datenstrukturen Institut fr Computergraphik und Algorithmen Technische Universität Wien One of the few resources increasing faster
Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen
Kapitel 10 Komplexität von Algorithmen und Sortieralgorithmen Arrays 1 Ziele Komplexität von Algorithmen bestimmen können (in Bezug auf Laufzeit und auf Speicherplatzbedarf) Sortieralgorithmen kennenlernen:
Kapitel Andere dynamische Datenstrukturen
Institute of Operating Systems and Computer Networks Algorithms Group Kapitel 4.8-4.11 Andere dynamische Datenstrukturen Algorithmen und Datenstrukturen Wintersemester 2017/2018 Vorlesung#13, 12.12.2017
Datenstrukturen & Algorithmen Lösungen zu Blatt 11 FS 14
Eidgenössische Technische Hochschule Zürich Ecole polytechnique fédérale de Zurich Politecnico federale di Zurigo Federal Institute of Technology at Zurich Institut für Theoretische Informatik 14. Mai
Klausur Datenbanken Wintersemester 2009/2010 Prof. Dr. Wolfgang May 2. Februar 2010, Uhr Bearbeitungszeit: 90 Minuten
Klausur Datenbanken Wintersemester 2009/2010 Prof. Dr. Wolfgang May 2. Februar 2010, 14-16 Uhr Bearbeitungszeit: 90 Minuten Vorname: Nachname: Matrikelnummer: Studiengang: Bei der Klausur sind keine Hilfsmittel
Übung Praktische Informatik II
Übung Praktische Informatik II FSS 2009 Benjamin Guthier Lehrstuhl für Praktische Informatik IV Universität Mannheim guthier@pi4.informatik.uni-mannheim.de 22.05.09 11-1 Heutige große Übung Ankündigung
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens aw@awilkens.com Elementare Datenstrukturen Array Linked List Stack Queue Tree (Feld) (Verkettete Liste) (Stapel) (Warteschlange) (Baum) Einschub:
Fragenkatalog 1. Kurseinheit
katalog 1. Kurseinheit 1. Wie sind Algorithmen und Datenstrukturen untrennbar miteinander verknüpft? 2. Worin besteht das Ziel einer Beschreibung auf algorithmischer Ebene? 3. Welche Kriterien gibt es
Martin Unold INFORMATIK. Geoinformatik und Vermessung
Wiederholung So sieht ein leeres Java-Programm aus public class Programmname { public static void main (String[] args) { // Hier stehen die Anweisungen Welche Arten von Anweisungen gibt es? Anweisungen
Suchbäume. Suchbäume. Einfügen in Binären Suchbäumen. Suchen in Binären Suchbäumen. Prinzip Suchbaum. Algorithmen und Datenstrukturen
Suchbäume Suchbäume Prinzip Suchbaum Der Wert eines Knotens wird als Schlüssel verstanden Knoten kann auch weitere Daten enthalten, die aber hier nicht weiter betrachtet werden Werte der Schlüssel müssen
Gliederung. Algorithmen und Datenstrukturen I. Binäre Bäume: ADT Heap. inäre Bäume: ADT Heap. Abstrakte Datentypen IV. D. Rösner
Gliederung Algorithmen und Datenstrukturen I Abstrakte Datentypen IV D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Winter 2009/10,
Prüfungsrelevante Studienleistung Logische Programmierung (Sommer 2006) Magische Quadrate. Patricia Röschke (46016) Martin Grandrath (46375)
Prüfungsrelevante Studienleistung Logische Programmierung (Sommer 2006) Magische Quadrate Patricia Röschke (46016) Martin Grandrath (46375) 31. Oktober 2006 Inhalt 1 Aufgabenstellung 2 2 Erläuterung der
Schreiben von Pages. Schreiben einer Page in den Swap Space ist sehr teuer (kostet millionen von CPU Zyklen).
Schreiben von Pages Schreiben einer Page in den Swap Space ist sehr teuer (kostet millionen von CPU Zyklen). Write Through Strategie (siehe Abschnitt über Caching) ist hier somit nicht sinnvoll. Eine sinnvolle
Klausur in Programmieren
Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Sommer 2009, 16. Juli 2009 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt) Name: Matrikelnr.:
Vorlesung Rechnerarchitektur. Einführung
Vorlesung Rechnerarchitektur Einführung Themen der Vorlesung Die Vorlesung entwickelt an Hand von zwei Beispielen wichtige Prinzipien der Prozessorarchitektur und der Speicherarchitektur: MU0 Arm Speicher
TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.
TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D. Übung zur Vorlesung Einführung in die Informatik für Ingenieure (MSE) Alexander van Renen (renen@in.tum.de)
Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5
Robert Elsässer Paderborn, den 15. Mai 2008 u.v.a. Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5 AUFGABE 1 (6 Punkte): Nehmen wir an, Anfang bezeichne in einer normalen
Datenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik
5. Datenstrukturen Motivation Datenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik Eine Datenstruktur speichert gegebene Daten und stellt auf diesen bestimmte Operationen
Vorlesung Datenstrukturen
Vorlesung Datenstrukturen Binärbaum Suchbaum Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 356 Datenstruktur Binärbaum Strukturrepräsentation des mathematischen Konzepts Binärbaum
Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute
Wiederholung: Zusammenfassung Felder Algorithmen und Datenstrukturen (für ET/IT) Wintersemester / Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Ein Feld A kann repräsentiert
Gliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen
5. Compiler Gliederung 1. Struktur eines Compilers 2. Syntaxanalyse durch rekursiven Abstieg 3. Ausnahmebehandlung 4. Arrays und Strings 6. Sortieren und Suchen 1. Grundlegende Datenstrukturen 2. Bäume
Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B3.1 Einführung. B3.2 Verkettete Liste. B3.3 Bäume
Algorithmen und Datenstrukturen 22. März 2018 B3. Verkettete Listen und Bäume Algorithmen und Datenstrukturen B3. Verkettete Listen und Bäume B3.1 Einführung Marcel Lüthi and Gabriele Röger B3.2 Verkettete
t-äre Bäume können - wie Binärbäume - degenerieren, d.h. durch ungünstige Einfügereihenfolge kann ein unausgewogener Baum mit großer Höhe entstehen.
.3 B-Bäume t-äre Bäume können - wie Binärbäume - degenerieren, d.h. durch ungünstige Einfügereihenfolge kann ein unausgewogener Baum mit großer Höhe entstehen. Wird der t-äre Baum zur Verwaltung von Daten
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen B3. Verkettete Listen und Bäume Marcel Lüthi and Gabriele Röger Universität Basel 22. März 2018 Einführung Abstrakter Datentyp / Datenstruktur Abstrakter Datentyp Eine Menge
Übungen zu Programmierung I - Blatt 8
Dr. G. Zachmann A. Greß Universität Bonn Institut für Informatik II 1. Dezember 2004 Wintersemester 2004/2005 Übungen zu Programmierung I - Blatt 8 Abgabe am Mittwoch, dem 15.12.2004, 15:00 Uhr per E-Mail
Algorithmus zur komprimierten Übertragung von Textdaten an mobile Endgeräte
Fachhochschule Wedel Seminararbeit Algorithmus zur komprimierten Übertragung von Textdaten an mobile Endgeräte Sven Reinck 7. Januar 2007 Inhaltsverzeichnis Inhaltsverzeichnis Motivation 2 Wörterbuch 2.
Übung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2017 Marc Bux, Humboldt-Universität zu Berlin Agenda 1. (Sortierte) Listen 2. Stacks & Queues 3. Datenstrukturen 4. Rekursion und vollständige Induktion
Kapitel Andere dynamische Datenstrukturen
Institute of Operating Systems and Computer Networks Algorithms Group Kapitel 4.8-4.11 Andere dynamische Datenstrukturen Algorithmen und Datenstrukturen Wintersemester 2018/2019 Vorlesung#15, 18.12.2018
Datenstrukturen und Algorithmen. Vorlesung 5
Datenstrukturen und Algorithmen Vorlesung 5 Inhaltsverzeichnis Vorige Woche: Sortierte Listen Zyrkuläre Listen Verkettete Listen auf Arrays Heute betrachten wir: Skip Listen ADT Set ADT Map Iterator ADT
Institut für Programmierung und Reaktive Systeme 7. Mai Programmieren II. 11. Übungsblatt
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 7. Mai 2018 Programmieren II 11. Übungsblatt Hinweis: Auf diesem und den folgenden Übungsblättern
Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper
Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen Sebastian Küpper Unzulänglichkeit von Feldern Wenn ein Unternehmen alle Rechnungen eines Jahres verwalten möchte,
TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.
TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D. Blatt Nr. 11 Hausaufgabe 1 Übung zur Vorlesung Grundlagen: Datenbanken im WS13/14 Henrik Mühe (muehe@in.tum.de)
Datenstrukturen und Algorithmen (SS 2013) Prof. Dr. Leif Kobbelt Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Präsenzübung Datenstrukturen und Algorithmen (SS 2013) Prof. Dr. Leif Kobbelt Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Dienstag, 28. Mai 2013 Nachname: Vorname: Matrikelnummer: Studiengang:
Informatik II Übung 10. Pascal Schärli
Informatik II Übung 0 Pascal Schärli pascscha@student.ethz.ch 09.0.0 Was gibts heute? Best-of Vorlesung: Teile und Herrsche Türme von Hanoi Mergesort O-Notation Vorbesprechung: U0A, - Mergesort U0A Türme