• Keine Ergebnisse gefunden

D1. Sortieren von Strings

N/A
N/A
Protected

Academic year: 2022

Aktie "D1. Sortieren von Strings"

Copied!
9
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Algorithmen und Datenstrukturen

D1. Sortieren von Strings

Gabi R¨ oger und Marcel L¨ uthi

Universit¨ at Basel

16. Mai 2019

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 1 / 35

Algorithmen und Datenstrukturen

16. Mai 2019 — D1. Sortieren von Strings

D1.1 Motivation D1.2 Strings

D1.3 Sortieren von Strings D1.4 LSD-Sortierverfahren D1.5 Quicksort

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 2 / 35

Ubersicht ¨

A&D

Sortieren Komplexit¨ ats-

analyse Fundamentale Datenstrukturen

Suchen Graphen

Strings

Sortieren Suchen (Tries)

Kompression

String algorithmen oder generische Algorithmen?

I Alle Algorithmen zum Sortieren / Suchen wurden ¨ uber beliebige Schl¨ ussel definiert.

I K¨ onnen direkt auf Strings angewendet werden.

I Preis der Abstraktion / Allgemeinheit: Vorhandene Struktur der Schl¨ ussel wird nicht ausgenutzt.

Frage

K¨ onnen wir Eigenschaften von Strings ausnutzen um noch

effizientere Algorithmen zu entwickeln?

(2)

Heutiges Programm

I Motivation

I Abstraktion: Alphabet I LSD-Sort

I Quicksort f¨ ur Strings

Repetition und Erweiterung bereits bekannter Konzepte

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 5 / 35

D1. Sortieren von Strings Motivation

D1.1 Motivation

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 6 / 35

D1. Sortieren von Strings Motivation

Strings als fundamentale Abstraktion

Strings / Text ist in vielen Bereichen grundlegende Repr¨ asentation von Informationen

I Programmcode

I Datenrepr¨ asentation im Web (HTML / Json / CSS ) I Kommunikation (E-Mail, Textmessages)

I Gensequenzen

D1. Sortieren von Strings Motivation

Anwendung 1: Programmcode

Programme sind Strings

I Compiler / Interpreter interpretieren und transformieren Strings in ausf¨ uhrbare Programme

I IDEs bietet Funktionalit¨ at zur effizienten Suche und Manipulation von Code

I Selektion von allen W¨ ortern, die Suchergebniss entsprechen I Suche nach regul¨ arem Ausdr¨ ucken

I Refactoring

(3)

D1. Sortieren von Strings Motivation

Anwendung 2: Informations und Kommunikationssysteme

Text ist wichtigste Repr¨ asentation f¨ ur Information und Kommunikation im Internet

I E-Mail / SMS / ...: Text wird von einem an anderen Ort transferiert.

I Webbrowser: interpretiert CSS und HTML und stellt diesen formatiert dar.

I Suchmaschine: Muss grosse Mengen an Text effizient indizieren und durchsuchen.

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 9 / 35

D1. Sortieren von Strings Motivation

Anwendung 3: Bioinformatik

The digital information that underlies biochemistry, cell biology, and development can be represented by a simple string of G’s, A’s, T’s, and C’s. This string is the root data structure of an organism’s biology.

Maynard Olson - A time to sequence I Analyse des Genoms eines Organismus

I Beispiel: Genom Mensch besteht ist String aus ca.

3’000’000’000 Zeichen Beispielprobleme

I Suchen von Sequenzen in grossen Datenbanken I Vergleichen von (Sub)-Sequenzen von Strings I Finden von h¨ aufig auftretenden Mustern I ...

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 10 / 35

D1. Sortieren von Strings Strings

D1.2 Strings

D1. Sortieren von Strings Strings

Strings

String

Endliche Folge von Zeichen (Character)

I Strings sind unver¨ anderlich (immutable). Einmal erzeugt k¨ onnen Strings nicht mehr ver¨ andert werden.

I Ideale Schl¨ ussel f¨ ur Symboltabellen

I Intern h¨ aufig als Array von Zeichen implementiert.

0 1 2 3 4 5 6 7 8 9 10 11

A T T A C K A T D A W N

(4)

D1. Sortieren von Strings Strings

Characters

Fr¨ uher:

I 7 Bit Zeichensatz (ASCII)

I 8 Bit Zeichensatz (extended ASCII) Heute:

I 8 oder 16 bit Unicode Zeichensatz (UTF-8, UTF-16) Unterschied Java / Python

I Java Character entspricht 16 bit Unicode Zeichen (UTF-16) I Python kennt keinen Charactertyp. Ausdruck s[i] ist (UTF-8)

String der L¨ ange 1.

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 13 / 35

D1. Sortieren von Strings Strings

Abstraktion: Alphabet

I Unicode umfasst 1’112’064 Zeichen.

I Kleineres Alphabet reicht f¨ ur viele Anwendungen aus

Name Radix (R) Bits (log

2

(R)) Zeichen

BINARY 2 1 0 1

DNA 4 2 A C G T

LOWERCASE 26 5 a - z

