2011-01-23 7 views
13

(Prima che qualcuno si chiede, non è compiti a casa.)Algoritmo per Least Intersections bordo

Diciamo che avete 2 Array y0 e y1 dove

y0 = [1,2,3,4,5,6] e y1 = [2,1,6,3,4,5]

Avviso y0[0] = y1[1] = 1, significa essenzialmente y0[0] è collegato a y1[1]. Allo stesso modo, y0[2] = y1[3] = 3 quindi sono "connessi" pure.

alt text(cortesia Image: Belisarius)

Ogni elemento in un array ha una voce corrispondente nella seconda matrice. Immaginate ogni elemento nell'array come un vertice e queste connessioni come Bordi da un array all'altro.

ho bisogno di trovare un insieme di bordi (di dimensione massima) in modo tale che nessuno dei "bordi" (o linee) si intersecano.

Nell'esempio precedente, avviso,

  1. Edge 1 e Edge 2 si intersecano.
  2. Edge 6 intersecherà con Edge 3, Edge 4, Edge 5.

Pertanto, la soluzione può essere essere 1,3,4,5 o 2,3,4,5 (size = 4) poiché nessuna di quelle linee si intersecano. Possono esserci più soluzioni, ma ne ho bisogno solo una.

La mia domanda, c'è un problema noto di CS che assomiglia a questo? Quale algoritmo dovrei usare?

Ho cercato di spiegare il mio problema con un esempio, tuttavia, nel caso in cui non sia ancora chiaro chiarirò qualsiasi domanda. Grazie in anticipo.

+0

Questo sembra collegato alla domanda se un grafico è planare e, in caso contrario, quale è il suo più grande sottografo planare. Non conosco alcun algoritmo per questo, comunque. – templatetypedef

+1

Questo è un grafico diretto. Intendi che y0 [0] è connesso a y1 [0]? Perché se y0 [0] = y1 [1] = 1 questo è un punto in modo da non poter formare un bordo da un vertice a se stesso. Quando dici "intersezione" intendi un percorso che crea un ciclo? Ad esempio, se camminassi da un vertice lungo i bordi collegati potresti tornare al vertice iniziale? E questo problema è trovare tutti i cicli a prescindere se sono collegati tra loro? – chubbsondubs

+0

@ chubbard, no, per intersezione, stavo implicando un'intersezione di linee geometriche.E no, 'y0 [0]' non è connesso a 'y1 [0]' ... – st0le

risposta

15

Supponendo che nessun elemento è ripetuto in un singolo array, questo è semplicemente la sottosequenza crescente più lunga.

Senza perdita di generalità, si supponga che il primo array, A1, sia solo [1, 2, 3, ..., n]. Questa trasformazione può essere eseguita in O (n) con un hash-set, o O (nlogn) con un BST.

Nota che il nostro set ha un passaggio a se e solo se contiene i e j con i < j ma j comparire davanti i nel secondo array A2 (sappiamo dal i < j che i appare davanti j in A1).

Quindi se un set non ha attraversamento corrisponde chiaramente ad una sottosequenza crescente di A2 e viceversa.

La sottosequenza crescente più lunga ha una soluzione semplice O (n^2) e una soluzione O (nlogn) leggermente più complessa.

+1

Questo è fantastico! : D – st0le

+2

Avevi ragione riguardo alla mia risposta. Ho cancellato il mio e ho svalutato il tuo. Grazie! –

-1

Quello che viene descritto è noto come matching problem for bipartite graphs. Sospetto che ci sia qualcosa (ancora non dichiarato) sul problema che lo rende difficile da risolvere. Finora non hai posto alcuna restrizione su quali bordi possono essere usati. Supponendo che ci siano alcuni bordi (non tutti) disponibili, quei bordi "possibili" formano un grafico, e quelli che decidi di usare formano un matching massimo. Trovare una corrispondenza massima in un grafico è un algoritmo del tempo polinomiale ed è particolarmente facile codificarlo per il caso bipartito.

Il titolo fa sembrare che le circostanze possano imporre qualche circostanza in modo tale che i bordi "disgiunti" potrebbero non essere fattibili ("intersezioni minime"). Forse vuoi la copertura del bordo (o 1 copertina), cioè che ogni vertice appartiene ad almeno un bordo. Quindi, se i due array "vertex" sono di lunghezza diversa, non ci sarà un "matching perfetto", cioè un matching che è anche una cover. Un risultato classico Hall's Marriage Theorem si caratterizza quando ci sono abbinamenti perfetti in un grafico bipartito. Se il grafico è regolare (tutti i vertici hanno lo stesso grado), allora König's Theorem ci dice che c'è corrispondenza perfetta (e altro).

