• Keine Ergebnisse gefunden

Übungsblatt  3

N/A
N/A
Protected

Academic year: 2021

Aktie "Übungsblatt  3"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Informatik Bachelor 1. Semester WS 2014/15 Prof. Dr. Wolfgang Schramm Algorithmen und Datenstrukturen (ADS)

Übungsblatt  3   Ausgabe:  6.11.2014   1

   

Übungsblatt  3  

Ausgabe:  6.11.2014

 

 

Abgabe:  14.11.2014  

 

Hinweise:   -­‐   Die  Abnahme  der  Übungen  gilt  als  Prüfungsleistung.  Bei  einer  Verhinderung   durch  Krankheit  ist  eine  ärztliche  Bescheinigung  der  Arbeitsunfähigkeit  vorzu-­‐

legen.  

  -­‐   Zur   Abnahme   müssen   die   Ergebnisse   (Pseudocode,   Stichpunkte)   –   soweit   nichts  anderes  angegeben  ist  –  schriftlich  (ausgedruckt)  vorliegen.  

   

Aufgabe  1:  Suchfunktionen     30  Punkte    

 

Schreiben  Sie  vier  Suchfunktionen,  die  einen  Wert  in  einem  Array  suchen  und  den  Index  des   Wertes  (falls  vorhanden)  oder  -­‐1  (falls  nicht  vorhanden)  zurückliefern:  

 

a) Lineare  Suche,  wobei  immer  das  gesamte  Array  durchsucht  wird  und  der  Index  des  letz-­‐

ten  gefundenen  Wertes  zurückgegeben  wird.  

b) Lineare  Suche,  wobei  die  Funktion  zurückgekehrt,  sobald  der  Wert  gefunden  wurde.  

c) Binäre  Suche  in  der  rekursiven  Fassung.  

d) Binäre  Suche  in  der  iterativen  Fassung.  

 

Um  Ihre  Funktionen  testen  zu  können,  schreiben  Sie    

e) ein  Hauptprogramm  mit  folgenden  Eigenschaften:  

− ein  Array  wird  angelegt  und  mit  Werten  gefüllt,  

− ein  Wert  wird  eingelesen  und  in  dem  Array  gesucht,  rufen  Sie  nacheinander  alle   Suchfunktionen  auf.  

Denken  Sie  an  Kommentare  (in  Englisch)!    

 

Anmerkung:  

Die  lineare  Suche  gemäß  a)  wird  z.B.  benötigt,  wenn  Sie  bei  mehrfach  vorkommenden  Werten   den  Index  des  letzten  haben  möchten.  Die  lineare  Suche  nach  b)  liefert  demgegenüber  den   ersten  Index  des  gesuchten  Wertes.  

 

Aufgabe  2:  Komplexitätsexperiment   30  Punkte    

 

Ändern   Sie   die   Suchfunktionen   aus   Aufgabe   1   so   um,   dass   Sie   die  Anzahl   der   Schlüssel-­‐

Vergleiche  beim   Suchen   zählen   können.   Die   Funktionen   sollen   zu   diesem   Zweck   nicht   den   Index  des  gefundenen  Elements,  sondern  die  Anzahl  der  Vergleiche  zurückliefern.  

 

Ermitteln  Sie  die  Anzahl  der  Schlüssel-­‐Vergleiche    

(2)

 

Übungsblatt  3     Ausgabe:  6.11.2014    

   

2

− bei  erfolgreicher  und  erfolgloser  Suche    

− für  alle  vier  Suchfunktionen  

− für  drei  verschiedene  Array-­‐Größen  (Länge  jeweils  verdoppelt,  z.B.  1024  –  2048  –  4096   Elemente)  

Tragen  Sie  die  Ergebnisse  in  einer  Tabelle  ein,  z.B.  

 

    Größe  des  Arrays  

  Suchverfahren   1024   2048   4096  

erfolgreich   Linear  (erster  Treffer)         Linear  (letzter  Treffer)        

Binär  iterativ        

Binär  rekursiv        

erfolglos   Linear  (erster  Treffer)         Linear  (letzter  Treffer)        

Binär  iterativ        

Binär  rekursiv        

 

und  diskutieren  Sie  die  Ergebnisse:  welchen  Einfluss  hat  die  Array-­‐Größe  oder  die  Strategie?  

