¿Cómo encuentro la representación más corta para un subconjunto de un conjunto de potencia?

13

Estoy buscando un algoritmo eficiente para el siguiente problema o una prueba de dureza NP.

Sea ΣΣ un conjunto y A P ( Σ )AP(Σ) un conjunto de subconjuntos de ΣΣ . Encuentre una secuencia w Σ wΣ de menor longitud tal que para cada L ALA , haya una k NkN tal que { w k + i0 i < | L | } = L .{wk+i0i<|L|}=L

Por ejemplo, para A = { { a , b } , { a , c } }A={{a,b},{a,c}} , la palabra w = b a cw=bac es una solución al problema, ya que para { a , b }{a,b} hay k = 0k=0 , para { a , c }{a,c} hay k = 1k=1 .

En cuanto a mi motivación, estoy tratando de representar el conjunto de bordes de un autómata finito, donde cada borde puede ser etiquetado por un conjunto de letras del alfabeto de entrada. Me gustaría almacenar una sola cadena y luego mantener un par de punteros a esa cadena en cada borde. Mi objetivo es minimizar la longitud de esa cuerda.

avakar
fuente
1
En otras palabras, el problema es ordenar conjuntos en una secuencia L 1 , ... , L n maximizando | L iL i + 1 | ? L1,,Ln|LiLi+1|
Karolis Juodelė
@ KarolisJuodelė, no creo que sea suficiente, ya que para L i , L i + 1 , L i + 2 puede que tenga que poner elementos en L iL i + 2 en w dos veces, incluso si están en L i + 1 . Por ejemplo, { { a , b } , { a , c } , { a , d } } , puede compartir unLi,Li+1,Li+2LiLi+2wLi+1{{a,b},{a,c},{a,d}}aentre los dos primeros o los dos últimos, pero no entre todos, el más corto w sería b a c a d . wbacad
avakar
@ KarolisJuodelė, además, hay casos en los que para algunos i j , L iL j , lo que lo hace aún más complicado ya que en tal caso el "orden de vecindario" puede no ser total. ijLiLj
avakar
Solo para animarme, si respondí bien la pregunta, si el conjunto es A = { { c , o , w } , { o , w , l } , { w , o , l , f } } , entonces una palabra c o w o w l w o l f satisface los requisitos establecidos, pero (posible) mínimo tal palabra y solución es c o w l f ? :)A={{c,o,w},{o,w,l},{w,o,l,f}}cowowlwolfcowlf
MindaugasK
@MindaugasK, that is correct, very nice example :)
avakar

Respuestas:

4

I believe I found a reduction from Hamiltonian path, thus proving the problem NP-hard.

Call the word wΣwΣ a witness for AA, if it satisfies the condition from the question (for each LALA, there's m1m1 such that {wm+i0i<|L|}=L{wm+i0i<|L|}=L).

Consider the decision version of the original problem, i.e. decide whether for some AA and k0k0, there's a witness for AA of length at most kk. This problem can be solved using the original problem as an oracle in polynomial time (find the shortest witness, then compare its length to kk).

Now for the core of the reduction. Let G=(V,E)G=(V,E) be a simple, undirected, connected graph. For each vVvV, let Lv={v}{eEve}Lv={v}{eEve} be the set containing the vertex vv and all of its adjacent edges. Set Σ=EΣ=E and A={LvvV}A={LvvV}. Then GG has a Hamiltonian path if and only if there is a witness for AA of length at most 2|E|+12|E|+1.

Proof. Let v1e1v2en1vnv1e1v2en1vn be a Hamiltonian path in GG and H={e1,e2,,en1}H={e1,e2,,en1} the set of all edges on the path. For each vertex vv, define the set Uv=LvHUv=LvH. Choose an arbitrary ordering αvαv for each UvUv. The word w=αv1e1αv2e2en1αvnw=αv1e1αv2e2en1αvn is a witness for AA, since Lv1Lv1 is represented by the substring α1e1α1e1, LvnLvn by en1αnen1αn, and for each vivi, i{1,n}i{1,n}, LviLvi is represented by ei1uvieiei1uviei. Furthermore, each edge in EE occurs twice in ww with the exception of |V|1|V|1 edges in HH, which occur once, and each vertex in VV occurs once, giving |w|=2|E|+1|w|=2|E|+1.

For the other direction, let ww be an arbitrary witness for AA of length at most 2|E|+12|E|+1. Clearly, each eEeE and vVvV occurs in ww at least once. Without loss of generality, assume that each eEeE occurs in ww at most twice and each vVvV occurs exactly once; otherwise a shorter witness can be found by removing elements from ww. Let HEHE be the set of all edges occurring in ww exactly once. Given the assumptions above, it holds that |w|=2|E||H|+|V||w|=2|E||H|+|V|.

Consider a contiguous substring of w of the form ue1e2ekv, where u,vV, eiE. We say that u,v are adjacent. Notice that if eiH, then ei={u,v}, because ei occurs only once, yet it is adjacent to two vertices in G. Therefore, at most one of ei can be in H. Similarly, no edge in H can occur in w before the first vertex or after the last vertex.

Now, there are |V| vertices, therefore |H||V|1. From there, it follows that |w|2|E|+1. Since we assume |w|2|E|+1, we get equality. From there we get |H|=|V|1. By pigeonhole principle, there is an edge from H between each pair of vertices adjacent in w. Denote h1h2hn1 all elements from H in the order they appear in w. It follows that v1h1v2h2hn1vn is a Hamiltonian path in G.

Since the problem of deciding the existence of Hamiltonian path is NP-hard and the above reduction is polynomial, the original problem is NP-hard too.

avakar
fuente