c算法
c语言吧
全部回复
仅看楼主
level 1
c闲人 楼主
第一部分:问题示例:连通性(connectivity) 假如已知一个整数对(pair)序列,其中每个整数代表某种类型的一个对象,而且将p-q对解释成“p与q连通”。 假定关系“与.......”是可传递的:如果p与q连通,同时q与r连通,则p与r连通. 我们的目的是编写一段程序,从集合(set)中过滤额外连接对;当程序输入一个对p-q,仅当程序此时已经看到的对不能通过可传递性证明p与q连通时,它才输出该对。如果前面的对表明p与q连通,则程序应该忽略p-q,并继续输入下一个对。如:3-4 3-44-9 4-98-0 8-02-3 2-35-6 5-62-9 2-3-4-95-9 5-97-3 7-34-8 4-85-6 5-60-2 0-8-4-3-26-1 6-1 注释已知一个代表对象间连通性的整数对序列(一楼左边一列)连通性算法的任务是输出那些提供了新连通的对(中间一列)如:对2-9不在输出列中,因为前面的连通暗示存在2-3-4-9连通(右边的为推论佐证)好了,我先吃饭去了 
2004年11月18日 11点11分 1
level 1
c闲人 楼主
由于算法非常多,内容也非常广泛所以我只能列举几个希望大家谅解今天讲的是:连通性问题的快速查找解决方案:#include
#define N 10000main(){ int i,p,q,t,id[N]; for(i=0;i
2004年11月20日 10点11分 2
level 1
c闲人 楼主
连通性问题的快速并集解决方案: 如果我们用下面代码替换上面程序中的while循环体,得到的结果是同样的,但并集运算计算量少,查找运算计算量大。代码中的for循环以及后面的if语句定义了p和q连通的id数组的必要且充分条件。 赋值语句id[i]=j实现并集运算,代码如下: for(i=p;i!=id[i];i=id[i]); for(j=q;j!=id[j];j=id[j]); if(i==j) continue; id[i]=j; printf("%d %d\n",p,q);
2004年11月20日 10点11分 3
level 1
c闲人 楼主
快速并集的加权版本 这个程序是快速并集算法(上一个)的修改版本,它使用一个额外的数组sz完成维护的目的,为每个对象用id[i]==i来表示,即在关联树中节点的数量。因此,并集运算可以连接两棵指定树中的较小者与较大者,以此阻止树中长路径的增长。#include
#define N 10000main(){int i,j,p,q,id[N],sz[N]; for(i=0;i
2004年11月25日 10点11分 4
level 1
c闲人 楼主
对分路径压缩: 如果我们用如下代码替换上一个程序中的for循环,就可以对分我们所遍历的路径长度。这种变化的最终结果是,经过一个长运算序列后,树变得几乎完全扁平。for(i=p;i!=id[i];i=id[i]) id[i]=id[id[i]];for(j=q;j!=id[j];j=id[j]) id[j]=id[id[j]];
2004年11月25日 10点11分 5
level 1
不错
2004年11月27日 03点11分 7
level 0
多发几个过来!!!
2005年01月16日 02点01分 8
level 1
也,我也看了这本书,第一章就讲这个并集查找,看的人心旷神怡的
2005年01月16日 09点01分 9
level 0
请教一下谁知道在哪有买
2005年10月14日 14点10分 10
level 0
顶一下!!!!
2005年10月14日 15点10分 11
level 0
也正在看此书~~~
2005年12月22日 05点12分 12
level 0
不错
2006年05月09日 02点05分 13
level 0
23331
2006年06月18日 00点06分 15
level 1
对于第一个算法,当我把29放在最前边的话,输出的结果中怎么29也输出了呀,
2008年03月25日 12点03分 16
level 0
C算法容易理解不?
2008年03月27日 09点03分 17
level 0
算法是灵魂!!!!!!!!!!!!!!!
2008年03月27日 14点03分 18
level 0
sfadf
2008年04月20日 06点04分 19
level 11
楼主给我讲讲 基于连通性状态压缩的动态规划[抖胸]
2012年07月07日 14点07分 20
level 11
[顶]
2012年07月07日 16点07分 22
1 2 尾页