Bir Grafikteki döngü sayısı


9

Bir tepe grafiğinde kaç tane döngüsü vardır, öyle ki grafikte herhangi bir döngü .Ck (k3)nCm (m>k)

Örneğin , , grafikte en fazla iki bulunacaktır, böylece herhangi bir sahipn=5k=3C3GCk(k>3).

Ben olduğunu düşünüyorum devir koşulları yukarıda orada tatmin olacaktır.O(n)

Bazıları bana yardım edebilir mi?


2
Köşe kaynaklı döngülerden mi bahsediyorsunuz? ayrık döngüler?
Igor Shinkar

1
Cevap paritesine bağlı olabilir . Örneğin, 5 döngünün dengeli bir patlamasını düşünün. Bu grafik 6 döngü içermez, ancak indüklenen 5 döngü içerir. mkΘ(n5)
Igor Shinkar

5
"Maksimum sayıda nedir olarak @IgorShinkar Soruyu okumak bir in -cycles hiçbir vardır -vertex grafiğinde herhangi -cycle ?" bu yüzden bir parametre değildir, evrensel olarak nicelendirilirknmm>km
Sasho Nikolov

Sanırım indüklenmiş döngülerden (delikler) bahsediyorsunuz. Minimum sayıyı istiyorsanız, kesinlikle 0, boş bir grafiktir. Maksimum sayıyı istiyorsanız, k = 3 için n ^ 3'tür (tam bir grafik düşünün).
Yixin Cao

@YixinCao k = 3 için, 'n' köşeleri olan tam bir grafik düşünürseniz, uzunluğu 3'ten fazla olan bir döngüye sahip olacağız. Bir grafikte, grafik içermemesi gereken maksimum uzunluk k sayısı döngüsünü arıyorum k'den fazla herhangi bir döngü
Kumar

Yanıtlar:


5

olmadığı sürece değildir . İçin bile tam ikili grafikte bir döngü uzunluğu en olduğu ve uzunluk- sayısı döngüleri olan . Örneğin, ikinci dereceden 4 döngüye sahiptir, ancak 4'ten daha uzun döngüye sahip değildir.O(n)k=3kKn,k/2kk(k21)!nk/2=Θ(nk/2)K2,n

Öte yandan, en uzun çevrimin uzunluğundaki herhangi bir sabit bağlı için, üçgen sayısı gerçekten . İşte hızlı bir kanıt: derinlemesine bir ilk arama ağacında, her kenar iki uç noktasının altından en fazla adımda bir ataya gider , bu nedenle ağacın herhangi bir yaprağı en fazla derecesine sahiptir ve çoğu üçgen. Şimdi yaprağı çıkarın ve indükleyin.kO(n)k1k1(k12)


evet, haklısın :)
virgi

1

Küçük değerleri kontrol etmek için kısa bir clingo programı yazdım (7 köşeye kadar olan grafikleri hızlı bir şekilde işleyebilir. Bunun ötesinde, topraklama biraz zaman alabilir):

Bu masayı aldım

                            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

İşte program:

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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.