zoukankan      html  css  js  c++  java
  • 求交集和并集的线性算法

    对于给定的两个集合,使用哈希表可以在线性时间复杂度内得到他们的交集和并集,具体说明如下: 
    假设有集合A={1, 7, 5, 13, 9, 10, 11}, B={5, 7, 10, 1, 18, 12}, 
    1)求交集,需要得到结果:A∩B={1, 5, 7,10} 
       思路如下: 
       ①建立一个哈希表(HashTable),其键(KEY)表示集合中数字的值,其值(VALUE)表示集合中数字出现的次数 
       ②遍历集合A,将集合中的每个数字(KEY)插入哈希表,每个数字的出现次数(VALUE)设置为1 
       ③遍历集合B,对于集合中的每个数字: 
                       如果哈希表中已经存在该数字,将对应的VALUE改为2 
                       如果哈希表中不存在该数字,忽略 
        ④遍历哈希表,输出VALUE为2的数字,即得到A和B的交集 
    2) 求并集,需要得到结果:AUB={1,5,7,9,10,11,12,13,18} 
         思路如下: 
         ①建立一个哈希表(HashTable),其键(KEY)表示集合中数字的值,其值(VALUE)可以无视 
         ②遍历集合A,将集合中的每个数字(KEY)插入哈希表 
         ③遍历集合B,对于集合中的每个数字: 
                        如果哈希表中已经存在该数字,忽略 
                        如果哈希表中不存在该数字,将这个数字插入哈希表 
         ④遍历哈希表,输出哈希表中的每个KEY,即为A和B的并集 
             上面以两个集合为例说明了交集和并集的求法,事实上,上述算法可以很方便的扩展到3个或3个以上的集合 
    的求交集和求并集。另外求并集时,由于哈希表的值(VALUE)部分不需要用到,所以这个数据结构也可以更换为 

    哈希集(HashSet)。

    Refer to: http://akalius.iteye.com/blog/1211726

  • 相关阅读:
    如何提取一个转录本的3'UTR区域的序列
    如何研究某个gene的ceRNA 网络
    ceRNA 调控机制
    利用circpedia 数据库探究circRNA的可变剪切
    R语言低级绘图函数-symbols
    R语言低级绘图函数-grid
    R语言低级绘图函数-axis
    R语言低级绘图函数-title
    R语言低级绘图函数-points
    二叉树和二叉查找树之间的区别
  • 原文地址:https://www.cnblogs.com/bouygues/p/4479983.html
Copyright © 2011-2022 走看看