图中的循环数


9

多少个周期 Ck (k3) 有一个 n 顶点图,使得图没有任何循环 Cm (m>k)

例如 n=5k=3,则图最多包含两个 C3就是这样 G 不会有任何 Ck(k>3).

我在想 O(n) 周期将满足上述条件。

有人可以帮我吗。


2
您是在谈论顶点诱发的循环吗?不连贯的循环?
伊戈尔·欣卡

1
答案可能取决于 mk。例如,考虑5个周期的平衡爆炸。该图不包含6个循环,但包含Θ(n5)诱导5个周期。
伊戈尔·欣卡

5
@IgorShinkar我读到的问题是“最大数量 k循环 n-vertex图没有 m-任何周期 m>k?” m不是参数,它已被普遍量化
Sasho Nikolov

我假设您正在谈论诱发周期(空洞)。如果您需要最小数目,则肯定为0,这是一个空白图表。如果需要最大数量,则k = 3时为n ^ 3(考虑一个完整的图)。
曹一欣

@YixinCao对于k = 3,如果您考虑具有'n'个顶点的完整图,则我们将得到长度大于3的循环。长度大于k的任何周期
Kumar 2013年

Answers:


5

它不是 O(n) 除非 k=3。对于k 偶二部图中最大的循环长度是偶数 Kn,k/2k,长度为-k 周期是 (k21)!nk/2=Θ(nk/2)。例如,K2,n 具有4个周期的二次数,但周期不超过4个。

另一方面,对于任何常数范围 k 在最长周期的长度上,三角形的数目确实是 O(n)。这是一个快速证明:在深度优先的搜索树中,每条边最多从其两个端点的下限到一个祖先k1 向后退,所以树上的任何叶子最多都有度 k1 并且最多属于 (k12)三角形。现在移去叶子并诱导。


是的,您是对的:)
virgi

1

我编写了一个简短的clingo程序来检查较小的值(它可以快速处理多达7个顶点的图形。除此之外,接地可能要花相当长的时间):

我有这张桌子

                            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

这是程序:

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.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.