He estado tratando de encontrar un algoritmo para encontrar la cobertura máxima del ciclo de vértices de un gráfico dirigido , es decir, un conjunto de ciclos disjuntos que contienen todos los vértices en , con tantos ciclos como sea posible (no consideramos ciclos de vértices individuales aquí). Sé que el problema de encontrar una cubierta de ciclo de vértice mínimo , así como encontrar una cubierta de ciclo de vértice con exactamente ciclos es NP-completo. ¿Pero qué pasa con el caso máximo?
Si bien encontraría una respuesta a esto interesante en general, las gráficas para las que quiero usar esto en realidad están bastante limitadas por su construcción, por lo que tal vez incluso si el problema es NP-completo podría haber una solución polinómica para estas instancias específicas.
Tenemos una lista de enteros , elementos y usaremos , elementos para referirnos a después de ordenarlo. Como ejemplo:
Los vértices de la gráfica serán identificados con los pares de tal manera que y . El gráfico tiene una arista dirigida si y solo si . (Un ciclo en este gráfico corresponde a un conjunto de valores que pueden permutarse cíclicamente para que terminen en su posición ordenada).
El ejemplo anterior arrojaría el siguiente gráfico (usando índices basados en 1):
Una cosa que no funciona es el enfoque codicioso de eliminar repetidamente el ciclo más pequeño (como muestra este ejemplo).
Tenga en cuenta que este problema es (si no cometí ningún error) equivalente a preguntar cuántos intercambios necesita para ordenar una lista determinada . (En primer lugar, lo que inspiró a investigar este problema).
Después de algunos consejos de la respuesta de Juho y un poco más de lectura en la literatura, me he encontrado con el problema de asignación que parece estar muy relacionado. Sin embargo, el problema de asignación se formula en términos de un gráfico bipartito ponderado y hasta ahora no he podido encontrar una manera de elegir aristas y pesos para reducir este problema. Si quisiéramos formular el problema aquí en términos de minimizar una función de peso, entonces un enfoque intuitivo sería decir que el peso de cada ciclo es dondees el número de aristas (o vértices) en el ciclo. (Por supuesto, esto es equivalente a simplemente establecer el peso en.) Es decir, el peso depende del tamaño del ciclo, no de los bordes particulares que incluye. Pero tal vez esto le da a alguien otra idea sobre cómo reducir el problema.
También parece que limitar el tamaño de los ciclos hace que el problema sea difícil para los gráficos generales. Esto no implica necesariamente que lo mismo sea cierto para la tarea de maximizar el número de ciclos, ni para los gráficos específicos que se consideran aquí, pero parece estar lo suficientemente relacionado como para que pueda ser importante.
En resumen: ¿se puede encontrar una cobertura máxima de ciclo disjunto de vértice para los gráficos construidos a partir del proceso anterior?
Como dos aspectos, también me interesaría saber si la cobertura máxima del ciclo disjunto del vértice también tiene una solución eficiente para gráficos arbitrarios que admitan al menos una cobertura del ciclo (que probablemente caerá como respuesta a la pregunta principal), o si solo determinar el número de ciclos en la cobertura máxima (en oposición a los bordes reales contenidos en cada uno) simplifica el problema. Me complace publicarlas como preguntas separadas si las personas creen que merecen respuestas completas por su cuenta.