+ All Categories
Home > Documents > © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare...

© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare...

Date post: 05-Apr-2015
Category:
Upload: adalbrecht-wurgler
View: 105 times
Download: 0 times
Share this document with a friend
17
1 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen Kapitel 3 Elementare Datenstrukturen
Transcript
Page 1: © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

1© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen

Kapitel 3

Elementare Datenstrukturen

Page 2: © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

2© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen

3.1 Grundlegendes

Elementare Datenstrukturen:

Arrays (Felder)

Verkettete Listen

bilden die Bausteine für abstrakte Mechanismen, die ausgehend von niederen Ebenen aufgebaut sind und Algorithmen mit zunehmender Komplexität ermöglichen

Page 3: © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

3© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen

3.2 Arrays (Felder)

Arrays:

Eine feste Sammlung von Daten desselben Typs, die zusammen-hängend gespeichert und über einen Index zugängig sind

Fundamentale Datenstruktur:

Direktes Abbild des Speichersystems. Ein Arrayzugriff a[i] wird in nur wenige Maschinenanweisungen übersetzt Programme mit Arrays werden in effiziente Maschineprogramme übersetzt.

Page 4: © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

4© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen

3.2 Arrays (Felder)

Beispiel: Das Primzahlensieb des Eratosthenes

Ältester und bekanntester Siebalgorithmus, benannt nach Eratosthenes (ca. 200 v. Chr.)

Prinzip von Siebalgorithmen:Eine Menge von Elementen wird in zwei Klassen aufgeteilt: die guten und die schlechten Elemente. Schlechte Elemente sind einfacher zu finden als gute. Ein Siebprozess eliminiert sukzessive Elemente, die als schlecht erkannt wurden. Jedes eliminierte Element hilft, weitere schlechte Elemente zu erkennen. Die überlebenden Elemente müssen die guten sein.

Siebalgorithmus für Primzahlen:• gut = ist eine Primzahl• schlecht = ist keine Primzahl

Page 5: © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

5© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen

3.2 Arrays (Felder)

Primzahlensieb von Eratosthenes:

Alle Primzahlen kleiner gleich n ausgeben

Markiere die kleinste Primzahl, d.h. 2, und entferne alle ihre Vielfachen innerhalb des gewünschten Bereichs 1 … n.

Die kleinste verbleibende Zahl muß prim sein, markiere sie und entferne wieder alle ihre Vielfachen.

Wiederhole diesen Prozess für alle Zahlen bis

(Falls eine ganze Zahl c <= n faktorisiert werden kann als c = a · b, so muß entweder a <= oder b <= gelten)

n

n n

Page 6: © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

6© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen

3.2 Arrays (Felder)

Page 7: © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

7© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen

3.2 Arrays (Felder)

static void eratosthenes(int n) { int sqrtn = (int) Math.floor(Math.sqrt((double) n)); Sieve s = new Sieve(n); int p = 2; while (p <= sqrtn) { int i = p * p; while (i <= n) { s.remove(i); i = i + p; } do p++; while (! s.isMember(p)); } int c = 0; for (int i = 2; i <= n; i++) if (s.isMember(i)) { c++; System.out.println("prim(" + c + ") = " + i); }}

Page 8: © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

8© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen

3.2 Arrays (Felder)

