问一个关于无向图的子图的算法

kurokawa 2009-05-20 01:15:19
问题是这样:已知一个无向图。
现从图中选取若干个顶点,构成一个连通子图(若无法构成则可以再添加顶点)。要求添加最少的顶点构成连通子图,并返回子图。

只要思路就行了,或者有相似的问题的帖子链接给我也好,期待各位的帮忙
...全文
252 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
kurokawa 2009-06-03
  • 打赏
  • 举报
回复
时间紧张,先用删点法处理了,虽然不是最优解,不过至少解里面没有冗余,时间复杂度也还可以接受。

这个算法是用在数据库里面的,就是在两个任意的数据表中间补全一些表,建立起关联条件。一般来说数据表也有百余个,效率上不是很慢。

结贴散分,谢谢大家参与。
lvjaio5241 2009-05-24
  • 打赏
  • 举报
回复
学习
kurokawa 2009-05-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 allen303allen 的回复:]
我的方法其实要反复循环直到出现无法删除的情况,如果原来图的连通情况比较好的话,节点间彼此依赖不大,效率应该可以不错。最坏情况就很难说了。
如果这个题从局部去考虑的话有点像NP的最小顶点覆盖了。貌似也可以用近似算法,但是要最优解的话暂时没想到 好的算法。这几天有点忙,都没时间来看贴了。 [/Quote]

呵呵,后来我考虑了一下,正如7楼所说,这个受删除点的顺序影响。
举例来说,最后的解除了最优解以外还有别的解。那么如果第一步就删除了最优解中的一个点,还是可以得到联通子图,但却不是最优解。

苦恼啊,我想了好几天也还是没好的思路……
allen303allen 2009-05-21
  • 打赏
  • 举报
回复
我的方法其实要反复循环直到出现无法删除的情况,如果原来图的连通情况比较好的话,节点间彼此依赖不大,效率应该可以不错。最坏情况就很难说了。
如果这个题从局部去考虑的话有点像NP的最小顶点覆盖了。貌似也可以用近似算法,但是要最优解的话暂时没想到 好的算法。这几天有点忙,都没时间来看贴了。
[Quote=引用 7 楼 litaoye 的回复:]
其实如果真能达到1楼所说的效率,那么应该算是一个还不错的方法,不过1楼所给的方法所求的解依赖于节点删除的顺序,
因此有很大可能得不到最优解。如果找不到什么有效的办法的话,这题求最优解恐怕计算量会是指数级的!

引用 6 楼 kurokawa 的回复:
引用 5 楼 litaoye 的回复:
呵呵,不用BS你的数据结构老师,直接BS我就行,我基础不扎实,有些概念经常弄混。

不知是否可以转为最小费用最大流的问题?


我对算法研…
[/Quote]
allen303allen 2009-05-21
  • 打赏
  • 举报
回复
你的图应该是无权的,那所谓的到其他顶点的最短距离就是中间经过的顶点数吧。因为要考虑到具体经过的顶点跟原顶点间的关系,还是要遍历顶点,所以我认为记录顶点间的最短距离不会有太大的帮助。

[Quote=引用 2 楼 kurokawa 的回复:]
恩,题目的意思就是给定一个无向图,和该图上的若干顶点,尝试加入最少顶点构造一个连通子图。
现在追加一点:一开始给的无向图就是全连通的,所以可以省去算最大连通子图的步骤。

1楼的方法,在“顶点很多,选取的点很少”时,效率会受影响吧?

有没有从给定的点向外推算的方法?(每个顶点是一个对象,可以获得与它相邻的顶点)
如果需要,我可以在初始化无向图的时候,在每个顶点对象里面存储它到其他所有顶点的最短…
[/Quote]
绿色夹克衫 2009-05-20
  • 打赏
  • 举报
回复
其实如果真能达到1楼所说的效率,那么应该算是一个还不错的方法,不过1楼所给的方法所求的解依赖于节点删除的顺序,
因此有很大可能得不到最优解。如果找不到什么有效的办法的话,这题求最优解恐怕计算量会是指数级的!

