美文网首页
动态连通性问题之快速查找算法笔记

动态连通性问题之快速查找算法笔记

作者: yangc91 | 来源:发表于2019-03-03 23:58 被阅读0次

快速查找(贪心算法)

目的:通过并查集解决动态连通性问题

定义: 在一个N个元素的数组中,当且仅当 p、q的id相等时,p和q是连通的。

课程链接
github地址

接口

/**
 * 判断两个元素是否连通: 比对id值是否相等即可
 */
public boolean connected(int p, int q);


/**
 * 连通p、q
 * 将所有与p相同id的元素的id值都变更为q的id值
 */
public void union(int p, int q);

算法实现

/**
 * 动态联通问题之快速查找(贪心算法)
 *
 * 定义: 在一个N个元素的数组中,当且仅当 p、q的id相等时,p和q是连通的。
 *
 */
public class QuickFindUF {

    private int[] id ;

    public QuickFindUF(int n) {
        id = new int[n];
        for (int i = 0; i < n; i++) {
            id[i] = i;
        }
    }

    /**
     * 判断p、q是否连通
     * @param p
     * @param q
     * @return
     */
    public boolean connected(int p, int q) {
        return id[p] == id[q];
    }

    /**
     * 连通p、q
     * 将所有与 p 相同 id 的元素的 id 值 都变更为 q 的 id 值
     * @param p
     * @param q
     */
    public void union(int p, int q) {
        int pid = id[p];
        int qid = id[q];
        for (int i = 0; i < id.length; i++) {
            if (id[i] == pid ) id[i] = qid;
        }
    }

    public static void main(String[] args) {
        QuickFindUF quickFindUF = new QuickFindUF(10);
        quickFindUF.union(0,5);
        quickFindUF.union(5,6);
        quickFindUF.union(1,2);
        quickFindUF.union(2,7);
        quickFindUF.union(8,3);
        quickFindUF.union(3,4);
        quickFindUF.union(4,9);

        System.out.println(quickFindUF.connected(1,3));
        System.out.println(quickFindUF.connected(8,9));
    }

}

算法效率:

image

总结

查询速度为1(即直接比对元素的id值即可),但进行N次连通操作的时间复杂度为指数级增长,速度太慢。

相关文章

  • 动态连通性问题之快速查找算法笔记

    快速查找(贪心算法) 目的:通过并查集解决动态连通性问题 定义: 在一个N个元素的数组中,当且仅当 p、q的id相...

  • 《算法》笔记 2 - 动态连通性问题

    动态连通性问题 实现通用代码Quick-Find算法Quick-Union算法加权Quick-Union算法 动态...

  • 数据结构+算法

    排序算法 基本排序:冒泡、选择、插入 高级排序希尔、归并、快速 检索算法 顺序查找、二分查找 高级算法 动态规划斐...

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • OC 消息转发流程分析

    上一篇消息查找流程 探索了消息查找流程:快速查找和慢速查找以及动态方法解析。但消息机制还不完整,如果动态方法解析之...

  • 查找算法总结及其算法实现(Python/Java)

    -----正文开始----- 预备知识 查找算法分类 1)静态查找和动态查找; 注:静态或者动态都是针对查找表而言...

  • Algorithms

    算法第一章 动态连通性 首先,我们讲到第一个问题,也就是第三张PPT,动态连通...

  • Union-Find算法

    动态连通性问题中,如何判断触点是否相连接,可以抽象表述为如何编写程序来过滤掉序列中所有无意义的整数对。连通性问题只...

  • 2018-03-30 算法 :查找简介

    世界上没有最好的算法,只有最合适的算法 查找算法:静态查找,动态查找 静态查找(一般使用线性表)的分类: 顺序查找...

  • 算法-连通性问题

    连通性问题 问题描述 给定一个由类似p-q的整数对组成的序列,其中每个整数表示一个对象,p-q表示对象p连接到对象...

网友评论

      本文标题:动态连通性问题之快速查找算法笔记

      本文链接:https://www.haomeiwen.com/subject/cfvvuqtx.html