12.3. Praktische Elementaralgorithmen |
![]() |
![]() |
Letztmalig dran rumgefummelt: 17.05.21 17:11:47 |
![]() |
Recherchiert man die bis heute in der Informatikangewandten Programme, so lässt sich deren grundsätzliche Struktur in ca. 20 Grundalgorithmen splitten, welche jeweils in den verschieden Strukturen und Verschachtelungstiefen sowie Datentypen einschließlich Rekursion "verpackt" sind. Die Oberbegriffe der Grundalgorithmen lauten: Tausche, Verschieben, Suchen und Sortieren. |
||||||
![]() |
1. Grundalgorithmen 2. Sortieralgorithmen 3. Suchalgorithmen 4. Aufgaben und Lösungsverfahren 5. Verwandte Themen |
||||||
![]() |
|
||||||
![]() |
Quellen:
|
||||||
![]() |
hier kommen sofort die Datentypen ins Spiel - oft betrachten wir bei einer hinreichenden Mächtigkeit Arrays als Grundstruktur | ||||||
![]() |
Rekursion hat sich mit all seinen Problemen in der Praxis ihrer Entwicklung sowie der Spezifik ihrer Denkweise als ein mächtiges Werkzeug zur Lösung gemausert | ||||||
![]() |
„Talente finden Lösungen, Genies entdecken
Probleme.“ Krailsheimer |
||||||
![]() |
das alles hat ganz viel mit Algorithmen, Programmen und Programmieren sowie mit Computern zu tun und wird in Anwendersoftware unbemerkt eingesetzt | ||||||
![]() |
Und wie löse ich meine eigenen Probleme? Mit Psychologie - heißt
eigentlich nix anderes, als: ich
erkenne und bekämpfe meinen eigenen inneren Schweinehund. Den hat übrigens
jeder - tritt' einer vor Dir erfolgreich in Sachen XY auf, war er nur
erfolgreich in der Bekämpfung eben seines ... ;-) ... und wie hat er das gemacht? - Na zum Beispiel so:
Sekretärinnen News vom 27.4.05 |
1. Grundalgorithmen |
![]() |
![]() |
![]() |
![]() |
Wer diese Algorithmen studiert (studieren heißt, sich bemühen - und Mühe ist's ja wohl), entdeckt ganz schnell, dass dahinter die Anforderungen von Datenbanken sowie deren Abfragen stecken ;-) | ||||
![]() |
|
||||
![]() |
Füllen eines Feldes der Mächtigkeit n mit Elementen eines bestimmten Datentyps - optionaler Worst-Case: vielen verschiedenen Datentypen sowie der dazu erforderlichen Steuerlogik und frei wählbare Dimension der Elemente | ||||
![]() |
Füllen eines Feldes der Mächtigkeit n mit Buchstaben - optionaler Worst-Case: vielen verschiedenen Datentypen sowie der dazu erforderlichen Steuerlogik und frei wählbare Dimension der Elemente | ||||
![]() |
Tauschen von zwei Elementen eines Feldes der Mächtigkeit n | ||||
Suchalgorithmen mit der Besonderheit: Wie suchen, wenn der Wertevorrat "mächtig" ist? | |||||
![]() |
... ist ein Element innerhalb der Menge n vorhanden? (Rückgabewert ist eine JA/NEN-Entscheidung) - Typisches Beispiel: "... haben wir einen Schüler namens 'Rumpelstilzchen'?" - ... und hier gibt's das Programm dazu | ||||
![]() |
... gibt es ein Element mit mehreren bestimmten, genau definierten Eigenschaften oder nicht? (Rückgabewert ist eine JA/NEN-Entscheidung) - Typisches Beispiel: "... ist der rosa Rollkragenpullover in Größe 38 noch auf Lager?" - daraus machen wir: gibt es eine bestimmte Zahl positiv und negativ? - ... und hier gibt's das Programm dazu | ||||
![]() |
... wie viel male gibt es ein Element mit mehreren bestimmten, genau definierten Eigenschaften? (im Worst-Case Anzahl einschließlich 0 bzw. alle) - Typisches Beispiel: "... wie viele Male ist der rosa Rollkragenpullover in Größe 38 noch auf Lager?" - ... und hier gibt's das Programm dazu | ||||
![]() |
... gibt es ein Element mit mehreren bestimmten, genau definierten Eigenschaften mehrfach? (im Worst-Case Anzahl einschließlich 0 bzw. alle) - Typisches Beispiel: "... gibt es den rosa Rollkragenpullover in Größe 38 mehrfach?" (Rückgabewert ist eine JA/NEN-Entscheidung) | ||||
![]() |
... wie groß ist der Abstand mehrerer bestimmter, genau definierten Elemente, was natürlich nur für unsortierte Mengen von Elementen gilt - (aber "AMAZON" macht das so!!!)? (im Worst-Case Anzahl einschließlich 0 bzw. alle) - Typisches Beispiel: "... wie viele Male ist der rosa Rollkragenpullover in Größe 38 noch auf Lager?" | ||||
![]() |
... bestimme das am häufigsten in der Menge vorkommende Element (oder: Worst-Case: die Plätze - respektive die Anzahl) - im Worst-Case auf allen Plätzen oder alle Elemente sind voneinander verschieden - Typisches Beispiel: "... was ist die größte Anzahl von Pullovern einer Größe und wo befinden sich diese im Lager?" - ... und hier gibt's das Programm dazu | ||||
![]() |
... wo ist der Platz i (oder: Worst-Case: die Plätze) des Elements n innerhalb der Menge - im Worst-Case auf allen Plätzen - Typisches Beispiel: "...wo ist der rosa Rollkragenpullover in Größe 38 im Lager?"... und hier gibt's das Programm dazu | ||||
![]() |
... bestimmen wir doch mal die Anzahl des Vorkommens eines Elements innerhalb der Menge - dies schließt die Lösung des Problems: ist ein Element innerhalb der Menge n vorhanden - Worst-Case: alle bzw. keines! - Typisches Beispiel: "... wie viele Male ist der Name Müller in der Startliste vorhanden?" (Rückgabewert ist die Anzahl des Vorkommens), (Menge der untersuchten Objekte: ALLE!!!) | ||||
![]() |
... bestimme das kleinste (respektive das größte) Elements innerhalb der Menge - schlimm: mehrere sind das Kleinste - Worst-Case: alle Elemente sind gleich! - Typisches Beispiel: "... wie hoch ist das größte Punktekonto beim Sportfest?" - wir nennen das MINIMUM- bzw. MAXIMUM-Suche | ||||
![]() |
... bestimme den Platz des kleinsten (respektive das größten) Elements innerhalb der Menge - schlimm: mehrere sind das Kleinste oder Größte - Worst-Case: alle Elemente sind gleich! - Typisches Beispiel: "... welche Nummer hat das Konto mit dem höchsten (oder niedrigsten) Sparbetrag?" - wir nennen das MINIMUM- bzw. MAXIMUM-Platzsuche | ||||
![]() |
... bestimme die Anzahl aller Elemente innerhalb der Menge - schlimm: jedes Element genau einmal - Worst-Case: leere Menge! | ||||
Verschieben, Rotieren und Spiegeln mit der Besonderheit: Mächtigkeit der Elementemenge, ungerade Anzahl, verschiedene Datentypen | |||||
![]() |
Verschiebe die gesamte Menge m um n Plätze - Problem: was wird als neues Element eingefügt? - Typisches Beispiel: "... die Klasse 13 (in einigen Bundesländern die Klasse 14) verlässt die Schule - die neuen Klassen 5 werden eingeschult, alle anderen rücken (theoretisch) eine Klasse nach oben!" | ||||
![]() |
Verschiebe die Menge ab Position n um genau m Plätze - Worst-Case: ist das überhaupt möglich und was wird als neues Element eingefügt? | ||||
![]() |
Rotiere die Feldelemente um genau n Positionen nach rechts bzw. links - es gibt mal keinen Worst-Case - Typisches Beispiel: "... Lauflicht - es läuft immer um!" | ||||
![]() |
Verschiebe die Feldelemente um n Position nach rechts bzw. links - es gibt auch hier keinen Worst-Case, aber die Frage: "... was läuft für die auslaufenden Elemente neu ein?" - Typisches Beispiel: "... Lauflicht mit einlaufender leuchtender oder eben nicht leuchtender Lampe" | ||||
Löschen und Einfügen von Elementen mit der Besonderheit: Mächtigkeit der Elementemenge, ungerade Anzahl, verschiedene Datentypen | |||||
![]() |
Lösche aus der gesamten Menge mit Anzahl m n Elemente ab der Position p - Typisches Beispiel: "... die Klasse 8 (bei kleinen Schulen passiert so etwas) verlässt die Schule | ||||
![]() |
Füge in die Gesamtmenge mit Anzahl m n Elemente ab der Position p ein - Typisches Beispiel: "... die Klasse 13 (in einigen Bundesländern die Klasse 14) verlässt die Schule - die neuen Klassen 5 werden eingeschult, alle anderen rücken (theoretisch) eine Klasse nach oben!" | ||||
Berechnungen auf der Menge von Feldelementen mit der Besonderheit: Mächtigkeit der Elementemenge, ungerade Anzahl - Datentyp muss dann für die meisten Operationen Zahl sein (außer Anzahl, Platz von Zeichen im ASCII-Code usw.) | |||||
![]() |
Berechne den Durchschnitt, die Summe, die Standardabweichung, die Anzahl der Elemente, die menge der Namen, welche an dritter Stelle ein "t" führen | ||||
![]() |
|
||||
![]() |
Vertausche zwei Element innerhalb eines Feldes mit bekannter Position | ||||
![]() |
Verschiebe die Elemente eines Feldes um genau einen Platz nach einer gewählten Richtung | ||||
![]() |
Rotiere die Elemente eines Feldes um genau einen Platz nach einer gewählten Richtung | ||||
![]() |
ein gegebenes Feld von Elementen eines beliebigen Datentyps ist zu spiegeln (finde den Datentyp) - Worst-Case: ist die Anzahl der Elemente ungerade? | ||||
Einfügen und Löschen sowie Ersetzen von Elementen innerhalb einer Menge mit der Besonderheit: Wenn sich nichts mehr Anfügen (oder Einfügen lässt z. B. wegen der Dimension des Feldes) | |||||
![]() |
Füge ein Element an seinen entsprechenden Platz in einer sortierten Menge ein - es gibt mal keinen Worst-Case selbst wenn die Menge leer ist - Typisches Beispiel: "... ein neuer Schüler kommt in eine Klasse!" | ||||
Bestimmen der Häufigkeit des Vorkommens von Elementen in einem Feld | |||||
![]() |
Bestimmen der Anzahl des Vorkommens jedes Elements im Feld und Ausgabe in einer Rangliste - es gibt keinen Worst-Case selbst wenn die Menge leer ist - Typisches Beispiel: "... die Häufigkeitsverteilung von Zeichen in einem Text" |
2. Sortieralgorithmen |
![]() |
![]() |
![]() |
![]() |
Unter Sortieren versteht man das Anordnen einer Folge von Elementen gemäß einer vorgegebenen Ordnung. Jedes Element hat einen für den Sortiervorgang ausschlaggebenden Ordnungsbegriff oder Schlüssel, auf den Vergleichsoperatoren <, <=, =, <>, >= und > anwendbar sind. Teile bzw. alle der nachfolgend genannten Grundoperationen nutzen alle Sortieralgorithmen: Zuweisen, Vergleichen, Vertauchen. Sortieralgorithmen sind typische Beispiele für lösbare, jedoch in Abhängigkeit der Anzahl der Elemente recht mächtige Probleme. | ||||||||||||
![]() |
|
||||||||||||
![]() |
|
3. Suchalgorithmen |
![]() |
![]() |
![]() |
![]() |
Unter
Suchen versteht man im informationstechnischen Sinne das Registrieren eines
oder einer Gruppe von Elementen als Bestandteil einer wohldefinierten
Gesamtmenge. In der Realität des Programmierens ist dies dann auch noch
abhängig von Datentypen und vor allem von der Datenorganistation. Ein Suchraum kann sein:
Der Suchraum besteht aus Knoten (Datenobjekte), die untereinander in Beziehung stehen. Die Suche arbeit sich über vernetzte Knoten – wenn es sein muss – durch das gesamte Knotennetz wie beispielsweise über Nachbarschaftsbeziehungen zwischen den Knoten oder über Vater−Sohn−Beziehungen. Knoten des Suchraums stellen die Argumente/Objekte für das Suchkriterium dar |
||||||||
![]() |
|||||||||
![]() |
Binäre Bäume | ||||||||
![]() |
|
||||||||
![]() |
|
||||||||
![]() |
|
||||||||
![]() |
|
||||||||
![]() |
|
4. Aufgaben und Lösungsverfahren |
![]() |
![]() |
![]() |
![]() |
Hierhinter steckt kein konkreter Algorithmus - und damit schon gar nicht ein Grundalgorithmus. Was wir hier besprechen, ist eine grundsätzliche Art, bestimmte Probleme, die zu einer Klasse gehören mit den gleichen Methoden zu lösen. Ich bin ja der Meinung, schöner kann man objektorientiertes Programmieren nicht formulieren (Rost am 16.10.04 um 23.35 Uhr - komme gerade aus dem Kino: "Der Untergang"). | ||||||||||||
![]() |
|
||||||||||||
![]() |
|
||||||||||||
![]() |
|
||||||||||||
![]() |
Lösungsstrategien für derartige
Probleme: |
5. Verwandte Themen |
![]() |
![]() |
![]() |
![]() |
Das Vorangestellte hilft wirtschaften, löst jedoch kein einziges Problem (allerdings ohne Beachtung der Worst-Case-Strategien wird man auch nicht erfolgreich Software entwickeln und/oder informatische Projekte realisieren können). Deshalb nunmehr das, was wirklich Arbeiten hilft. | ||||||||||||
![]() |
|
||||||||||||
![]() |
|
![]() zur Hauptseite |
© Samuel-von-Pufendorf-Gymnasium Flöha | © Frank Rost im März 1995 |
... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-) „Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“ Diddi Hallervorden, dt. Komiker und Kabarettist |
Diese Seite wurde ohne Zusatz irgendwelcher Konversationsstoffe erstellt ;-) |