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 ...
随机推荐
- js贪心算法---背包问题
/* * @param {Object} capacity 背包容量 6 * @param {Object} weights 物品重量 [2,3,4] * @param {Object} values ...
- cocos环境配置 -cocos2dx 入门
cocos最好的是安装官方exe,官方会把cocos 3.10和cocos studio都安装好. Cocos2d-x v3.10:点击http://www.cocos.com/,进入cocos官网, ...
- maven 知识
1. maven 环境配置 Maven 3.3 要求 JDK 1.7 或以上 Maven 3.2 要求 JDK 1.6 或以上 Maven 3.0/3.1 要求 JDK 1.5 或以上 2. ...
- “编程利器”:VSCode
原先一直使用sublime text3,并且认为它是很好的编程利器. 但最近写代码时,发现很多代码还是提示的不够完整.我们知道,当代码名字很长时,还没有提醒,这是非常苦恼的一件事!同时它的调试功能也不 ...
- Glorious Brilliance (最短路 + 带权二分图匹配)
这是一道代码大题.一开始读错题意了,然后理解成直接看上去的那种相邻,然后想不通好久!!! 把不同联通的图分离出来,然后先预处理一下形成之后的相邻图的状态,然后根据01确定哪一些是需要更换状态的,然后建 ...
- Spark学习之路 (十八)SparkSQL简单使用
一.SparkSQL的进化之路 1.0以前: Shark 1.1.x开始: SparkSQL(只是测试性的) SQL 1.3.x: SparkSQL(正式版本)+Dataframe 1.5.x: S ...
- mac电脑使用,开发环境配置指南
mac电脑使用,开发环境配置指南 前端工具链,mac下都很好用 用brew来装软件 用brew cask来装应用 Introduction · macOS Setup Guidehttp://sour ...
- CRM 权限设置 ss
表结构的设计 权限表 url -url地址的正则表达式 ^$ title - 标题 角色表 name - 角色名称 permissions 多对多关联权限表 (权限和角色的关系表) 用户表 name ...
- python sqlite3 数据库操作
python sqlite3 数据库操作 SQLite3是python的内置模块,是一款非常小巧的嵌入式开源数据库软件. 1. 导入Python SQLite数据库模块 import sqlite3 ...
- [转载]oracle的加密和解密
加密函数 create or replace function encrypt_des(p_text varchar2, p_key varchar2) return varchar2 isv_tex ...