HarmonyFidelisHarmonyFidelis
Anmelden
NachrichtenGroßprojekteAkteureAkademie

Algorithmen: eine Suche nach dem Maximum spezifizieren, ausführen und begründen

Vom Vertrag zum Beweis: Verfolgen Sie eine Suche nach dem Maximum, testen Sie ihre Grenzen und unterscheiden Sie Methode, Programm, Korrektheit und Terminierung.

Algorithmen: eine Suche nach dem Maximum spezifizieren, ausführen und begründen

1. Ziele, Niveau und Voraussetzungen

  • Die zulässigen Eingaben und die geforderte Ausgabe eines Algorithmus definieren.
  • Eine Suche nach dem Maximum mit einer Variablen, einer Bedingung und einer Schleife protokollieren.
  • Korrektheit und Terminierung begründen und anschließend Beweis und Tests unterscheiden.

Ein Algorithmus beschreibt eine präzise Methode, um Eingabedaten in ein Ergebnis umzuwandeln. Hier untersuchen wir deterministische Algorithmen, die für jede zulässige Eingabe terminieren müssen. Ein Programm drückt eine solche Methode in einer Sprache aus, die eine Maschine ausführen kann; dieselbe Methode kann durch mehrere Programme ausgedrückt werden.

Am Ende dieser Einführung können Sie die Eingaben und die erwartete Ausgabe festlegen, die Werte einer Variablen verfolgen und begründen, warum eine Suche nach dem Maximum terminiert und das richtige Ergebnis liefert. Diese Fähigkeit hilft Ihnen, ein Verfahren zu überprüfen, statt einer plausiblen Ausgabe zu vertrauen.

Niveau: Anfänger. Sie müssen lediglich ganze Zahlen vergleichen und eine geordnete Folge von Werten lesen können, die hier Liste genannt wird. Negative Zahlen sind zulässig. Kenntnisse einer Programmiersprache sind nicht erforderlich: Beginnen Sie auf Papier. Der Übergang zum Code ist eine Anwendung, keine versteckte Voraussetzung.

2. Das Problem vor der Methode definieren

Wir suchen den größten Wert einer endlichen, nicht leeren Liste ganzer Zahlen. Die Eingabe darf Wiederholungen enthalten und muss nicht sortiert sein. Die Ausgabe ist ein Wert, weder seine Position noch die Anzahl seiner Vorkommen. Für [3, 7, 7, 2] ist das erwartete Ergebnis 7.

Die Bedingung „nicht leer“ ist eine Vorbedingung: Sie legt die zulässigen Eingaben fest. Die Nachbedingung beschreibt das geforderte Ergebnis: Die Ausgabe gehört zur Liste und ist größer oder gleich jedem ihrer Werte. In einer leeren Liste gibt es kein Maximum, das zurückgegeben werden könnte. Ein Verfahren, das auch diesen Fall akzeptieren soll, müsste ausdrücklich einen Fehler oder ein anderes Ergebnis festlegen; es sollte nicht einfach null erfinden.

3. Ein eindeutiges Verfahren aufbauen

Speichern Sie einen Kandidaten namens best. Initialisieren Sie ihn mit dem ersten Wert und durchlaufen Sie dann die übrigen in ihrer Reihenfolge. Ist der betrachtete Wert strikt größer als best, ersetzen Sie best durch diesen Wert. Andernfalls behalten Sie ihn bei. Geben Sie nach dem letzten Wert best zurück.

Eine Zuweisung verändert einen gespeicherten Wert: best ← x bedeutet „den aktuellen Wert von x in best speichern“. Das ist keine Gleichung, die für immer gilt. Eine Bedingung wählt die Handlung aus; eine Schleife wiederholt die Schritte für die verbleibenden Werte. Reihenfolge, Initialisierung und Bedingung gehören ebenso zur Methode wie das Endergebnis.

best ← erster Wert der Liste
für jeden Wert x nach dem ersten:
    falls x > best:
        best ← x
best zurückgeben

Dieser Text ist Pseudocode: Er beschreibt die Methode, ohne die Syntax einer Sprache vorzuschreiben. Er darf nicht unverändert in einen Python-Interpreter eingefügt werden.

Konzeptionelle Illustration einer Liste mit vier Werten und eines gespeicherten Werts.

Mit Unterstützung künstlicher Intelligenz erzeugte Illustration. Sie veranschaulicht die Rolle des Speichers; der genaue numerische Ablauf und seine Begründung stehen im Text und in der Tabelle.

4. Ein gelöstes Beispiel nachvollziehen

Für [3, 7, 7, 2] ergibt die Initialisierung best = 3. Es bleiben drei Werte zu vergleichen.

Betrachteter Wertbest vorherx > best?best nachher
73ja7
77nein7
27nein7