[Quote=引用 6 楼 kurokawa 的回复:]
引用 5 楼 litaoye 的回复:
呵呵,不用BS你的数据结构老师,直接BS我就行,我基础不扎实,有些概念经常弄混。

不知是否可以转为最小费用最大流的问题?


我对算法研究不深,刚去查了一下最小费用最大流问,感觉好像那样更复杂化了……
[/Quote]
kurokawa 2009-05-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 litaoye 的回复:]
呵呵,不用BS你的数据结构老师,直接BS我就行,我基础不扎实,有些概念经常弄混。

不知是否可以转为最小费用最大流的问题?
[/Quote]

我对算法研究不深,刚去查了一下最小费用最大流问,感觉好像那样更复杂化了……
绿色夹克衫 2009-05-20
  • 打赏
  • 举报
回复
呵呵,不用BS你的数据结构老师,直接BS我就行,我基础不扎实,有些概念经常弄混。

不知是否可以转为最小费用最大流的问题?

[Quote=引用 4 楼 kurokawa 的回复:]
引用 3 楼 litaoye 的回复:
全连通的意思是强连通?

如果强连通的话,就不用加点了。

2个点的话,应该可以转化为最短路径的问题。
2个点以上,印象中有多项式解法,具体记不太清了,谁让咱图论不行呢!
明天有空的话,帮LZ查查!


强连通是任意两点可直达,全连通是任意两点可达,如果我的理解错误,请BS我的数据结构老师……
多项式解法啊,我去查查,谢谢你!
[/Quote]
kurokawa 2009-05-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 litaoye 的回复:]
全连通的意思是强连通?

如果强连通的话,就不用加点了。

2个点的话,应该可以转化为最短路径的问题。
2个点以上,印象中有多项式解法,具体记不太清了,谁让咱图论不行呢!
明天有空的话,帮LZ查查!
[/Quote]

强连通是任意两点可直达,全连通是任意两点可达,如果我的理解错误,请BS我的数据结构老师……
多项式解法啊,我去查查,谢谢你!
绿色夹克衫 2009-05-20
  • 打赏
  • 举报
回复
全连通的意思是强连通?

如果强连通的话,就不用加点了。

2个点的话,应该可以转化为最短路径的问题。
2个点以上,印象中有多项式解法,具体记不太清了,谁让咱图论不行呢!
明天有空的话,帮LZ查查!
kurokawa 2009-05-20
  • 打赏
  • 举报
回复
恩,题目的意思就是给定一个无向图,和该图上的若干顶点,尝试加入最少顶点构造一个连通子图。
现在追加一点:一开始给的无向图就是全连通的,所以可以省去算最大连通子图的步骤。

1楼的方法,在“顶点很多,选取的点很少”时,效率会受影响吧?

有没有从给定的点向外推算的方法?(每个顶点是一个对象,可以获得与它相邻的顶点)
如果需要,我可以在初始化无向图的时候,在每个顶点对象里面存储它到其他所有顶点的最短路径。这样每次构造子图的时候效率会不会高?

我希望能有一个高效的算法。
allen303allen 2009-05-20
  • 打赏
  • 举报
回复
如果全都自己选取的话,那任意一个点或者两个相邻的点都是原无向图的连通子图吧。
那题目的意思是不是给定一个无向图和给定的几个点,要在这些点的基础上自己加顶点构成一个连通子图?

