2010-07-17 10 views
5

Mi sono imbattuto nel seguente problema algoritmico durante la sperimentazione con algoritmi di classificazione. Gli elementi sono classificati in una polisierarchia, ciò che capisco essere un poset con una singola radice. Devo risolvere il seguente problema, che assomiglia molto allo set cover problem.Selezione di k-sotto-posets

Ho caricato la descrizione del problema Latex-ed here.

La creazione di un algoritmo di approssimazione che soddisfi 1 & 2 è abbastanza semplice, basta iniziare dai vertici di G e "salire" o iniziare dalla radice e "scendere". Supponiamo di iniziare alla radice, espandere iterativamente i vertici e quindi rimuovere i vertici non necessari fino ad avere almeno k sub-reticoli. Il limite di approssimazione dipende dal numero di figli di un vertice, che è OK per la mia applicazione.

Qualcuno sa se questo problema ha un nome proprio, o forse la versione ad albero del problema? Sarei interessato a scoprire se questo problema è NP-difficile, forse qualcuno ha idee per un buon problema NP-difficile da ridurre o ha un algoritmo polinomiale per risolvere il problema. Se entrambi raccolgono your million dollar price. ;)

+0

Non capisco. Se scegli S '= {r} dove r è la radice, allora \ sigma (r) = V. Vuoi dire sigma (s) per essere tutti gli elementi minori o uguali a re maggiore o uguale a s (dove sempre meno l'ordine parziale del reticolo)? – deinst

+1

@deinst Ecco perché 'k' è lì: per rendere il problema più interessante :)' S = {r} 'è la soluzione per' k = 1'. – Bolo

+1

@dareios Si potrebbe voler correggere due errori minori nella dichiarazione del problema. 1) Il secondo paragrafo non è vero in generale, dipende dalla scelta di 'G' (a meno che manchi qualcosa, se' G' contiene due figli e nient'altro, allora 'S = G' è una soluzione con' l = k = 2'. 2) Nel terzo ultimo paragrafo, probabilmente intendi: "[...] vogliamo ancora mantenere ** 2 **." – Bolo

risposta

2

La versione DAG è difficile da (rullo di tamburi) una riduzione dal coperchio di serie. Imposta k = 2 e fai l'ovvio: condizione (2) ci impedisce di prendere la radice. (Si noti che (3) in realtà non implica (2) a causa del limite inferiore k.)

La versione ad albero è un caso speciale della versione di poset in serie parallela, che può essere risolta esattamente in tempo polinomiale. Ecco una formula ricorsiva che dà un polinomio p (x) dove il coefficiente di x n è il numero di copertine di cardinalità n.

Singolo vertice da coprire: p (x) = x.

Altro vertice: p (x) = 1 + x.

Composizione parallela, dove q e r sono i polinomi per i due posets: q (x) r (x).

Composizione in serie, dove q è il polinomio per il poset superiore el, per il fondo: se il poset superiore non contiene vertici da coprire, quindi p (x) = (q (x) - 1) + r (X); altrimenti, p (x) = q (x).

+0

Una buona osservazione con (3) non implica (2), mi mancava totalmente. Modificato nella dichiarazione del problema. Per il resto suppongo di aver bisogno di una notte di sonno prima, grazie per la tua risposta! – dareios

+0

La riduzione è facile davvero, non so perché non potrei farlo ieri. Grazie! – dareios

+0

Per la formula di ricorsione versione albero: Se ho un vertice singolo da coprire, ho p (x) = x come dici tu, in quanto c'è solo una copertura. Per nessun vertice da coprire dovremmo avere p (x) = 1 (poiché la copertina è vuota). Non capisco quando viene applicato il polinomio "Altro vertice: p (x) = 1 + x". Inoltre, non capisco quando il "poset superiore non contiene vertici" (da coprire) si applica: il poset superiore conterrà sempre gli altri posets quindi se non contiene vertici da coprire, gli altri posets non o. Forse la restrizione> = k sulla proprietà minima entra in gioco qui? – dareios