Aggiunto:

Può valere la pena affermando ciò che il quadro sembra dire circa le restrizioni sui bordi che scelgono. Due serie di vertici hanno coordinate {(i, 0) | i = 1, .., N} e {(j, 1) | j = 1, .., N}. Ci sono N bordi disponibili, segmenti di linea che collegano (i, 0) e (j, 1) ogni volta che y0 [i] = y1 [j]. Sebbene la riga dell'oggetto indichi "intersezioni minime", una soluzione è un sottoinsieme massimo di questi bordi che non ammette intersezioni, una più grande planar straight-line graph contenuta in un dato permutation graph.

Esso è legato alla 2-livello problema crossing minimizzazione qui considerato:

An Alternative Method to Crossing Minimization on Hierarchical Graphs -- P. Mutzel

"Suggeriamo ... rimuovendo il numero minimo di bordi in modo tale che il grafico risultante è a livello k planare. .. In questo articolo affrontiamo il caso k = 2 ... [W] e indirizzo il problema di estrarre un sottografo planare di 2 livelli di peso massimo in un dato grafico a 2 livelli.Questo problema è NP-difficile. "

Il problema presente impone un numero uguale di punti nei due gruppi di vertici, il grafico di base è regolare di grado 1 e non è consentita alcuna scelta nella numerazione o nel posizionamento dei punti. Quindi non è possibile concludere che sia così difficile come quello descritto nel documento sopra. Tuttavia, ci indirizza ai cosiddetti metodi "ramificati e vincolati" per la soluzione esatta di tali problemi.

Consideriamo i "bordi" del problema originale come "nodi" di un nuovo grafico in cui due nodi sono adiacenti se i bordi originali si intersecano. [Questo è un esempio di un grafico di intersezione.] Il problema come riesposto è ora di trovare a maximum independent set del nuovo grafico. I problemi di questo tipo sono in generale NP-difficili, ma ancora una volta sospettiamo che l'estensione dei problemi attuali potrebbe non essere così generale.

Una ragione di sospettare un algoritmo polinomiale potrebbe esistere è la disponibilità di algoritmi tempo polinomiale per massimi sottoinsiemi indipendenti di grafici intersezione per collezioni finite di insiemi convessi planari:

Independent Set of Intersection Graphs of Convex Objects in 2D -- P. Agarwal and M Mustafa

"In questo documento , presentiamo algoritmi di approssimazione per il problema dei set indipendenti sui grafici di intersezione di segmenti di linea e oggetti convessi nel piano. "

C'è un'ulteriore osservazione sulla particolarità del problema attuale che sembra risolverlo in tempo polinomiale. A circle graph è il grafico di intersezione di segmenti di linea che possono essere disegnati come accordi di un cerchio. Con un argomento di pertubazione i bordi rettilinei di un grafico di permutazione possono essere disegnati in tal modo, senza perdita o introduzione di intersezioni.

Ora il problema di impostazione indipendente massimo per i grafici a cerchio può essere risolto in tempo polinomiale. L'articolo di Wikipedia linkato sopra dà questo riferimento:

Nash, Nicholas; Gregg, David (2010), "An output sensitive algorithm for computing a maximum independent set of a circle graph", Information Processing Letters 116 (16): 630–634

ho trovato anche questo riferimento in Google Libri:

Valiente, Gabriel (2003), "A New Simple Algorithm for the Maximum-Weight Independent Set Problem on Circle Graphs", Algorithms and computation: 14th Symposium, ISAAC 2003 Kyoto

+0

'Non ho posto alcuna restrizione su quali bordi possono essere usati. Mi dispiace, potresti elaborare? – st0le

+0

Anche i "bordi" nel problema non si riferiscono ai bordi del grafico, poiché hanno una posizione geometrica esplicita. Quindi, manca un certo isomorfismo –

+0

Poiché il problema è dichiarato non ci sono posizioni geometriche date, nessun dato con il quale potrebbe essere determinato se due spigoli si intersecano in senso geometrico. Questo è il tipo di "restrizione su quali bordi possono essere usati" che renderebbero il problema non banale. – hardmath