我觉得可以先求出这个无向图的各个连通分量,即最大连通子图,如果这些给定的点不在同一个连通子图内的话,那就肯定不存在所求的连通子图。如果存在,就在该最大连通子图的基础上,枚举不在给定点范围内的其他顶点,如果去掉该顶点后图形仍然连通,就去掉该顶点,到无法再去掉顶点的时候,所得的连通子图就是要求的连通子图,多出来的顶点就是要加上的最少的顶点。
程序 = 数据结构 + 算法  程序是为了解决实际题而存在的。然而为了解决题,必定会使用到某些数据结构以及设计一个解决这种数据结构的算法。如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功。编程实战算法,不是念PPT,我们讲的就是实战与代码实现与企业应用。程序 = 数据结构 + 算法                ——图灵奖得主,计算机科学家N.Wirth(沃斯)作为程序员,我们做机器学习也好,做python开发也好,java开发也好。有一种对所有程序员无一例外的刚需 —— 算法与数据结构日常增删改查 + 粘贴复制 + 搜索引擎可以实现很多东西。同样,这样也是没有任何竞争力的。我们只可以粘贴复制相似度极高的功能,稍复杂的逻辑没有任何办法。语言有很多,开发框架更是日新月异3个月不学就落后我们可以学习很多语言,很多框架,但招聘不会考你用5种语言10种框架实现同一个功能。真正让程序员有区分度,企业招聘万年不变的重点 —— 算法与数据结构。算法代表程序员水平的珠穆朗玛。 本视频由微软全球最有价值专家尹成录制,拒绝念PPT,代码实战数据结构与算法导论。除了传统数据结构算法,加入高并发线程安全数据结构,分布式负载均衡算法,分布式哈希表,分布式排序等等现代算法。  算法,晦涩难懂,却又是IT领域受重视的素养之一。可以说,算法能力往往决定了一个程序员能够走多远。因此,BAT/FLAG等国内外各大名企非常喜欢在面试环节考核求职者的算法编程,这也成为了无数准程序员们过不去的一道“坎”。如何入门并成为一名出色的算法工程师?但无论半路出家还是科班出身,除学生时代搞算法竞赛的同学外真正用心学习过算法与数据结构太少太少。对于后期想要学习算法与数据结构却不得不面对以下题:没有自己的知识框架,无法关联知识点,学习效率低有疑而无人解答,有题无法理解全靠猜测,一个题卡好几天市面上资料题解质量参差不齐,正确性未可知Google算法-工程师尹成大哥学习算法
人类基因组计划的基本完成表明后基因组时代的到来。 人类积累的大量的生物信息数据为揭开生命奥秘提供了数据基础,生物学研究的热点由对细胞内个别基因或蛋白质功能的局部性研究,转移到以细胞内全部的基因、蛋白质及代谢产物为整体对象的系统研究。对基因调控网络、蛋白质相互作用网络、代谢路径网络等结构及功能模块的检测技术的研究,逐步把分子生物学推入系统生物学时代。 基因与蛋白质通过网状的相互作用产生更高一级的功能模块,所以,通过数学建模来设计有效的算法,在生物网络中进行功能模块的挖掘和分析,将有助于更好地研究生物体自身的功能和不同生物体之间的进化关系,为分析理解生命基本规律提供依据。 本文对基于图论的经典频繁子图挖掘算法进行了系统的研究和全面的总结,在此基础上提出了一种新的挖掘频繁子图算法,该算法包含子图的搜索算法及同构分类算法。 对子图搜索题,提出了环分布的概念,并构造了基于环分布的子图搜索算法ESR(EnumerateSubgraphs based on Ring);对子图同构题,利用度序列和特征值构造了两种算法,分别用于对有向图和无向图的同构判别;利用同构算法对搜索出的子图进行同构分类,根据分类结果得到频繁子图。 管理毕业论文网www.yifanglunwen.com;音乐毕业论文www.xyclww.com;经济论文www.youzhiessay.com 教育论文www.hudonglunwen.com;医学论文网www.kuailelunwen.com;英语毕业论文www.vipvo.com 当网络规模比较大时,子图数量非常庞大,同构分类的工作量很大,为此又提出了随机归类算法和Hamilton子图的挖掘算法,以减少同构分类的运算量。 随机归类算法是通过从子图集中随机地抽取一定数量的子图进行同构分类,是一种近似的算法;Hamilton子图的挖掘算法旨在挖掘特定类型(具有Hamilton回路)的子图,以减少搜索结果集。最后对5个真实生物网络进行了仿真实验研究,找出了不同规模的频繁子图,实验结果表明本文提出的算法优于现有的算法

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