Enumerazione delle specie topologiche di un DAG marcato con vertici


11

Let sia un grafo orientato aciclico , e lasciare essere una funzione di etichettatura mappatura ogni vertice a un'etichetta in qualche finita alfabeto . Scrittura, una specie topologica di è una biiezione da a (cioè un ordinamento di in una sequenza) tale che ogni volta che poi (cioè, se c'è un bordo da aG=(V,E)λvVλ(v)Ln:=|V|Gσ{1,,n}VV(v,v)Eσ1(v)<σ1(v)vvquindi verifica prima di nella sequenza). L' etichetta di è la parola in .vvσσ(1)σ(n)Ln

Dato , vorrei enumerare in modo efficiente le etichette dei tipi topologici diQual è la complessità dell'enumerazione delle etichette dei tipi topologici? Naturalmente, poiché possono essercene molti in modo esponenziale, voglio studiare la complessità in funzione delle dimensioni dell'output o in termini di ritardo. In particolare, l'enumerazione può essere eseguita con ritardo polinomiale? (o addirittura ritardo costante?)(G,λ)G

Nel caso in cui tutti i vertici di rechino etichette distinte (o, equivalentemente, i vertici sono etichettati da soli), so che le etichette possono essere enumerate in tempo ammortizzato costante, con questo risultato su enumerare le estensioni lineari dei poset (che è la stessa cosa dell'enumerare le specie topologiche di un DAG). Tuttavia, quando i vertici sono etichettati in modo arbitrario, è possibile che un numero molto elevato di ordinamenti topologici abbia la stessa etichetta, quindi non è possibile elencare solo ordinamenti topologici di e calcolare le loro etichette per ottenere un modo efficiente per enumerare le etichette . Nella terminologia poset, il DAG etichettato può essere visto come etichettatoG{1,,n}G(G,λ) poset, e non sono riuscito a trovare risultati di enumerazione su quelli.

Conosco già la durezza di alcuni problemi correlati grazie alle risposte alle mie altre domande qui. In particolare, so che trovare un'etichetta lessicograficamente minimale è NP-difficile . So anche che decidere se una determinata etichetta può essere raggiunta da una sorta di ordinamento topologico è NP-difficile (dalla durezza di questo problema : data una sequenza di etichette candidata , chiedere un tipo topologico di dove ogni vertice deve trovarsi in una posizione dove si trova l'etichetta giusta insGs). Tuttavia, non penso che nulla di tutto ciò implichi la durezza per l'enumerazione, poiché puoi elencare nell'ordine che preferisci (non necessariamente lessicografico) e un algoritmo di enumerazione non può essere usato per decidere in modo efficace se un'etichetta sia realizzabile, anche con ritardo costante (poiché potrebbero esserci in modo esponenziale molte sequenze da enumerare per prime).

Si noti che, è ovviamente facile enumerare una prima etichetta (basta prendere qualsiasi tipo topologico). Per enumerare un'altra etichetta rispetto a , puoi procedere imponendo che un elemento di venga enumerato in una posizione dove : prova ogni e , e controlla se ha un ordinamento topologico in cui è nella posizione , che può essere chiaramente fatto in PTIME. Ma man mano che produci sempre più etichette, non sono sicuro di come generalizzare questo approccio.ssvVi{1,,n}siλ(v)viGvi

Risposte:


-1

Uno dei modi più semplici per calcolare l'ordinamento topologico consiste nell'eseguire una prima ricerca di profondità sul DAG specificato. Diversi ordini topologici possono essere generati sfruttando la flessibilità di scegliere il prossimo vertice da attraversare dai vicini non visitati dell'attuale vertice . Poiché, è una procedura ricorsiva enumerare tutte attraversamenti possibili (e quindi ordini topologici) sarebbe semplice, scegliendo diversi ordini in cui non visitati vicini di sono attraversati.vuu

Ora, al fine di limitare ripetere lo stesso attraversamento a causa di etichette simili, si possono confrontare i vicini non visitati di avere etichette simili. Consideriamo due vertici e che hanno gli stessi vicini di casa non visitati quando l'attraversamento raggiunge . Sicuramente la scelta di uno di essi per primo genererebbe lo stesso albero DFS e quindi ognuno di essi può essere evitato.v1,v2,...,vkuvivju

Ora, confrontando i vicini di tutti porterebbe a un sovraccarico di sul tempo totale, ma può essere eseguito in modo più efficiente in usando i dati appropriati strutture.v1,...,vkO(n2)O~(n)


Grazie per la tua risposta! Tuttavia, non capisco perché la modifica suggerita nel primo paragrafo sia sufficiente a garantire che venga prodotta una diversa etichetta di ordinamento topologico dopo molti passaggi polinomiali. Ad esempio, se tutti gli elementi hanno la stessa etichetta, allora c'è solo un'etichetta di ordinamento topologico da enumerare, ma non sono sicuro di vedere perché il tuo algoritmo se ne accorgerebbe e terminerebbe in modo sufficientemente rapido? (Un altro punto: dici "vicino", ma il grafico è un DAG; intendevi "bambino"?)
a3nm,

La modifica nel primo paragrafo è generare tutti i possibili ordini indipendentemente dalle etichette. Al fine di limitare gli ordini nel caso di etichette simili, è importante evitare di selezionare i vertici delle stesse etichette se sembrano essere collegati in modo simile al restante grafico non visitato. Quindi, avrebbero creato un grafico isomorfo non visitato che generava lo stesso ordine topologico.
sbzk,

Nel caso in cui tutte le etichette siano uguali è un caso banale, altrimenti anche una singola etichetta diversa può portare a molti ordini diversi. Un modo per ridurre al minimo il calcolo sarebbe quello di evitare l'elaborazione di grafici isomorfi non visitati. Sono d'accordo ora che potrebbe non garantire un overhead , ma forse può dare una buona euristica. O(n2)
sbzk,

Grazie per la spiegazione. Tuttavia, sto cercando un polinomio legato alla complessità che si applica a tutti i casi, non un'euristica senza garanzie teoriche! :)
a3nm,
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.