Aber woher weiß ich, dass ich bei {(1,4), (1000, 3)} die beiden Kanten wirklich entfernen muss?
Natürlich musst du sie nicht entfernen. Du musst sie aber entfernen, wenn du (1000, 4) hinzufügen möchtest. Und du möchtest (1000, 4) hinzufügen, weil 4003 > 3005 ist.
Wenn du keine Kante entfernst, dann darfst du (1000, 4) nicht hinzufügen, weil
{(1, 4), (1000, 3), (1000, 4)}
kein Matching ist.
Wenn du nur die Kante (1, 4) entfernst, dann darfst du (1000, 4) nicht hinzufügen, weil
{(1000, 3), (1000, 4)}
kein Matching ist.
Wenn du nur die Kante (1000, 3) entfernst, dann darfst du (1000, 4) nicht hinzufügen, weil
{(1, 4), (1000, 4)}
kein Matching ist.
Also musst du beide Kanten entfernen um (1000, 4) hinzufügen zu dürfen. Das heißt, dass kein Matching mit (1000, 4) in der 2-Flip Umgebung von {(1,4), (1000, 3)} ist.
In der 2-Flip Umgebung von {(1,4), (1000, 3)} sind ∅, {(1,4)} und {(1000, 3)}. Die haben aber alle ein geringeres Gewicht als {(1,4), (1000, 3)}, also terminiert die lokale Suche und liefert {(1,4), (1000, 3)}.
Problem ist noch, dass du das verallgemeinern musst, weil du im Moment einen Approximationsfaktor von 4003/3005 ≈ 1,7 hast.
Dazu brauchst du die Kante (1,3) nicht. Ausschlaggebend für das höhere Gewicht war ja nur die Kante (1000, 4). Außerdem schlage ich vor, von der Gewichtsfunktion w: (a,b) ↦ a·b abzusehen und stattdessen für jede einzelne Kante das Gewicht direkt festzulegen.
Zum Beispiel V1 = {a,b}, V2 = {c,d}, E = {(a,b), (a,d), (b,c)}, M = {(a,c), (b,d)} und w((a,c)) = 1, w((b,d)) = 1, w((b,c)) = ... .
Und bei b) und c) dann einfach 3-Flips, dh. "Kante entfernen - einfügen - entfernen"? Oder "entfernen - einfügen - einfügen"?
Ja. Wobei ich das Wort "einfach" streichen würde. Die a) war einfach. Bei b) und c) habe ich im Moment auch keine Idee.