Максимальное двудольное паросочетание
MatchOriel поддерживает работу с задачами назначений, заданными разрешёнными парами. Обсудите множества рёбер проекта и проверьте увеличивающие пути, различая максимальное число пар и устойчивость предпочтений.
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)Подключение
Базовый URL, учётные данные и доступный сервер.
Проект
Проверьте изолированные вершины и переназначение по увеличивающему пути, отклоняя неверные индексы без изменения множеств.
Проверьте перед применением
Сравните фактическое поведение с ожидаемым. Если проверка не проходит, разберитесь в причине перед следующими изменениями.
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)Уточните цель назначения пар до изменения кода
MatchOriel — рабочая среда для программирования с ИИ в Windows, где логику назначения пар можно обсуждать в контексте использующего её приложения. Откройте исходный проект и объясните, что делает пару допустимой и что должен оптимизировать результат. Попросите подключённого помощника изучить отражение требований во входной структуре и коде до предложения изменений.
Один из примеров — задача паросочетания максимальной мощности. Приведите допустимые пары и объясните, заключается ли цель только в назначении как можно большего числа участников. Попросите модель проверить случай, где для достижения цели нужно пересмотреть ранний выбор. Явно задайте ранжирование предпочтений и другие бизнес-правила, если они нужны приложению: размер паросочетания сам по себе их не определяет.
Изучите предложение и проверьте допустимость рёбер и уникальность участников в возвращённых парах. Включите участников без связей и отклоняемые индексы в проверки проекта, затем изучите обработку неназначенных элементов вызывающим кодом. MatchOriel поддерживает подключения к конечным точкам, совместимым с OpenAI, или Anthropic с учётными данными при необходимости. Модели без ограничений можно выбирать, если сервис их предлагает; правила поставщика, объём контекста и возможности инструментов сервера сохраняются. Оценивайте уместность правки по поставленной цели, а не уверенности помощника.
Проверка назначения допустимых пар
Учитывает ли наибольшее паросочетание предпочтения?
Не автоматически. В примере максимизируется количество назначений среди допустимых пар. Если важны устойчивость по предпочтениям или взвешенное качество, задайте это отдельно и проверьте, решает ли предложенный алгоритм эту задачу, а не только максимизирует число пар.
Зачем включать случай с переназначением?
Он отличает решение, способное пересматривать прежний выбор, от жадного прохода, который может остановиться слишком рано. Укажите ожидаемое число пар и допустимые альтернативы, затем сравните с примерами предлагаемый код и результат.
Должны ли тесты требовать один конкретный набор пар?
Только если контракт требует именно его. Несколько назначений могут удовлетворять одной цели максимальной мощности. Проверяйте допустимость, уникальность участников и размер, а перед ужесточением примеров документируйте требования к порядку или разрешению равенства.
Как передавать неназначенных участников вызывающему коду?
Определите, выводит ли он их из отсутствующих пар или ожидает явное представление. Проверьте эту границу вместе с возвращаемой структурой, затем протестируйте несвязанные входные элементы, чтобы приложение не принимало допустимого неназначенного участника за ошибку разбора.
MatchOriel · Обновлено 2026-10-25