UPPERCASE 26 5 A-Z

ASCII 128 7 ASCII Characters

EXTENDED ASCII 256 8 EXTENDED ASCII

UNICODE 1’114’112 21 UNICODE

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 14 / 35

D1. Sortieren von Strings Strings

Alphabet

Abstraktion Alphabet erlaubt uns Code unabh¨ angig vom benutzten Alphabet zu schreiben.

c l a s s A l p h a b e t :

def _ _ i n i t _ _ ( s : L i s t [ c h a r ]) def t o C h a r ( i n d e x : Int ) - > c h a r def t o I n d e x ( c : C h a r ) - > int def c o n t a i n s ( c : C h a r ) - > b o o l e a n def R () - > int # R a d i x

D1. Sortieren von Strings Sortieren von Strings

D1.3 Sortieren von Strings

(5)

D1. Sortieren von Strings Sortieren von Strings

Sortieralgorithmen

Algorithmus Laufzeit O(·) Speicherbedarf O(·) stabil best/avg./worst best/avg./worst

Selectionsort n

2

1 nein

Insertionsort n/n

2

/n

2

1 ja

Mergesort n log n n ja

Quicksort n log n/n log n/n

2

log n/log n/n nein

Heapsort n log n 1 nein

O(n log n) ist beweisbar der lower bound f¨ ur allgemeine, vergleichsbasierte, Sortierverfahren.

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 17 / 35

D1. Sortieren von Strings Sortieren von Strings

Idee 1

I Zeichen in Alphabet sind geordnet.

I Sortierung kann durch ”Fachverteilen”hergestellt werden I Vergleiche: Radixsort

Erinnerung: Radixsort

I Zahlen: z.B. 763, 983, 96, 286, 462 I Teile Zahlen nach letzter Stelle auf:

0 1 2 3 4 5 6 7 8 9

462 763 983

96 286

I Sammle Zahlen von vorne nach hinten/oben nach unten auf 462, 763, 983, 96, 286

I Wiederhole mit zweitletzter Stelle, etc.

I Grundlage LSD-Sortierverfahren

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 18 / 35

D1. Sortieren von Strings Sortieren von Strings

Idee 2

I Wie viele Character Vergleiche m¨ ussen durchgef¨ uhrt werden um zwei Strings zu vergleichen?

0 1 2 3 4 5 6 7

p r e f e t c h

p r e f i x e s

I Worst case: Proportional zur Stringl¨ ange I Aber: Oft sublinear

Wir k¨ onnen Sortieralgorithmen so schreiben, dass sie Vergleiche auf einzelne Zeichen reduzieren.

D1. Sortieren von Strings LSD-Sortierverfahren

D1.4 LSD-Sortierverfahren

(6)

D1. Sortieren von Strings LSD-Sortierverfahren

LSD-Sortierverfahren (1 Zeichen)

I Input: Array a, Output: Sortiertes array aux

N = len( a ) # A n z a h l zu s o r t i e r e n d e r Z e i c h e n c o u n t = [0] * ( a l p h a b e t . r a d i x () + 1)

aux = [ N o n e ] * N

# Z e i c h e n z a e h l e n for i in r a n g e (0 , N ):

i n d e x O f c h a r = a l p h a b e t . t o I n d e x ( a [ i ]) c o u n t [ i n d e x O f c h a r + 1] += 1

# K u m m u l a t i v e S u m m e

for r in r a n g e (0 , a l p h a b e t . r a d i x ( ) ) : c o u n t [ r +1] += c o u n t [ r ]

# V e r t e i l e n

for i in r a n g e (0 , N ):

i n d e x O f c h a r = a l p h a b e t . t o I n d e x ( a [ i ]) c o u n t F o r C h a r = c o u n t [ i n d e x O f c h a r ] aux [ c o u n t F o r C h a r ] = a [ i ]

c o u n t [ i n d e x O f c h a r ] += 1

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 21 / 35

D1. Sortieren von Strings LSD-Sortierverfahren

LSD-Sortierverfahren (1 Zeichen)

N = len( a ) # A n z a h l zu s o r t i e r e n d e r Z e i c h e n in a r r a y a c o u n t = [0] * ( a l p h a b e t . r a d i x () + 1)

# Z e i c h e n Z a e h l e n for i in r a n g e (0 , N ):

i n d e x O f c h a r = a l p h a b e t . t o I n d e x ( a [ i ]) c o u n t [ i n d e x O f c h a r + 1] += 1

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 22 / 35

D1. Sortieren von Strings LSD-Sortierverfahren

LSD-Sortierverfahren (1 Zeichen)

# K u m m u l a t i v e S u m m e

for r in r a n g e (0 , a l p h a b e t . r a d i x ( ) ) : c o u n t [ r +1] += c o u n t [ r ]

D1. Sortieren von Strings LSD-Sortierverfahren

LSD-Sortierverfahren (1 Zeichen)

# V e r t e i l e n

for i in r a n g e (0 , N ):

