Используйте следующий эвристический алгоритм:
M = NULL
while E != NULL do {
if ((∃u vertex) and (gr(u) == 1)) then
e ← the incident edge with u
else
e ← an incident edge with a vertex with the most incident edges
M ← M ∪ {e}
E ← E - (all the incident edges with e)
}
return M //return the matching
Где: М, Е - ребра; gr (u) - оценка u (количество падающих ребер с u);
Что нас спросили:
a) Prove that this algorithm returns the maximum matching for a tree.
b) Prove that if there is a perfect matching M0 then the algorithm returns it, for any bipartite graph.
c) Prove that |M| ≥ (v(G)/2), for any bipartite graph.
//G is the graph, v(G) is the matching number, size of the maximum matching.
Я почти уверен, что этот алгоритм похож на некоторый классический алгоритм, который мне не удается найти, или решение может быть полностью основано на теоремах и свойствах двудольных графов.
Не могли бы вы дать мне отправную точку .. Чего мне не хватает?
Я думаю, а) это просто .. Я все еще пытаюсь найти правильное доказательство, я думаю, что оно может быть полностью основано на свойствах деревьев и двудольных графов.
Для б) и в) .. Понятия не имею.