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)的更多相关文章

  1. Linux 远程登录——(九)

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable ...

  2. [算法]——快速排序(Quick Sort)

    顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn).虽然从此角度讲,也有很多排序算法如归并排序.堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于 ...

  3. Quick Cocos (2.2.5plus)CoinFlip解析(MenuScene display AdBar二次封装)

    转载自:http://cn.cocos2d-x.org/tutorial/show?id=1621 从Samples中找到CoinFlip文件夹,复制其中的 res 和 script 文件夹覆盖新建工 ...

  4. 《Qt Quick 4小时入门》学习笔记4

    http://edu.csdn.net/course/detail/1042/14806?auto_start=1 Qt Quick 4小时入门 第七章:处理鼠标与键盘事件 1.处理鼠标事件 鼠标信号 ...

  5. 《Qt Quick 4小时入门》学习笔记3

    http://edu.csdn.net/course/detail/1042/14807?auto_start=1 Qt Quick 4小时入门 第八章:Qt Quick中的锚(anchors)布局 ...

  6. 《Qt Quick 4小时入门》学习笔记2

    http://edu.csdn.net/course/detail/1042/14805?auto_start=1   Qt Quick 4小时入门 第五章:Qt Quick基本界面元素介绍   1. ...

  7. spring in action 4th --- quick start

    读spring in action. 环境搭建 quick-start依赖注入 面向切面 1.环境搭建 jdk1.8 gradle 2.12 Intelij idea 2016.2.1 1.1创建一个 ...

  8. 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 ...

  9. Quick Apps for Sharepoint小型BI解决方案

    Quick Apps for Sharepoint介绍 Quick Apps for Sharepoint前身是Quest Webpart ,由企业软件开发商QuestSoftware开发,Quest ...

随机推荐

  1. API 接口自动化测试框架

    转自: https://testerhome.com/topics/3455 前言 接口自动化逐渐成为各大公司投入产出最高的测试技术.但是如何在版本迅速迭代过程中提高接口自动化的测试效率,仍然是大部分 ...

  2. cocos2dx 3.x(绘制线条)

    // //  MainScene.hpp //  helloworld // //  Created by apple on 16/9/19. // // #ifndef MainScene_hpp ...

  3. CSS3 transition-timing-function 深入理解和技巧

    基础 语法: transition-timing-function : ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier( ...

  4. Eclipse 在Debug调试中用到的快捷键

    作用域 功能 快捷键 全局 单步返回 F7 全局 单步跳过 F6 全局 单步跳入 F5 全局 单步跳入选择 Ctrl+F5 全局 调试上次启动 F11 全局 继续 F8 全局 使用过滤器单步执行 Sh ...

  5. Rpgmakermv(12) gacha插件系列

    很有趣的插件,可以做扭蛋啦,抽奖啦之类的东西.... 简单的示范: a.开始抽奖画面: b.抽奖中 c.随机得到物品 d.查看收集图鉴 e.图鉴内容 1.gacha 作用: get the item ...

  6. 互联网级监控系统必备-时序数据库之Influxdb技术

    时间序列数据库,简称时序数据库,Time Series Database,一个全新的领域,最大的特点就是每个条数据都带有Time列. 时序数据库到底能用到什么业务场景,答案是:监控系统. Baidu一 ...

  7. 开源词袋模型DBow3原理&源码(二)ORB特征的保存和读取

    util里提供了create_voc_step0用于批量生成features并保存,create_voc_step1读入features再生成聚类中心,比较适合大量语料库聚类中心的生成. 提取一张图的 ...

  8. FilenameFilter

    Introduction: java.io.FileNameFilter is a interface which is for filtering by filename, if filename ...

  9. ssh 免登录

    1. 生成 ssh 公钥和私钥 xiluhua@vm-xiluhua ~ $ ssh-keygen Generating public/private rsa key pair. Enter file ...

  10. python 将文件描述符包装成文件对象

    有一个对应于操作系统上一个已打开的I/O 通道(比如文件.管道.套接字等)的整型文件描述符,你想将它包装成一个更高层的Python 文件对象. 一个文件描述符和一个打开的普通文件是不一样的.文件描述符 ...