Итак, я столкнулся с проблемой, в которой были «n» пилоты и «м» самолеты. У каждого пилота был список самолетов, которые он мог летать. И один пилот может летать только на одном самолете за раз. Вы должны были определить максимальное количество самолетов, которые могут летать одновременно. Стандартная проблема двустороннего сопоставления (о которой я узнал позже).Жадный алгоритм для двудольного сопоставления
В конкурсе, я придумал жадный алгоритм следующим образом:
Хотя есть самолеты в графике:
1) Выберите плоскость, которая может быть пролетела минимальным число пилоты
2) Жадно выделить пилот этой плоскости (из тех, кто может летать)
3) Удалите как плоскость и а, llocated пилот из графика
В общем, для двудольных паросочетаний, предлагаю следующий алгоритм:
Хотя есть узлы в правильном наборе двудольного графа:
1) Выберите узел справа, установленный с минимальной входящей степенью
2) Жадно сопоставить его с ЛЮБОЙ точкой f (который имеет к нему край)
3) Удалите оба этих узла из графика (это также приведет к уменьшению входящей степени всех узлов справа, к которым этот узел имеет ребро)
Я не математически опытным, чтобы доказать правильность этого алгоритма и после того, как много мыслей я не был в состоянии придумать контрпример. Итак, мой конкретный вопрос: это стандартный или известный алгоритм, или я делаю какую-то вопиющую ошибку, которую я не вижу?
Пожалуйста, не стесняйтесь редактировать мой вопрос, чтобы сделать его более ясным, если вы так чувствуете. Спасибо.
Спасибо! Просто из любопытства, будет ли алгоритм правильным, если я включу условие типа «для узла Y с минимальной степенью входящего справа», выберите узел x слева с ребром в Y, так что среди всех таких x он имеет наименее уходящей степени "? – Anirudh
Нет, не будет. Но для поиска встречного примера потребуется больше времени. –