Können  Sie  die  Zahlen  erklären,  gibt  es  ggf.  Abweichungen  gegenüber  von  Ihnen  erwarteten   Werten?  

Um  eine  statistisch  signifikante  Aussage  für  erfolgreiche  Suche  zu  erhalten,  müssen  Sie  die   Suche  mehrmals  durchführen  und  anschließend  den  Mittelwert  bestimmen.  Damit  die  Suche   erfolgreich  ist,  finden  Sie  unten  Hinweise  zur  Belegung  des  Arrays  und  zur  Wahl  der  Schlüssel.  

− Suchen  Sie  jeweils  mindestens  100  mal  

− mit  zufällig  gewählten  Schlüsseln    

Wie  sieht  es  bei  der  erfolglosen  Suche,  aus?  Sie  können  die  gesuchten  Werte  wie  bei  der  er-­‐

folgreichen  Suche  bestimmen  (wie  müssten  Sie  das  Experiment  ändern?);  aber  ist  das  Experi-­‐

ment  überhaupt  nötig,  oder  können  Sie  die  gesuchten  Werte  auch  errechnen?  

 

Hinweise:  

− Kopieren  Sie  Ihre  Programme  aus  Aufgabe  1,  bevor  Sie  sie  für  diese  Aufgabe  verändern!  

− Dokumentieren  Sie  Hauptprogramm  und  die  Suchfunktionen  mit  sinnvollen  (englischen)   Kommentaren.  

− Für  das  Experiment  „erfolgreiche  Suche“  müssen  Sie   (1)   ein  Array  mit  sortierten  Zahlen  definieren,  und  

(2)   alle   Zahlen   aus   dem   Array   mit   der   gleichen   Wahrscheinlichkeit   suchen,   sowie   (3)   immer  erfolgreich  suchen.  

 

Dies  können  Sie  einfach  erreichen,  indem  Sie  

− für  das  sortiertes  Array  die  Array-­‐Elemente  mit  Index  als  Wert  belegen,  d.h.  

for (int i = 0; i<data.length; i++) {data[i] = i;};

(ein  automatisches  Belegen  ist  bei  einem  1024  Elemente  großen  Array  natürlich   sinnvoll),  

 

(3)

 

Übungsblatt  3     Ausgabe:  6.11.2014    

   

3

− oder  als  Schlüssel  zufällig  eine  Zahl  aus  dem  Bereich  0  bis  N-­‐1  (einschließlich)  wäh-­‐

len;  

zufällige  ganzzahlige  Werte  im  Bereich  0  bis  N-­‐1  können  Sie  in  Java  erzeugen  mit   der  Funktion:  

 

(int) Math.floor(Math.random()*N)

Aufgabe  3:  Insertion  Sort   30  Punkte    

 

Programmieren  Sie  den  Insertion  Sort  und  dann  eine  Variante  des  in  der  Vorlesung  vorgestell-­‐

ten  Insertion  Sort.  Diese  Variante  unterscheidet  sich  von  der  auf  dem  Folienskript  dadurch,   dass  die  Einfügeposition  für  das  aktuelle  Element  mittels  binärer  Suche  im  bereits  sortierten   Teil  der  Folge  gesucht  wird.  

 

Protokollieren  Sie  

den  Aufwand,  indem  sie  die  Anzahl  der  Vergleiche  und  die  Anzahl  der  Vertauschungen   zählen.  

 

Zu  Testzwecken  ist  es  durchaus  sinnvoll  

die   schrittweise   Veränderung   der   Sortierfolge   auszugeben,   d.h.   nach   jedem   Durchlauf   den  aktuellen  Zustand  der  Sortierfolge.  

 

Stellen   Sie   die   Ergebnisse   der   beiden   Insertion   Sort   Varianten   ähnlich   wie   in   Aufgabe   1   für   Arrays  der  Größe  1024,  2048  und  4096  gegenüber.  

    Hinweis:    

Füllen   Sie   die   großen   Arrays   mit   „zufälligen“   Werten   aus   dem   Bereich   von   1   bis   N   ddurch   Verwendung  der  Funktion:  

(int) Math.floor(Math.random()*N)

Aufgabe  4:  Shaker  Sort   30  Punkte    