Das zweite Vorkommen von 7 verändert den Wert des Maximums nicht. Das Ergebnis ist 7 nach genau drei Vergleichen. Bei nur einem Wert wird die Schleife nicht ausgeführt und dieser Wert wird zurückgegeben. Die Vergleiche zu zählen bedeutet nicht, die tatsächliche Laufzeit zu messen: Diese hängt auch vom Programm und der Maschine ab.

5. Korrektheit und Terminierung begründen

Nach jedem Schritt ist best das Maximum des bereits durchlaufenen Teils. Diese erhaltene Eigenschaft heißt Invariante. Sie gilt am Anfang, da der durchlaufene Teil nur den ersten Wert enthält. Ist der nächste Wert größer, bleibt die Eigenschaft beim Ersetzen erhalten; andernfalls bleibt sie auch beim Beibehalten des Kandidaten erhalten. Am Ende ist der durchlaufene Teil die gesamte Liste: Die Nachbedingung ist damit erfüllt.

Eine endliche Liste mit n Werten enthält nach dem ersten noch n − 1 Werte. Jeder Schritt verarbeitet einen davon, ohne zurückzugehen: Die Anzahl der verbleibenden Werte nimmt bis auf null ab. Das begründet die Terminierung und n − 1 Vergleiche, auch wenn alle Werte gleich sind. Tests an Beispielen können einen Fehler aufdecken; sie ersetzen diese Begründung für alle zulässigen Eingaben nicht.

6. In ein Python-Programm übersetzen

Hier ist eine Übersetzung für eine nicht leere Liste ganzer Zahlen. values[0] bezeichnet ihren ersten Wert; range(1, len(values)) durchläuft die nachfolgenden Indizes. Die Einrückung grenzt die Schleife und die Bedingung ab.

PYTHON
def maximum(values):
    best = values[0]
    for i in range(1, len(values)):
        x = values[i]
        if x > best:
            best = x
    return best

Diese Funktion setzt voraus, dass die Vorbedingung erfüllt ist. Sie ist keine vollständige Schnittstelle zur Eingabevalidierung: Die leere Liste führt beim Zugriff auf values[0] zu einem Fehler. Fehlende Werte, gemischte Datentypen und unendliche Listen liegen außerhalb des definierten Problems. Vor einer Wiederverwendung sind der Vertrag und die Behandlung abgewiesener Eingaben festzulegen. Der Code dient dem Verständnis der Methode; in der Praxis kann eine eingebaute Maximumfunktion vorzuziehen sein.

7. Angeleitete Übung

Eine Suche nach dem Maximum protokollieren

Führen Sie das Verfahren für [5, 1, 9, 3] von Hand aus. Erstellen Sie eine Tabelle mit dem betrachteten Wert, best vorher und best nachher; geben Sie die Ausgabe und die Anzahl der Vergleiche an.

Erfolgskriterium : Das Ablaufprotokoll initialisiert best mit dem ersten Wert, betrachtet jeden weiteren Wert einmal und erklärt die Entscheidung bei jedem Vergleich.

Angeleitete Lösung, die Sie nach Ihrem Versuch lesen sollten: Der Kandidat beginnt bei 5; nach 1, 9 und 3 hat er nacheinander die Werte 5, 9 und 9. Drei Vergleiche führen zur Ausgabe 9. Jede Zeile muss den betrachteten Wert sowie den Kandidaten davor und danach sichtbar machen; eine richtige Ausgabe allein reicht nicht aus, um die Begründung zu erklären.

8. Angemessenes Projekt

Ein Verfahren spezifizieren und testen

Formulieren Sie für [12, 8, 15, 15, 4] die Vorbedingung und die Nachbedingung, protokollieren Sie die Suche nach dem Maximum und begründen Sie die Terminierung. Ergänzen Sie die Tests [-4, -2, -9], [6] und [3, 3]. Erklären Sie die vorgesehene Behandlung einer leeren Liste und warum die Initialisierung mit null gefährlich ist.

Erfolgskriterium : Das Ergebnis enthält einen ausdrücklichen Vertrag, die vier Ablaufprotokolle, ein Argument zur Invariante und eine Begründung des Endes. Es unterscheidet die zulässigen Eingaben vom abgewiesenen Leerfall.

Arbeiten Sie zunächst auf Papier. Wenn Sie anschließend das Programm verwenden, vergleichen Sie seine Ausgabe mit Ihrem Ablaufprotokoll. Eine Übereinstimmung bei diesen wenigen Fällen ist eine begrenzte Überprüfung; behalten Sie auch das Argument zur Invariante und die Begründung der Terminierung bei. Das Ergebnis ist eine kleine Spezifikation mit Ablaufprotokollen und Tests, ohne personenbezogene Daten zu erheben.

