Bei Study anmelden

Diese Seite ist der öffentliche eMedys-Auftritt. Dein Konto und deine privaten Inhalte laufen auf Study; die Anmeldung öffnet sich dort in einem eigenen Fenster.

Schnittmenge ist noch keine Reihenfolge

Zähle vorhandene Ereignisse und geordnete Abläufe getrennt.

Eine Menge merkt sich, ob ein Ereignis vorkommt, aber nicht wann. Ein sequenzieller Vertrag muss zusätzlich Reihenfolge, Zeitbezug und den Umgang mit Wiederholungen festlegen. In unserem Modell sind Listen bereits nach einer eindeutigen Ereignisreihenfolge sortiert. Ein Vorgang erfüllt öffnen → speichern, wenn mindestens ein speichern nach einem öffnen liegt. Bei Wiederholungen reicht also ein passendes Paar. Für denselben Datensatz ist die Menge geordneter Treffer eine Teilmenge der Vorgänge mit beiden Ereignisarten. Eine weitere notwendige Bedingung kann eine kumulative Schnittmenge nur gleich groß lassen oder verkleinern.

Ein Beispiel

Synthetische Folgen: sample-1=[öffnen,speichern], sample-2=[speichern,öffnen], sample-3=[öffnen]. Zwei Vorgänge enthalten beide Arten; nur sample-1 erfüllt die Reihenfolge. Mit sample-4=[speichern,öffnen,speichern] gibt es drei Mengen- und zwei Reihenfolgentreffer. Das erste speichern bei sample-4 liegt zu früh, das zweite bildet aber ein gültiges Paar. Python 3.11 · Lehrbeispiel def ordered(events, first, second): seen_first = False for event in events: if event == second and seen_first: return True if event == first: seen_first = True return False samples = [["öffnen", "speichern"], ["speichern", "öffnen"], ["öffnen"], ["speichern", "öffnen", "speichern"]] print(sum({"öffnen", "speichern"} <= set(row) for row in samples)) print(sum(ordered(row, "öffnen", "speichern") for row in samples)) Erwartete Ausgabe 3 2

Mit meinem Konto üben →

Alle Lernwege