Als  weitere  Verbesserung  des  Bubble  Sort  wurde  der  Shaker  Sort  Algorithmus  entwickelt.  Kurz   beschrieben,  arbeitet  er  wie  folgt:  

Die  prinzipielle  Arbeitsweise  ist  die  des  Bubble  Sort,  nur  ändert  sich  die  Richtung  aufeinander-­‐

folgender  Durchläufe.  D.h.  einmal  läuft  man  von  links  nach  rechts  und  vertauscht  die  Elemen-­‐

te.  Beim  nächsten  Mal  läuft  man  von  rechts  nach  links  und  vertauscht  die  Elemente.  

 

   

(4)

 

Übungsblatt  3     Ausgabe:  6.11.2014    

   

4

Beispiel:  

 

F0  =     44   55   12   42   94   18   6   67   (Ausgangsfolge)  

F1  =     44   12   42   55   18   6   67   94   (nach  dem  1.  Durchlauf)   F2  =     6   44   12   42   55   18   67   94   (nach  dem  2.  Durchlauf)   F3  =     6   12   42   44   18   55   67   94   (nach  dem  3.  Durchlauf)   F4  =     6   12   18   42   44   55   67   94   (nach  dem  4.  Durchlauf)    

Der  1.  Durchlauf  erfolgt  von  unten  nach  oben  (links  nach  rechts),  der  2.  Durchlauf  erfolgt  von   rechts  nach  links  (oben  nach  unten)  etc.  Die  Elemente,  die  vertauscht  werden  müssen  sind   jeweils  unterstrichen.  

 

Schreiben  Sie  ein  Programm  mit  einer  Methode  ShakerSort  und  protokollieren  Sie  die  Arbeits-­‐

schritte  und  den  Aufwand  wie  in  Aufgabe  3.  

 

Protokollieren  Sie  

den  Aufwand  wie  in  Aufgabe  3,  indem  Sie  die  Anzahl  der  Vergleiche  und  die  Anzahl   der  Vertauschungen  zählen.  

die  schrittweise  Veränderung  der  Sortierfolge.  D.h.  bei  einer  Vertauschung  soll  die   Sortierfolge,   unter   besonderer   Kennzeichnung   der   vertauschten   Elemente   ausge-­‐

geben  werden.  Und  nach  jedem  Durchlauf  soll  der  aktuelle  Zustand  der  Sortierfolge   ausgegeben  werden.  

Referenzen

ÄHNLICHE DOKUMENTE

Be- stehen Schwangerschaftsbe- schwerden, kommt es also dar- auf an, ob diese Beschwer- den Krankheitswert haben oder ob eine Fortsetzung der bisherigen Tätigkeit trotz nor-

Dage- gen fühlt sich der Patient geborgen, wenn sein Arzt ihn über Charakter und Entwicklung der Krankheit in- formiert hat und er darauf bauen kann, daß dieser das auch in Zukunft

Arbeitsunfähigkeit liegt ferner auch vor, wenn aufgrund eines bestimmten Krankheitszustandes, der für sich allein noch Arbeitsunfähigkeit bedingt, absehbar ist, dass aus der

Wenn der Arzt aber nach einer Untersuchung zu dem Schluss kommt, dass die Schutzmaßnahmen unzureichend sind, mit denen der Arbeitgeber auf die konkrete Gefährdung reagiert hat,

Hinweis für den Untersuchenden Arzt: Die Bescheinigung nach Teil II soll der Fahrerlaubnisbehörde vor Erteilung der Fahrerlaubnis Kenntnisse darüber verschaffen, ob bei dem

2) Eine entsprechende Bestätigung darf nicht ausgestellt werden, wenn eine auf einer Krank- heit, Behinderung oder Sucht beruhende gesundheitliche Einschränkung so gravierend ist,

Er / Sie ist nicht wegen eines körperlichen Gebrechens, wegen einer Schwäche seiner / ihrer geistigen oder körperlichen Kräfte oder wegen einer Sucht zur Ausübung des Berufes

Er / Sie ist nicht wegen eines körperlichen Gebrechens, wegen einer Schwäche seiner / ihrer geistigen oder körperlichen Kräfte oder wegen einer Sucht zur Ausübung des Berufes als.