9. Bewertung des Transfers

Die Methode auf ein Minimum übertragen

Passen Sie das Verfahren an, um das Minimum einer endlichen, nicht leeren Liste ganzer Zahlen zu suchen. Geben Sie den Pseudocode an, protokollieren Sie [6, -1, 4, -1] und erklären Sie die erhaltene Eigenschaft und die Terminierung. Finden Sie ein Gegenbeispiel zur Initialisierung mit null und erläutern Sie anschließend, warum eine leere Liste weiterhin außerhalb des Vertrags liegt.

Erfolgskriterium : Die Methode funktioniert im gesamten angegebenen Bereich, behandelt Wiederholungen und den Fall mit nur einem Element, trennt Test und Beweis und begründet Initialisierung, Vergleich und Ende, ohne eine auswendig gelernte Regel ohne Erklärung zu wiederholen.

Schreiben Sie Ihre Begründung ohne Notizen auf und erklären Sie jede Entscheidung. Vergleichen Sie anschließend Ihre Methode mit der Suche nach dem Maximum: Welche Schritte bleiben erhalten, und welche Entscheidung ändert sich?

10. Grenzen und häufige Fehler

best mit null zu initialisieren scheint bei manchen Listen mit positiven Werten zu funktionieren, scheitert jedoch bei [-4, -2, -9]: Das Programm gibt dann 0 zurück, das nicht einmal zur Eingabe gehört. Die Initialisierung mit dem ersten Wert vermeidet diese versteckte Annahme. Eine Liste mit nur einem Element und Wiederholungen sind zulässige Fälle, keine Anomalien.

Das Maximum einer Liste ist weder ihre Summe noch ein Wert, der notwendigerweise nur einmal in der Liste vorkommt. Ein Algorithmus kann korrekt sein, ohne der einzig mögliche zu sein. Eine andere Methode könnte zunächst sortieren und dann das letzte Element wählen, doch das fügt für diese einzelne Frage unnötige Arbeit hinzu. Diese Einheit beweist weder, dass ein beliebiges Verfahren terminiert, noch, dass ein beliebiges Programm seiner Methode entspricht: Beide Eigenschaften erfordern eigene Begründungen.

11. Zusammenfassung, aktiver Abruf und nächster Schritt

Die Vorgehensweise lautet: den Vertrag definieren, eine Methode wählen, einen Fall protokollieren, die erhaltene Eigenschaft und das Ende begründen und dann die Übersetzung überprüfen. Eine plausible Ausgabe ist kein allgemeiner Beweis. Beantworten Sie morgen, ohne erneut zu lesen, diese vier Fragen:

  1. Welchen Unterschied machen Sie zwischen einem Algorithmus und einem Programm?
  2. Welche Werte nimmt der Kandidat für [2, 5, 4] an, und wie viele Vergleiche werden durchgeführt?
  3. Warum scheitert die Initialisierung mit null bei manchen Eingaben?
  4. Erklären Sie einem Anfänger, warum das Verfahren bei jeder endlichen, nicht leeren Liste terminiert.

Kurze Referenz: Die Methode ist von ihrer Übersetzung zu unterscheiden; das Ablaufprotokoll beginnt bei 2, geht zu 5 über und bleibt dann bei 5, mit zwei Vergleichen. Null legt den Werten fälschlich eine untere Grenze auf. Die Anzahl der noch zu verarbeitenden Elemente nimmt jeweils um eins bis auf null ab.

Vorgeschlagener nächster Schritt: die Suche nach einem Wert in einer Liste mit der Suche nach ihrem Maximum vergleichen. Es ist noch kein Folgekurs festgelegt: Diese Wurzel bleibt nach Qualifizierung des Graphen für eine Erweiterung des Curriculums offen.

12. Quellen und redaktionelle Methode

Diese originäre Einheit verbindet zwei unabhängige institutionelle Lehrpläne: den französischen Lehrplan für Numérique et sciences informatiques, Première, BO vom 22. Januar 2019, Anhang S. 8 „Langages et programmation“ und S. 9 „Algorithmique“, und den englischen Computing-Lehrplan von 2013, „Key stage 2“ und „Key stage 3“. Die Quellen wurden am 12. Oktober 2026 erneut gelesen. Die Zuordnung betrifft Spezifikation, Sequenz, Auswahl, Wiederholung, Tests und Begründung; sie bescheinigt keine vollständige Abdeckung dieser Lehrpläne.

Text, Beispiele und Aktivitäten wurden mit Unterstützung künstlicher Intelligenz vorbereitet. Die Ablaufprotokolle und Rechenfälle sowie die acht Sprachversionen müssen vor der öffentlichen Bereitstellung überprüft werden. Es wird weder ein Lerngewinn noch eine menschliche Kontrolle behauptet.