Número de ciclos en un gráfico

9

¿Cuántos ciclos hay en un gráfico de vértices de modo que el gráfico no tenga ningún ciclo ? ( k 3 ) n C m ( m > k )Ck (k3)nCm (m>k)

Por ejemplo, , , entonces el gráfico tendrá como máximo dos para que no tenga ningúnk = 3 C 3 G C k ( k > 3 ) .n=5k=3C3GCk(k>3).

Estoy pensando que hay ciclos que estarán allí satisfaciendo las condiciones anteriores.O(n)

Alguien me puede ayudar.

Kumar
fuente
2
¿Estás hablando de ciclos inducidos por vértices? ciclos disjuntos?
Igor Shinkar
1
La respuesta puede depender de la paridad de mk . Por ejemplo, considere una explosión equilibrada de un ciclo de 5. Este gráfico no contiene 6 ciclos, pero contiene Θ(n5) inducidas 5 ciclos.
Igor Shinkar
55
knmm>km
Supongo que estás hablando de ciclos inducidos (agujeros). Si desea el número mínimo, seguramente es 0, un gráfico vacío. Si desea el número máximo, es n ^ 3 para k = 3 (considere un gráfico completo).
Yixin Cao
@YixinCao Para k = 3, si considera un gráfico completo con 'n' vértices, entonces tendremos un ciclo cuya longitud es mayor que 3. Estoy buscando el número máximo de ciclos de longitud k en un gráfico, de modo que el gráfico no debe contener cualquier ciclo de longitud más de k
Kumar

Respuestas:

5

O(n)k=3kKn,k/2kk(k21)!nk/2=Θ(nk/2)K2,n

kO(n)k1k1(k12)

David Eppstein
fuente
sí, tienes razón :)
virgi
1

Escribí un breve programa de clingo para verificar los valores pequeños (puede manejar rápidamente gráficos de hasta 7 vértices. Más allá de eso, la conexión a tierra puede tomar bastante tiempo):

Tengo esta mesa

                            n (vertices)
                         3   4   5   6   7

                      3  1   1   2   2   3

                      4      3   3   6  10

k (cycle length)      5         12  12  12

                      6             60  60

                      7                360

Aquí está el programa:

num(1..n).
is_sym_order(empty,0).
ncontains(empty,K) :- num(K).
is_sym_order(cons(K,empty),1) :- num(K).
last(cons(K,empty), K) :- num(K).
is_sym_order(cons(K,S),M+1) :- is_sym_order(S,M), ncontains(S,K), last(S,L), K > L.
ncontains(cons(K,S), J) :- J != K, ncontains(S,J), is_sym_order(cons(K,S),_).
last(cons(K,S), L) :- last(S,L), is_sym_order(cons(K,S),_).
sec_last(cons(A,S),A) :- is_sym_order(cons(A,S),2).
sec_last(cons(K,S), SL) :- sec_last(S,SL), is_sym_order(cons(K,S),_).
is_sub_order(cons(A,S), M) :- A > SL, sec_last(S,SL), is_sym_order(cons(A,S), M).

vertex(1..n).
{is_edge(V,W)} :- vertex(V), vertex(W), V < W.
sym_edge(V,W;W,V) :- is_edge(V,W).

is_path(cons(V,empty)) :- vertex(V).

is_path(cons(A,cons(B,S))) :- is_path(cons(B,S)), sym_edge(A,B), is_sym_order(cons(A,cons(B,S)),_).
is_cycle(cons(A,S)) :- is_path(cons(A,S)), is_edge(V,A), last(S,V), is_sub_order(cons(A,S),M), M >= k.

:- is_cycle(S), is_sub_order(S,M), M > k.
prim_cycle(S) :- is_cycle(S), is_sub_order(S,k).
:~ not is_cycle(S), is_sub_order(S,k).[1,S]

num_cycs(C) :- C = #count{is_cycle(S):is_cycle(S)}.
#show is_edge/2.
#show num_cycs/1.
#show prim_cycle/1.
dspyz
fuente