关于求有向图的环结构的顶点集合的算法问题!100分!!我遇到的最难的算法问题!!!

lypetrinet 2004-04-05 08:42:20
各位仁兄,我请教一下关于求有向图的环结构的顶点集合的算法问题!
要求:
1、避开邻接矩阵和和可达性矩阵,因为我处理的有向图顶点会超过10万个,
而matlab只支持大约6000个;c和c++只支持大约200个!!!
2、最好应用c、c++,考虑时间和资源的消耗问题,提供搜索和查找算法应用程序,因为c\c++计算速度相对来说要快!再个本人急需答案。我的机子内存只有256M!
恳切那位高手指点,并付有高分相赠!!谢谢!!!
对于要求1,如果可以解决存储和矩阵运算的问题,也可以!
...全文
56 点赞 收藏 14
写回复
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
vldb 2004-04-18
经典的Tarjan Algorithm就行啊。一个一个找强连通分量。找到一个,删掉所有该强连通分量里的所有点,继续找下一个。每次得到的强连通分量包含着你要的顶点集合。
内存里build你这个图,空间复杂度是n+m,n为点数,m为边数。
用Tarjan Algorithm,递归调用,只需要一个栈,不超过n。
任何一本算法书里都有。
回复
lypetrinet 2004-04-18
那用什么算法来实现求环路那?
回复
能不能考虑用链表来解决这个问题?
比如:用节点来表示图中的各个节点,然后根据连通性用指针指向对应的节点。这种方法可以节约大量空间的。

回复
lypetrinet 2004-04-16
这么久了也没有答案,有兴趣的再考虑考虑吧!
回复
zzwu 2004-04-15
n=10万, 但有必要用n*n阶邻接矩阵吗?

来一道选择题,请回答: 你的实际问题中每个顶点平均连接了几个(其他)顶点?

1.几个
2.几十个
3.几百个
4.几千个
5.几万个

只要不是后面的两种数量级,则问题可以用稀疏矩阵思想解决。

回复
ZhangYv 2004-04-15
10W个的有向图顶点...你处理的是说明问题啊?问题本身能否得到更好的简化?或许你应该考虑解决问题的更好算法,而不是适合你目前算法的数据结构。
回复
lypetrinet 2004-04-15
邻接矩阵可以是稀疏矩阵,但可达矩阵不是稀疏矩阵,不能用稀疏矩阵来存储!
每个顶点平均连接了十几个!
回复
lypetrinet 2004-04-14
?
回复
gnefuil 2004-04-06
c/c++怎么会只能处理200个结点?是用tc吧?
vc你开多大都可以,如果不信任操作系统,可以用文件做缓冲
回复
wlpwind 2004-04-06
内存不是问题,操作系统会使用虚拟内存。

不知道计算速度如何,可以根据要处理的点的特点做一些优化,
可用类似于:稀疏矩阵之类的优化思想。
回复
lypetrinet 2004-04-06
还有vc++声明时值可以很大,但赋值时往往受存储空间所限!!
回复
lypetrinet 2004-04-06
邻接矩阵是二维n*n阶,如果n=100000;那么存储量可达100000*100000*4bit=37G,再大的虚拟内存也无法存储!vc++支持500---600阶二维数组!我试过的!那么最多支持600个结点,大了显示应用程序发生异常unknown software exception(0xc00000fd),位置为0x00403377.首先要能实现,时间问题可以最后考虑!!
回复
zzwu 2004-04-06
tc也不会只支持200个结点,你可以用巨模式,利用堆(heap)的空间.
回复
zzwu 2004-04-06
如果连接不多,比如说,每个节点平均与此10个节点相连,则所用存储器并不多,1M个int型就够了.
回复
发动态
发帖子
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
社区公告
暂无公告