public class Sieve { public final int n; // Groesse des Sieve private static final int ws = 64; // Anzahl Bit in long private final int as; // Groesse des Arrays private long[] s; // zur Speicherung des Sieve // Konstruktor public Sieve(int n) { this.n = n; as = (n + ws - 1) / ws; s = new long[as]; for (int i = 0; i < as; i++) s[i] = ~0L; }

Page 9: © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

9© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen

3.2 Arrays (Felder)

// public Methoden /** * Liefert "true" zurueck, falls das Element im * Sieve enthalten ist, sonst "false". */ public boolean isMember(int e) { if ((1 <= e) && (e <= n)) { int i = (e - 1) / ws; e = (e - 1) % ws; return ((s[i] & (1L << e)) != 0); } else return false; }

Page 10: © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

10© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen

3.2 Verkettete Listen

Listenstrukturen = dynamische Datenstrukturen

Mithilfe von Einfüge- und Löschoperationen können Listenstrukturen zur Laufzeit nicht nur die gespeicherten Datenwerte, sondern auch ihre Größe und Struktur verändern

Listen: Schlüsselidee

• Alloziere benötigten Speicherplatz nicht wie beim Array in einem großen zusammenhängenden Teil, sondern dynamisch in kleinen Fragmenten, die ein gegebenes Objekt speichern können

• Verknüpfung von Datenelementen, die verstreut im Speicher liegen, erfolgt durch Zeiger bzw. Referenzen, d.h. Speicheradressen, an denen die Elemente gegenwärtig abgelegt sind

Page 11: © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

11© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen

3.2 Verkettete Listen

Zeiger oder Referenz

• Ein Sprachkonstrukt, das in modernen Programmiersprachen benutzt wird, um das Äquivalent einer Speicheradresse darzustellen

• Im wesentlichen eine Speicheradresse, kann aber mehr Informationen enthalten:In Java oder anderen streng getypten Sprachen beziehen sich Zeiger bzw. Referenzen auch auf die Typdefinitionen der Objekte, auf die sie verweisen Übersetzer kann die konsistente Benutzung von Zeiger- bzw. Referenzvariablen sicherstellen

• Zeigervariable bzw. Referenzvariable nimmt Speicheradressen als Werte an

Page 12: © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

12© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen

3.2 Verkettete Listen

public class ListNode<E> {

private E element = null; private ListNode<E> next = null;

public ListNode() { };

public ListNode(E element) { this.element = element; }

head tail

nulle1 e2 ei... ei+1 en...

Definition: Eine verkettete Liste ist eine Menge von Elementen, bei der jedes Element zu einem Knoten gehört, der auch eine Verbindung zu einem Knoten enthält.

Page 13: © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

13© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen

3.2 Verkettete Listen

public void setNextNode(ListNode next) { this.next = next; }

public ListNode<E> getNextNode() { return next; }

public void setData(E element) { this.element = element; }

public E getData() { return element; }

} // class ListNode

Page 14: © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

14© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen

3.2 Verkettete Listen

Einfügen eines neuen Knotens als Nachfolger eines Knotens, gegeben durch den Zeiger p:

q = new ListNode<E>(y);q.setNextNode(p.getNextNode());p.setNextNode(q);

q.next = p.next;p.next = q;

Abkürzende Schreibweise, die aber nicht den Grundsätzen der objekt-orientierten Programmierung (Zugriff auf in einer Klasse gekapselte Attribute nur über spezielle Zugriffsmethoden!) entspricht und daher so nicht in Programmen verwendet werden sollte!

head tail

nulle1 e2 ei... ei+1 en...

py

q

Page 15: © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

15© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen

3.2 Verkettete Listen

Löschen des Nachfolgers eines Knotens, gegeben durch den Zeiger p:

p.next = p.next.next;

head tail

nulle1 e2 ei–1... ei en...ei+1

p

Page 16: © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

16© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen

Erzeugung einer Liste:

ListNode<Integer> head, tmp;head = new ListNode<Integer>(0);tmp = head;for (int i = 1; i < 4; i++) { tmp.next = new ListNode<Integer>(i); tmp = tmp.next;}

3.2 Verkettete Listen

head null0

tmpi

1 1 null

tmp

2 2 null

tmp

3 3 null

tmp

Page 17: © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

17© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen

Traversierung der Liste (Ausgabe):

tmp = head;while (tmp != null) {

System.out.println(tmp.data + " "); tmp = tmp.next;

}

Ausgabe: 0 1 2 3

3.2 Verkettete Listen

tmp tmp


Recommended