将图分成循环然后分成路径

时间:2013-03-01 14:56:40

标签: c++ math graph-theory discrete-mathematics notation

首先,我应该说我不熟悉Graph理论,而且我的数学知识也很差。无论如何,我正在使用图形概念进行分析。

基本上,我将无向图(例如G)分解为循环(闭合图)。我的循环的特点是它们是可以在两个顶点之间穿过的最短循环(因为它们是循环,开始和结束是相同的)。根据我的示例图,我的周期是(1,4,5,1)(1,2,3,4,1)(7,9,8,7)(我忽略了长度小于3的周期) 。

编辑:我使用深度优先搜索来获得周期,然后获得最小的周期。

后来,我进一步将这些周期制动成有向路径。在这里,我打破了通过边缘的循环(通过图中的红线),因此我为新路径图插入了开始和结束节点。因此对于周期(7,9,8,7)=>新的有向路径是(a,9,c)(d,8,7,b) 编辑:仅对选定的循环进行进一步分解。它只是插入一个新的向量并更新元素。任何与图论相关的算法都不涉及此处。

然后我用我的数据进行一些分析。

  

我做了以上所有事情。所以,我的问题是如何描述整个   带有数学符号的东西(没有像我说的那样)。这对我来说非常难,因为我甚至没有基础知识。

我正在尝试和谷歌搜索,但仍然无法找到一种方式来描述我做了什么。我想,我所做的事情对你来说很清楚。

  
    
      

那么,请你帮忙,如何描述

             
          
  1. 将无向图分解为周期(最短周期)
  2.       
  3. 通过边缘循环断开并制作有向路径图(如图所示)
  4.            
  
     

用数学符号(根据图论)

我见过许多作者使用不同的符号和符号来定义图形及其子图形,但对我来说,我无法定义这样的东西,因为我的基础太差了。所以,请帮我用正式的数学方法说出这些事情。提前谢谢。

我已插入样本数据以获得想法。 enter image description here

注意:我添加了c ++标签,因为许多计算机科学家都使用图论,并希望得到回应。

1 个答案:

答案 0 :(得分:1)

在尝试将操作置于数学描述中时可能遇到的第一个问题是您对“最短周期”的定义,因为周期通常被定义为由边连接的顶点序列,其中第一个也是最后一个。

数学崩溃课程

在数学中,通常由两组V(如顶点)和E(如边)组描述 集合E由具有两个元素的集合组成,每个元素都是顶点。 如

  • V = {v1,v2,....,vn}

  • E = {...,{vi,vk},...}

E中的每一组都与图表中的一条边相对应。

因此,(连接的)路径通常定义为:

一系列顶点 v1 ,...., vn ,具有对于 vi 序列中每两个连续顶点的属性 vi + 1 集合 {vi,vi + 1} 是集合 E 的元素。

(实际上说:从顶点 vi 到顶点 vi + i 有一条边

周期通常被定义为具有属性的路径: v1 = vn (因此第一个顶点也是最后一个)

这个定义你的例子已经是序列:1,4,1形成一个循环(在数学意义上)

因此,图表中的每个边缘都算作“最短”周期,而给出的示例肯定会更长!

你告诉过你

  

...忽略长度小于3的周期

这并不是一个糟糕的描述的起点。不幸的是,我并没有完全理解你想要执行的后续步骤。

建议

我的建议,或者至少我解决问题的方法是将相当长的描述转换为某种较短的算法描述,同时完善您尝试执行任务的方式。这样做到最后的描述不应该太难实现。特别是不要忘记告诉您算法的输入到底是什么。即便如此,您的描述似乎也不太清楚。

  • 你是从一组众所周知的“最短”周期开始的吗?
  • 或者您刚刚给出了图表作为输入,并且必须自己确定“最短”的周期?
  • 如果您自己检测到它们究竟是如何完成的? 特别是不要忘记讲述故事的这一部分是否适用,因为它似乎是对你的问题最重要的部分之一。