Maximales bipartites Matching
Finde ein Matching maximaler Größe zwischen zwei Gruppen mit jeweils höchstens 32 Knoten anhand erlaubter Kantenmengen.
def maximum_matching(edges, right_count):
if type(right_count) is not int or not 0 <= right_count <= 32 or type(edges) not in (list, tuple) or len(edges) > 32:
raise ValueError("matching.size")
if any(type(row) not in (set, frozenset) or any(type(v) is not int or not 0 <= v < right_count for v in row) for row in edges):
raise ValueError("matching.edge")
owners = [-1] * right_count
def augment(left, seen):
for right in sorted(edges[left]):
if right in seen:
continue
seen.add(right)
if owners[right] == -1 or augment(owners[right], seen):
owners[right] = left
return True
return False
for left in range(len(edges)):
augment(left, set())
return sorted((left, right) for right, left in enumerate(owners) if left != -1)Modelle
Richten Sie einen OpenAI-kompatiblen oder Anthropic-Endpunkt mit Basis-URL und gegebenenfalls API-Schlüssel ein. Testen Sie die Verbindung. Ein lokaler Modellserver muss laufen; entfernte Werkzeuge können Daten separat übertragen.
Projekt
Prüfe isolierte Knoten und Neuzuordnung über einen augmentierenden Pfad, lehne ungültige Indizes ohne Änderung der Mengen ab.
Vor dem Anwenden prüfen
Vergleichen Sie das tatsächliche Verhalten mit dem erwarteten Ergebnis. Klären Sie fehlgeschlagene Prüfungen vor weiteren Änderungen.
def maximum_matching(edges, right_count):
if type(right_count) is not int or not 0 <= right_count <= 32 or type(edges) not in (list, tuple) or len(edges) > 32:
raise ValueError("matching.size")
if any(type(row) not in (set, frozenset) or any(type(v) is not int or not 0 <= v < right_count for v in row) for row in edges):
raise ValueError("matching.edge")
owners = [-1] * right_count
def augment(left, seen):
for right in sorted(edges[left]):
if right in seen:
continue
seen.add(right)
if owners[right] == -1 or augment(owners[right], seen):
owners[right] = left
return True
return False
for left in range(len(edges)):
augment(left, set())
return sorted((left, right) for right, left in enumerate(owners) if left != -1)Klären Sie das Zuordnungsziel vor der Bearbeitung
MatchOriel ist ein KI-Programmierarbeitsbereich für Windows, in dem Sie Zuordnungslogik im Kontext der nutzenden Anwendung besprechen. Öffnen Sie das Quellprojekt und erläutern Sie, wann eine Paarung zulässig ist und was das Ergebnis optimieren soll. Lassen Sie den verbundenen Assistenten vor Änderungsvorschlägen prüfen, wie diese Anforderungen in Eingabestruktur und Code abgebildet sind.
Eine Zuordnung maximaler Kardinalität ist ein Beispiel. Geben Sie die zulässigen Paare an und beschreiben Sie, ob das Ziel schlicht darin besteht, möglichst viele Mitglieder zuzuordnen. Lassen Sie das Modell einen Fall prüfen, in dem eine frühere Zuordnung geändert werden muss, um dieses Ziel zu erreichen. Halten Sie Präferenzrangfolgen oder andere Geschäftsregeln ausdrücklich fest, falls Ihre Anwendung sie benötigt, denn die Größe einer Zuordnung legt sie nicht fest.
Prüfen Sie den Vorschlag und testen Sie die zurückgegebenen Paare auf gültige Kanten und eindeutige Mitgliedschaft. Berücksichtigen Sie isolierte Mitglieder und zurückgewiesene Indizes in Ihren Projektprüfungen und untersuchen Sie anschließend, wie aufrufender Code mit nicht zugeordneten Einträgen umgeht. MatchOriel unterstützt Verbindungen zu OpenAI-kompatiblen oder Anthropic-Endpunkten, bei Bedarf mit Zugangsdaten. Uneingeschränkte Modelle sind wählbar, sofern Ihr Dienst sie anbietet; Anbieterregeln sowie Kontext- und Werkzeugfähigkeiten des Servers gelten weiterhin. Beurteilen Sie anhand des festgelegten Ziels statt der Zuversicht des Assistenten, ob die Änderung angemessen ist.
Zulässige Paarzuordnungen prüfen
Berücksichtigt die größte Zuordnung auch Präferenzen?
Nicht automatisch. Die dargestellte Aufgabe maximiert die Anzahl der Zuordnungen unter den zulässigen Paaren. Sind Präferenzstabilität oder gewichtete Qualität wichtig, geben Sie dies gesondert an und prüfen Sie, ob der vorgeschlagene Algorithmus dieses Ziel statt nur der Anzahl behandelt.
Warum einen Fall aufnehmen, der eine Neuzuordnung erfordert?
Er unterscheidet eine Lösung, die frühere Entscheidungen revidieren kann, von einem gierigen Durchlauf, der möglicherweise zu früh aufhört. Geben Sie erwartete Paarzahlen und gültige Alternativen an und prüfen Sie den vorgeschlagenen Code und seine Ausgabe anhand dieser Beispiele.
Sollten Tests eine exakt festgelegte Paarmenge verlangen?
Nur wenn die Spezifikation genau dieses Ergebnis verlangt. Mehrere Zuordnungen können dasselbe Ziel maximaler Kardinalität erfüllen. Prüfen Sie Gültigkeit, eindeutige Mitgliedschaft und Größe und dokumentieren Sie Reihenfolge- oder Gleichstandsregeln, bevor Sie Testfälle strenger gestalten.
Wie sollten nicht zugeordnete Mitglieder beim aufrufenden Code ankommen?
Definieren Sie, ob er sie aus fehlenden Paaren ableitet oder eine ausdrückliche Darstellung erwartet. Prüfen Sie diese Schnittstelle mit der zurückgegebenen Struktur und testen Sie unverbundene Eingaben, damit die Anwendung ein rechtmäßig nicht zugeordnetes Mitglied nicht als Parsingfehler behandelt.
MatchOriel · Aktualisiert 2026-10-25