Emparejamiento bipartito máximo
Obtén un emparejamiento de cardinalidad máxima entre dos grupos de hasta 32 vértices mediante conjuntos de aristas permitidas.
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)Modelos
Configura un endpoint compatible con OpenAI o Anthropic usando la URL base y, si hace falta, una clave API. Prueba la conexión. Un servidor local debe estar en ejecución; las herramientas remotas pueden enviar datos por separado.
Proyecto
Prueba vértices aislados y reasignación por caminos aumentantes, rechazando índices inválidos sin modificar los conjuntos.
Revisa antes de aplicar
Compara el comportamiento real con el resultado esperado. Si una prueba falla, investiga la causa antes de hacer más cambios.
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)Aclara el objetivo de la asignación antes de editar
MatchOriel es un espacio de programación con IA para Windows donde analizar la lógica de asignación en el contexto de la aplicación que la utiliza. Abre el proyecto fuente y explica qué hace que un emparejamiento esté permitido y qué debe optimizar el resultado. Pide al asistente conectado que examine cómo aparecen esos requisitos en la estructura de entrada y en el código antes de proponer cambios.
Una tarea de emparejamiento de cardinalidad máxima proporciona un ejemplo. Aporta los pares permitidos y describe si el objetivo es simplemente asignar tantos miembros como sea posible. Pide al modelo que revise un caso en el que haya que reasignar una elección anterior para lograr ese objetivo. Explicita las preferencias u otras reglas de negocio si tu aplicación las necesita, porque el tamaño de un emparejamiento no las establece.
Examina la propuesta y comprueba que los pares devueltos sean aristas válidas y que cada miembro aparezca una sola vez. Incluye miembros desconectados e índices rechazados en las comprobaciones del proyecto y revisa cómo trata el código consumidor las entradas sin asignar. MatchOriel admite conexiones a endpoints compatibles con OpenAI o de Anthropic con credenciales cuando sean necesarias. Se pueden seleccionar modelos sin restricciones donde tu servicio los ofrezca; siguen aplicándose las reglas del proveedor y las capacidades de contexto y herramientas del servidor. Usa el objetivo establecido, en vez de la confianza del asistente, para evaluar si el cambio es adecuado.
Revisar asignaciones de pares permitidos
¿Respeta también las preferencias el emparejamiento más grande?
No automáticamente. La tarea ilustrada maximiza el número de asignaciones entre pares permitidos. Si importan la estabilidad de las preferencias o la calidad ponderada, especifícalo por separado y revisa si el algoritmo propuesto aborda ese objetivo y no solo la cantidad.
¿Por qué incluir un caso que necesite reasignación?
Permite distinguir una solución que puede revisar elecciones anteriores de una pasada voraz que quizá se detenga demasiado pronto. Proporciona cantidades esperadas de pares y alternativas válidas, y examina el código propuesto y su salida con esos ejemplos.
¿Deben exigir las pruebas un conjunto exacto de pares?
Solo cuando el contrato requiera ese resultado específico. Varias asignaciones pueden satisfacer el mismo objetivo de cardinalidad máxima. Comprueba la validez, la unicidad de los miembros y el tamaño, y documenta los requisitos de orden o desempate antes de hacer más estrictos los casos de prueba.
¿Cómo deben llegar al código consumidor los miembros sin asignar?
Define si el código consumidor los deduce de los pares ausentes o espera una representación explícita. Revisa ese límite junto con la estructura devuelta y prueba entradas desconectadas para que la aplicación no trate un miembro legítimamente sin asignar como un fallo de análisis.
MatchOriel · Actualizado 2026-10-25