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 aquindi verifica prima di nella sequenza). L' etichetta di è la parola in .
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?)
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 etichettato 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 in). 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.