Nombre de cycles dans un graphique

9

Combien de cycles ( k 3 ) y a-t-il dans un graphe à n sommets tel que le graphe n'a pas de cycle C m ( m > k ) .Ck (k3)nCm (m>k)

Par exemple , k = 3 , alors le graphique aura au plus deux C 3 de sorte que G n'aura pas de C k ( k > 3 ) .n=5k=3C3GCk(k>3).

Je pense qu'il y a des cycles il y aura des conditions ci-dessus satisfaisantes.O(n)

Est-ce que quelqu'un peut m'aider.

Kumar
la source
2
parlez-vous des cycles induits par les sommets? cycles disjoints?
Igor Shinkar
1
La réponse peut dépendre de la parité de . Par exemple, considérons une explosion équilibrée d'un cycle à 5 cycles. Ce graphique ne contient pas de 6 cycles, mais il contient 5 cycles induits par Θ ( n 5 ) . mkΘ(n5)
Igor Shinkar
5
@IgorShinkar J'ai lu la question comme "quel est le nombre maximum de cycles dans un graphe n -vertex qui n'a pas de m- cycle pour tout m > k ?" donc m n'est pas un paramètre, il est universellement quantifiéknmm>km
Sasho Nikolov
Je suppose que vous parlez de cycles induits (trous). Si vous voulez le nombre minimum, c'est sûrement 0, un graphique vide. Si vous voulez le nombre maximum, c'est n ^ 3 pour k = 3 (considérez un graphe complet).
Yixin Cao
@YixinCao Pour k = 3, si vous considérez un graphe complet avec 'n' sommets, alors nous aurons un cycle dont la longueur est supérieure à 3. Je recherche le nombre maximum de cycles de longueur k dans un graphe tel que le graphe ne devrait pas contenir tout cycle de longueur supérieure à k
Kumar

Réponses:

5

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

kO(n)k1k1(k12)

David Eppstein
la source
oui, vous avez raison :)
virgi
1

J'ai écrit un petit programme de clingo pour vérifier les petites valeurs (il peut gérer rapidement des graphiques jusqu'à 7 sommets. Au-delà, la mise à la terre peut prendre un certain temps):

J'ai cette table

                            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

Voici le programme:

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
la source