Esiste un algoritmo efficiente per questo problema di copertura del ciclo dei vertici?


23

Ho cercato di trovare un algoritmo per trovare una copertura del ciclo massimo del vertice di un grafico diretto , ovvero un insieme di cicli disgiunti che contengano tutti i vertici in G , con il maggior numero possibile di cicli (non consideriamo cicli singoli vertici qui). So che il problema di trovare una copertura minima del ciclo del vertice, nonché di trovare una copertura del ciclo del vertice con esattamente k cicli è NP-completo. Ma per quanto riguarda il caso massimo?GGk

Mentre troverei una risposta a questo interessante in generale, i grafici per cui voglio usarlo sono in realtà abbastanza limitati dalla loro costruzione, quindi forse anche se il problema è NP-completo potrebbe esserci una soluzione polinomiale per questi casi specifici.

Abbiamo un elenco di numeri interi , elementi l i e useremo S , elementi s i per fare riferimento a L dopo averli ordinati. Come esempio:LliSsiL

L=(1,3,2,5,0,7,4,2,6,0,8,1)S=(0,0,1,1,2,2,3,4,5,6,7,8)

I vertici del grafico saranno identificati con coppie tali che l i = n e s in . Il grafico ha un bordo diretto ( n , i ) ( m , j ) se e solo se s j = n . (Un ciclo in questo grafico corrisponde a un insieme di valori che possono essere ciclicamente permutati in modo tale da finire nella loro posizione ordinata.)(n,i)li=nsin(n,i)(m,j)sj=n

L'esempio precedente produrrebbe il seguente grafico (utilizzando indici basati su 1):

inserisci qui la descrizione dell'immagine

Una cosa che non funziona è l'approccio avido di rimuovere ripetutamente il ciclo più piccolo (come mostra questo esempio).

Si noti che questo problema è (se non ho commesso errori) equivalente a chiedere quanti swap è necessario ordinare un determinato elenco. (Che è ciò che ha ispirato esaminando questo problema in primo luogo.)

|C|1|C|1.) Cioè, il peso dipende dalla dimensione del ciclo, non dai bordi particolari che include. Ma forse questo dà a qualcuno un'altra idea su come ridurre il problema.

Sembra anche che limitare la dimensione dei cicli renda il problema APX-difficile per i grafici generali. Ciò non implica necessariamente che lo stesso sia vero per il compito di massimizzare il numero di cicli, né per i grafici specifici considerati qui, ma sembra essere sufficientemente strettamente correlato da poter essere importante.

In sintesi: è possibile trovare una copertura del ciclo disgiunto vertice massimo per i grafici costruiti con il processo sopra descritto?

Come due parti, sarei anche interessato a sapere se la copertura del ciclo disgiunto vertice massimo ha anche una soluzione efficiente per i grafici arbitrari che ammettono almeno una copertura del ciclo (che probabilmente cadrà come risposta alla domanda principale), o se semplicemente determinare il numero di cicli nella copertura massima (al contrario dei bordi effettivi contenuti in ciascuno) rende il problema ancora più semplice. Sono felice di postarle come domande separate se le persone pensano di meritare risposte a pieno titolo da sole.


Hai esaminato la letteratura CS sugli scambi renali? Il problema sembra correlato, quindi mi chiedo se uno qualsiasi dei metodi presenti possa essere applicato a questo. Questo potrebbe essere un vicolo cieco, però ...
DW

@DW non l'ho fatto (non sapevo che fosse una cosa). Vedrò cosa riesco a trovare, grazie.
Martin Ender,

il problema è davvero simile agli scambi di reni effettivamente studiati da un punto di vista teorico, ad esempio questo articolo di Roughgarden spiega che i piccoli cicli sono preferiti per ragioni quasi ovvie (p3); le dimensioni del ciclo implicano "operazioni simultanee" e quelle minori riducono il rischio di eseguire tutte le operazioni con complicazioni o donatori che cambiano idea ecc.
vzn

@AustinMohr Credo che i grafici ottenuti dalla costruzione che descrivo saranno sempre scomponibili in cicli (e inoltre, indipendentemente dal ciclo che rimuovi, il resto sarà comunque scomponibile in cicli). Se si desidera indirizzare anche i grafici generali, supporre che esista almeno una copertina completa.
Martin Ender,

@ MartinBüttner Nel tuo caso specifico, se tutti gli elementi dell'elenco sono distinti, il tuo problema sarebbe equivalente a trovare la (unica) decomposizione del ciclo della permutazione ?
mum

Risposte:


4

Gkk=2k=3 kk

GG((3/5)ϵ)ϵ>0

Per dettagli e prove delle affermazioni di cui sopra, vedere [1].


[1] Bläser, Markus e Bodo Manthey. "Due algoritmi di approssimazione per copertine a 3 cicli." Algoritmi di approssimazione per l'ottimizzazione combinatoria. Springer Berlin Heidelberg, 2002. 40-50.


Interessante, proverò a seguire i riferimenti di quel documento. Grazie. (Devo aver letto male qualcosa quando pensavo che le copertine del ciclo k fossero copertine con cicli esattamente k. O forse quella è una definizione diversa usata altrove.)
Martin Ender,

2
@ MartinBüttner A proposito, probabilmente vorrai dare un'occhiata alla tesi di dottorato di Bläser qui . (È in tedesco, ma probabilmente non avrai problemi con questo :-)). Dovrebbe coprire i dettagli del calcolo effettivo di una copertura a 2 cicli con peso massimo.
Juho,

|V|nn

Pensandoci ancora un po ', non sono sicuro che sia effettivamente possibile formulare il problema in termini di pesi. Con pesi uguali, tutte le coperture del ciclo hanno lo stesso peso. Il mio "costo" per un ciclo è in realtà la sua lunghezza meno 1. Ecco perché voglio il maggior numero possibile di cicli. Se questo potrebbe essere formulato in termini di pesi, si riduce al problema di assegnazione, ma in caso contrario credo di dover continuare a cercare.
Martin Ender,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.