算法I-IV(C++实现)-读书笔记(2)
来源:互联网 发布:11.4恒大淘宝的比赛 编辑:程序博客网 时间:2024/05/01 13:00
最近几天为一些事务所缠,没怎么好好看,罪过罪过。。。
解决连通问题,用Quick-find的话似乎效率不高,尤其是for语句遍历整个数组的实现在遇见数组牛大的时候会导致效率牛低。
接下去的这个算法叫做Quick-union,它的实现不用遍历数组。
// Quick-union solution to connectivity problem
#include <iostream>
using namespace std;
static const int N = 10000;
int main()
{int i,j, p, q, id[N];
for (i = 0; i < N; i++) id[i] = i;
while (cin >> p >> q)
{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;
cout << " " << p << " " << q << endl;
}
}
原理和Quick-find一样,建立一个数组,判断数组下标对应的数字是否连通(connectivity)的依据是下标对应的数组值是否相同。
但是它用了两个for语句形成一个回溯的实现(可能用语不恰当)输入p,q,第一个for语句先将p赋值给i,然后直接从第id[p]开始检测,当i不等于id[p],即id[p]已经与其他数字连通时,进入循环,通过i = id[i]回溯所有连通的数字,然后用 id[i] = j;将这些数字连通(数组值一样)。
这个方法明显在通常情况下搜索数组元素较少,比Quick-find效率高。
- 算法I-IV(C++实现)-读书笔记(2)
- 算法I-IV(C++实现)-读书笔记(1)
- 读书笔记(IV) 陶哲轩实分析
- 《Effective C++》读书笔记IV
- 《C算法》读书笔记 (2):约瑟夫
- Expert C Programming读书笔记IV
- 算法笔记(IV) 字典
- 算法I-IV,连通问题简单整理
- 《C算法》读书笔记 (4):Hello,Joseph!
- 《C算法》读书笔记(6):词法分析
- I.MX51 IPU读书笔记(2)
- 【算法】深度优先搜索(DFS)IV
- 《Effective C++》读书笔记I
- hdu 2077 汉诺塔IV(java && c)
- 《机器学习实战》读书笔记—k近邻算法c语言实现(win下)
- 算法导论读书笔记(2)
- 数据结构(C语言)读书笔记2:算法与算法分析概述
- 算法导论读书笔记(2)算法基础
- 国内破解站点大全!
- 高手教你一招:网络共享打印变零为整
- 小结面向对象的类的设计方式
- J2ME的个人见解
- 无聊一日
- 算法I-IV(C++实现)-读书笔记(2)
- 联合查询
- [人生日志]微软的用人标准及自我分析
- 自嘲
- 明天去复旦大哥家,今天早点睡
- 预览图tag的做法
- 初学者基础教学篇一——握拍
- 初学者基础教学篇二——后场球
- 封装 JMail 4.4 的 POP3 为 .Net 组件 (.dll 程序集),实现 "邮件(附件) 到达" 等 "事件"!