Quick Find (QF)
Quick Find
顾名思义就是快速查找,构建一个数组,通过下标即可迅速查找其id
Union and Find:构建一个数组,下标为索引,数组元素的值为其id,初始id和索引相同
Union(p,q):每连接一对,就遍历一遍数组,凡是和p有相同id的元素,把他们的id都改成q的id
Find(i):直接返回下标为i的id值
class QuickFind():
#define a arr
__id=[]
def __init__(self,N):
for i in range(0,int(N)):
#initial the id arr
self.__id.append(i)
def find(self,i):
#quick find:use i to index it's id in the arr
return self.__id[i]
def connected(self,p,q):
#if they got same id,then they are connected
return self.__id[p]==self.__id[q]
#union p,q;change p's id to q 's one
def union(self,p,q):
#firstly,get the value of __id[p] and __id[q]
pid=self.__id[p]
qid=self.__id[q]
for i in range(0,len(self.__id)):
#change all element's __id to q's one
#which are same with previous p
if self.__id[i]==pid:
self.__id[i]=qid
def traversal(self):
for i in self.__id:
print(i,end=' ')
UF = QuickFind(8)
UF.union(0,1)
UF.union(0,4)
UF.union(3,5)
print(UF.connected(1,4))
UF.traversal()
实例中构建了长度为8的数组,依次连接了0-1,0-4,3-5
然后检查1-4是否连接,并遍历了数组值
下面是输出:
True
4 4 2 5 4 5 6 7
可以看见0-1-4具有相同id且是4的id, 3-5同为5的id.
Q:
原版java实现中有这样一句:
The mistake we might make is to put ID of P here rather than first picking out, that value. And you can think about the implications of that.
就是针对
int pid=id[p];
这一句,为什么一定要先取出他的值,而不是直接一直用id[p] ???
A:
假设p为0,且id[0]和id[1]相等,
在循环里,假设上一次恰好修改了id[0]的值,下一次轮到id[1]和id[p]比较,
此时id[p]即id[0]已经更改为新值,不再和id[1]相等,所以要先取出它的值.
这里我起先也没看懂,等动手验证的时候就明白了
Quick Find (QF)的更多相关文章
- Linux 远程登录——(九)
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable ...
- [算法]——快速排序(Quick Sort)
顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn).虽然从此角度讲,也有很多排序算法如归并排序.堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于 ...
- Quick Cocos (2.2.5plus)CoinFlip解析(MenuScene display AdBar二次封装)
转载自:http://cn.cocos2d-x.org/tutorial/show?id=1621 从Samples中找到CoinFlip文件夹,复制其中的 res 和 script 文件夹覆盖新建工 ...
- 《Qt Quick 4小时入门》学习笔记4
http://edu.csdn.net/course/detail/1042/14806?auto_start=1 Qt Quick 4小时入门 第七章:处理鼠标与键盘事件 1.处理鼠标事件 鼠标信号 ...
- 《Qt Quick 4小时入门》学习笔记3
http://edu.csdn.net/course/detail/1042/14807?auto_start=1 Qt Quick 4小时入门 第八章:Qt Quick中的锚(anchors)布局 ...
- 《Qt Quick 4小时入门》学习笔记2
http://edu.csdn.net/course/detail/1042/14805?auto_start=1 Qt Quick 4小时入门 第五章:Qt Quick基本界面元素介绍 1. ...
- spring in action 4th --- quick start
读spring in action. 环境搭建 quick-start依赖注入 面向切面 1.环境搭建 jdk1.8 gradle 2.12 Intelij idea 2016.2.1 1.1创建一个 ...
- A Quick Introduction to Linux Policy Routing
A Quick Introduction to Linux Policy Routing 29 May 2013 In this post, I’m going to introduce you to ...
- Quick Apps for Sharepoint小型BI解决方案
Quick Apps for Sharepoint介绍 Quick Apps for Sharepoint前身是Quest Webpart ,由企业软件开发商QuestSoftware开发,Quest ...
随机推荐
- idc交叉引用
#查找所有调用MSHookFunction的地方 ea=LocByName("MSHookFunction") if None !=ea: refs = idautils.Code ...
- Cocos Creator 音频API控制调频
*****音频的一些控制***** cc.audioEngine.playMusic(this.BGAudio,true);//播放音乐(true代表循环) cc.audioEngine.stopMu ...
- Web API 入门 二 媒体类型
还是拿上面 那篇 Web API 入门 一 的那个来讲 在product类中加一个时间属性
- C#7.0新特性(VS2017可用)
分享一下其实2016年12月就已经公布了的C#7.0的新特性吧,虽然很早就出来了,但咱这IDE不支持啊.. 不过在昨天的VS2017中已经完美可以支持使用了. E文好的,移步官方介绍地址:https: ...
- Unity shader学习之屏幕后期处理效果之均值模糊
均值模糊,也使用卷积来实现,之不过卷积中每个值均相等,且相加等于1. 代码如下, 子类: using UnityEngine; public class MeanBlurRenderer : Post ...
- powerdesign、navacat、ER图、uml、类图、时序图
关于建表和生成实体以及ER图的简便方法 a:用navacat客户端生成简单的ER图,并生成建表sql,执行生成表. b:用powerdesign连接数据库,反向生成带有注释的ER图. c:用ideal ...
- 加快cin读取速度
cin在读取大量数据时会比C里的scanf慢很多,但这并不是cin"无能",而是C++为了兼容C,对cin做了scanf的同步,只要关闭这个同步,cin就会有不弱于scanf的速度 ...
- Uva297 Quadtrees【递归建四分树】【例题6-11】
白书 例题6-11 用四分树来表示一个黑白图像:最大的图为根,然后按照图中的方式编号,从左到右对应4个子结点.如果某子结点对应的区域全黑或者全白,则直接用一个黑结点或者白结点表示:如果既有黑又有白,则 ...
- ModelSim仿真教程
本文章详细介绍了怎样用ModelSim仿真Verilog,虽然只是很简单的一个二分频器的例子,但却正式小白入门所需要的. 本教程以ModelSim SE 10.4为例 1. 新建工程 file-> ...
- shell作业控制(后台前台命令)
ctrl+z暂停命令(任务) fg调回命令 | fg +id号 bg放在后台持续执行 vmstat 1 & 在后面加上‘&’ 即相当于bg jobs列出当前的 ...