\section{Matchings in allgemeinen Graphen} \begin{tasks} \item \begin{pseudocode} M = $\emptyset$ visited = Array von False der Größe $|V|$ // Markiert gematchte Knoten for e in E do if nicht visited[u] und nicht visited[v] then M = $M \cup \{e\}$ visited[u] = True visited[v] = True return M \end{pseudocode} Angenommen M wäre erweiterbar (d.h. es gibt eine Kante \{u,v\} mit u,v $\notin$ V(M)). Dann wurden sowohl u als auch v während des Algorithmus beim Durchlaufen der Kante \{u,v\} als frei angesehen und wäre somit der Menge M hinzugefügt worden. Das ist eine Widerspruch. \\\\ \textbf{Laufzeit:} \\ Initialisierung des Arrays: $\Oh(V)$\\ Schleife: Jede Kante wird genau einmal betrachtet ($\Oh(V)$) und die Überprüfung und Markierung passieren in $\Oh(1)$. Also insgesamt $\Oh(E)$\\ Das ergibt eine Gesamtlaufzeit von $\Oh(V+E)$ \points{3} \item \points{3} \item \points{2} \item \points{3} \item \points{2} \end{tasks}