i n d e x O f c h a r = a l p h a b e t . t o I n d e x ( a [ i ]) c o u n t F o r C h a r = c o u n t [ i n d e x O f c h a r ] aux [ c o u n t F o r C h a r ] = a [ i ]

c o u n t [ i n d e x O f c h a r ] += 1

(7)

D1. Sortieren von Strings LSD-Sortierverfahren

LSD-Sortierverfahren (1 Zeichen)

I Verfahren ist stabil

I Zeitaufwand: Proportional zu N + R , wobei R Gr¨ osse des Alphabets ist

I Speicher: Proportional zu N + R (aux-Array und count Array)

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 25 / 35

D1. Sortieren von Strings LSD-Sortierverfahren

LSD-Sortierverfahren

I Sortiere jedes Zeichen einzeln

beginnend mit letztem (least significant digit) I Funktioniert, da Sortierung stabil ist

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 26 / 35

D1. Sortieren von Strings LSD-Sortierverfahren

LSD-Sortierverfahren

N = len( a ); aux = [ N o n e ] * N ; d = n u m D i g i t s - 1 w h i l e d >= 0:

c o u n t = [0] * ( a l p h a b e t . r a d i x () + 1)

for i in r a n g e (0 , N ):

i n d e x O f c h a r A t P o s d I n A = a l p h a b e t . t o I n d e x ( a [ i ][ d ]) c o u n t [ i n d e x O f c h a r A t P o s d I n A + 1] += 1

for r in r a n g e (0 , a l p h a b e t . r a d i x ( ) ) : c o u n t [ r +1] += c o u n t [ r ]

for i in r a n g e (0 , N ):

i n d e x O f C h a r A t P o s d I n A = a l p h a b e t . t o I n d e x ( a [ i ][ d ]) c o u n t F o r C h a r = c o u n t [ i n d e x O f C h a r A t P o s d I n A ] aux [ c o u n t F o r C h a r ] = a [ i ]

c o u n t [ i n d e x O f C h a r A t P o s d I n A ] += 1

D1. Sortieren von Strings Quicksort

D1.5 Quicksort

(8)

D1. Sortieren von Strings Quicksort

Erinnerung: Quicksort

I W¨ ahle Pivot Element I Partitioniere Array

I Rekursion auf linkes und rechtes Teilarray

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 29 / 35

D1. Sortieren von Strings Quicksort

Quicksort: Gleiche Schl¨ ussel

I Was passiert bei vielen gleichen Schl¨ usseln?

I Unn¨ otige Partitionierung von gleichen Schl¨ usseln.

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 30 / 35

D1. Sortieren von Strings Quicksort

3-Wege Quicksort

I Gleiche Schl¨ ussel sind bereits sortiert.

I Kein rekursiver Aufruf mehr n¨ otig.

D1. Sortieren von Strings Quicksort

Quicksort f¨ ur Strings

I 3-Wege Quicksort per Buchstabe

I Bei gleichen

Anfangsbuchstaben,

vergleiche n¨ achsten

Buchstaben.

(9)

D1. Sortieren von Strings Quicksort

Quicksort f¨ ur Strings

Quelle: Sedgewick & Wayne, Algorithmen, Abbildung 5.18

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 33 / 35

D1. Sortieren von Strings Quicksort

Laufzeit

Theorem

Um ein Array von N zuf¨ alligen Strings zu sortieren, ben¨ otigt der 3-Weg-Quicksort f¨ ur Strings im Durchschnitt ∼ 2NlnN

Zeichenvergleiche.

I Gleiche Anzahl Vergleiche wie standard (3-Wege) Quicksort I Aber: Wir haben Zeichenvergleiche und nicht

Schl¨ usselvergleiche

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 16. Mai 2019 34 / 35

D1. Sortieren von Strings Quicksort

Implementation

Referenzen

ÄHNLICHE DOKUMENTE

[r]

Die Stürmerwechsel Torben Zey / Maurice Mendel- Guckelsberger und Arne Breuer klappten reibungslos und Lukas Scholl schaltete sich jetzt immer öfter in den Angriff ein... Dominic

Herr Meier pumpt seinen Fahrradreifen von einem anfänglichen Innendruck von p 1 =1bar bis zu einem Druck von p 2 =4bar auf.. Die Luft hatte vor dem Aufpumpen eine Temperatur von d

Ben. : gilt Durch der Einschroiukuug auf Satz ouch fir lokale Winne Maxima Gebiete. Dann nimmt liszt > If G) I Sein Maximum ant dem. Rand

Systems of inequations can be solved through fixpoint iteration, i.e., by repeated evaluation of right-hand sides :-).. Conclusion:.. Systems of inequations can be solved

Quicksort Heapsort Nicht vergleichsbasierte Verfahren

I Kann den Heap direkt in der Eingabesequenz repr¨ asentieren, so dass Heapsort nur konstanten zus¨ atzlichen Speicherplatz ben¨ otigt. I Die Laufzeit von Heapsort ist leicht

Alle Algorithmen zum Sortieren / Suchen wurden ¨ uber beliebige Schl¨ ussel definiert.. K¨ onnen direkt auf Strings