首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

面向最小哈希签名的LSH

LSH 我们知道最小哈希签名能够把一篇较大的文档压缩成一个较短的签名并且不影响文档间的Jaccard相似度。...很多情况下,我们用最小哈希签名的目的就是为了方便的对文档进行存储,并且对于给定的文档,能在大量的文档中快速的查找相似的文章。...现在我们能做到快速的对两篇文章进行相似度比较,但是当总的文档数目比较大的时候,比较所有文档的最小哈希签名仍然是一个非常耗时耗力的事。...面向最小哈希签名的LSH 对于 个长度为k的最小哈希签名的集合 、以及生成他们的的 个哈希函数来说,我们用下面的签名矩阵来表示他们: \begin{matrix}&S_1&S_2&S_3&......然后我们再分别对每一段进行一次哈希,将该段相同的哈希签名放在一个桶中,该段不同的放在不同的桶中(当然,不同行条的桶互不影响)。这就相当于把一个长度为k的最小哈希签名映射到了b个桶中。

71020

最小哈希签名(MinHash)简述

最小哈希 什么叫最小哈希,我的理解是,一个很大的集合进行哈希处理的过程其实是由很多小的哈希过程组成。而这些最小的哈希过程就被称为是最小哈希。最小哈希的具体内容就是把一个集合映射到一个编号上。...比如对于集合U=\{a,b,c,d,e\},S_1:\{a,d\},S_2:\{c\},S_3:\{b,d,e\},S_4:\{a,c,d\},我们用一个矩阵形式来表示他们: \begin{matrix...当然,随便找的h(x)=ax+b这种哈希函数显然可能会冲突,不过只要n和a互素,那么生成的一定是一个排列,这一点用同余类的知识很好证明。 不过显然,一次最小哈希的结果不能全面的表现出集合的特征。...因此最小哈希签名采用了k个不同的哈希函数h_1,h_2,h_3,......,h_k,对于集合S,分别调用这些函数作为最小哈希的排列函数,构建出集合S的最小哈希签名[h_1(S),h_2(S),h_3(S),...,h_k(S)]。

1.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    哈希函数和哈希表

    但是,看完今天的文章,你或许就会觉得原来也不过如此啊!其核心就是哈希函数和哈希表的应用!...哈希函数 哈希函数又称为散列函数,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。...假设输出值域为S,哈希函数的性质如下: 典型的哈希函数都有无限的输入值域 当哈希函数输入一致时,输出必相同 当哈希函数传入不同的输入值时,返回值可能一样,也可能不一样,由于输入域远大于值域 (重要)很多的不同输入所得的输出值会均匀的分布在...哈希函数映射 哈希表 哈希表就是利用哈希函数,可以根据关键码而直接进行访问的数据结构,也就是将关键码(Key value)通过哈希函数映射到表中的一个位置来进行访问。...C++中的hash_map c++的hash_map和map的用法很类似,但一定要区别,map和hash_map虽然都是key-value形式,但是map的底层是红黑树,而hash_map的底层是hash

    1.5K20

    哈希函数和哈希表

    哈希函数的性质 哈希函数又名散列函数,对于经典哈希函数来说,它具有以下5点性质: 1、输入域无穷大 2、输出域有穷尽 3、输入一样输出肯定一样 4、当输入不一样输出也可能一样(哈希碰撞) 5、不同输入会均匀分布在输出域上...(哈希函数的散列性) 如何生成多个哈希函数 这里我们介绍一种快速生成多个哈希函数的方法。...假如你急需要1000个哈希函数,并且这1000个哈希函数都要求相互独立,不能有相关性。这时,错误的方法是去在网上寻找1000个哈希函数。我们可以通过一个哈希函数来生成这样的1000个独立的哈希函数。...假如,你有一个哈希函数f,它的输出域是2^64,也就是16字节的字符串,每个位置上是16进制的数字0-9,a-f。...这样,我们将高八位作为新的哈希函数f1的输出域,低八位作为新的哈希函数f2的输出域,得到两个新的哈希函数,它们之间相互独立。

    73830

    哈希函数的理解

    前言 什么是哈希函数?它能用来干嘛?本文将以图文的形式讲解上述问题,欢迎各位感兴趣的开发者阅读本文。 概念与作用 哈希函数可以把给定的数据转换成固定长度的无规律数值。...转换后的无规律数值可以作为数据摘要应用于各种各样的场景。 图解示例 我们可以把哈希函数想象成搅拌机,如下图所示。 将数据放进搅拌机里 经过哈希函数计算后,搅拌机会输出固定长度的无规律数值。...哈希函数的特征 哈希值的长度与输入数据的大小的无关 输入相同数据,输出的哈希值也必定相同 输入相似的数据,输出的哈希值必定不同。 输入的数据完全不同,但输出的哈希值可能是相同的。...哈希函数的作用 哈希函数的算法中具有代表性的是「MD5」、「SHA-1」、「SHA-2」等,其中SHA-2是现在应用较为广泛的一个,而MD5和SHA-1存在安全隐患,不推荐使用。...不同算法计算方法不同,计算出来的哈希值也会有所不同。哈希函数的特征中有一条是输入的数据相同,输出的哈希值也必定相同,这个特征的前提是使用的是同一种算法。

    72750

    【c++】哈希>unordered容器&&哈希表&&哈希桶&&哈希的应用详解

    主页:醋溜马桶圈-CSDN博客 专栏:c++_醋溜马桶圈的博客-CSDN博客 gitee:mnxcc (mnxcc) - Gitee.com 1. unordered系列关联式容器 在C++98...搜索元素 对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功 该方式即为哈希(散列)方法,哈希方法中使用的转换函数称为哈希(散列)...把具有不同关键码而具有相同哈希地址的数据元素称为“同义词”。 发生哈希冲突该如何处理呢? 2.3 哈希函数 引起哈希冲突的一个原因可能是:哈希函数设计不够合理。...哈希函数设计原则: 哈希函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址时,其值域必须在0到m-1之间 哈希函数计算出来的地址能均匀分布在整个空间中 哈希函数应该比较简单...,因为这两个元素在多个哈希函数计算出的比特位上刚好有重叠 一种支持删除的方法:将布隆过滤器中的每个比特位扩展成一个小的计数器,插入元素时给k个计数器(k个哈希函数计算出的哈希地址)加一,删除元素时,给k

    23610

    重温数据结构:哈希 哈希函数 哈希表

    哈希函数 哈希的过程中需要使用哈希函数进行计算。 哈希函数是一种映射关系,根据数据的关键词 key ,通过一定的函数关系,计算出该元素存储位置的函数。...表示为: address = H [key] 几种常见的哈希函数(散列函数)构造方法 直接定址法 取关键字或关键字的某个线性函数值为散列地址。...随机数法 选择一个随机函数,把关键字的随机函数值作为它的哈希值。 通常当关键字的长度不等时用这种方法。...哈希冲突的解决 选用哈希函数计算哈希值时,可能不同的 key 会得到相同的结果,一个地址怎么存放多个数据呢?这就是冲突。...c.双重散列法 hi=(h(key)+i*h1(key)) % m,0 ≤ i ≤ m-1 基本思想是: 探查时从地址 d 开始,首先探查 T[d],然后依次探查 T[d+h1(d)], T[d

    2.6K50

    哈希:哈希函数 | 哈希概念 | 哈希冲突 | 闭散列 | 开散列

    unordered系列关联式容器 在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到 log_2N ,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想...最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同。...key) 返回哈希桶中关键码为key的键值对的个数 注意:unordered_map中key是不能重复的,因此count函数的返回值最大为1 unordered_map的修改操作 函数声明 功能介绍...的桶操作 函数声明 功能介绍 size_t bucket_count()const 返回哈希桶中桶的总个数 size_t bucket_size(size_t n)const 返回n号桶中有效元素的总个数...插入: 通过哈希函数获取待插入元素在哈希表中的位置 如果该位置中没有元素则直接插入新元素,如果该位置中有元素发生哈希冲突,使用线性探测找到下一个空位置,插入新元素。

    15610

    【c++】哈希

    最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同 1.1...它的迭代器至少是前向迭代器 1.2 接口函数 operator[]:注意:该函数中实际调用哈希桶的插入操作**,用参数key与V()构造一个默认值往底层哈希桶中插入,如果key不在哈希桶中,插入成功,返回...)方法,哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称为哈希表(Hash Table)(或者称散列表) 例如:数据集合{1,7,6,4,5,9}; 哈希函数设置为:hash(key)...2.2哈希函数 引起哈希冲突的一个原因可能是:哈希函数设计不够合理。...哈希函数设计原则: 哈希函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址时,其值域必须在0到m-1之间 哈希函数计算出来的地址能均匀分布在整个空间中 哈希函数应该比较简单 直接定址法

    11410

    【C++】哈希

    取元素比较,若关键码相等,则搜索成功 该方式即为哈希 ( 散列 ) 方法, 哈希方法中使用的转换函数称为哈希 ( 散列 ) 函数,构造出来的结构称 为哈希表 (Hash Table)(...把具有不同关键码而具有相同哈希地址的数据元素称为 “ 同义词 ” 。 发生哈希冲突该如何处理呢? 3.哈希函数 引起哈希冲突的一个原因可能是: 哈希函数设计不够合理 。...哈希函数设计原则 : 哈希函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址时,其值域必须在0到m-1之间 哈希函数计算出来的地址能均匀分布在整个空间中 哈希函数应该比较简单...随机数法--(了解) 选择一个随机函数,取关键字的随机函数值为它的哈希地址,即 H(key) = random(key), 其中random为随机数函数。...数字分析法通常适合处理关键字位数比较大的情况,如果事先知道关键字的分布且关键字的 若干位分布较均匀的情况 注意:哈希函数设计的越精妙,产生哈希冲突的可能性就越低,但是无法避免哈希冲突

    36120

    哈希函数如何工作 ?

    哈希函数是基础函数,而且无处不在。但什么是哈希函数,它们如何工作? 在这篇文章[1]中,我们将揭开哈希函数的神秘面纱。...我们将从查看一个简单的哈希函数开始,然后我们将学习如何测试哈希函数是否好用,然后我们将查看哈希函数的实际使用:哈希映射。 什么是哈希函数? 哈希函数是接受输入(通常是字符串)并生成数字的函数。...让我们看看如何衡量哈希函数的好坏,然后我们将深入探讨如何在哈希映射中使用它们。 哈希函数的优点是什么?...function hash(input) { let hash = 0; for (let c of input) { hash += c.charCodeAt(0); } return...我们通过散列最小化了这个搜索步骤,这也是 murmur3 进行速度优化的原因。哈希函数越快,我们找到合适的存储桶进行搜索的速度就越快,哈希映射的整体速度就越快。 这也是为什么减少碰撞如此重要的原因。

    26330

    【C++】 哈希

    如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立 一一映射的关系,那么在查找时通过该函数可以很快找到该元素。...,若关键码相等,则搜索成功 该方式即为哈希(散列)方法,哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称 为哈希表(Hash Table)(或者称散列表) 2....与15取模后的值都为5 解决哈希冲突方法1 ——闭散列 闭散列又称 开放定址法,当发生哈希冲突时,如果哈希表未被装满,说明哈希表中必然还有空位置,则可以把key存放到冲突位置中的下一个位置去 ----...2 ——开散列 开散列法又称为链地址法,对关键码集合用散列函数计算散列地址,具有相同地址码归于同一个子集合 每一个子集称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头节点存储在哈希表中 相比于闭散列...---- 两个不同的字符串 ,对应输出的值是不同的,就不会造成位置冲突了 使用特化避免传入仿函数 在unordered_map 中并没有使用仿函数,是因为默认支持string作为key,对仿函数的类进行特化

    22130

    【C++】哈希表的实现

    本质就是通过哈希函数把关键字Key跟存储位置建⽴⼀个映射关系,查找时通过这个哈希函数计算出Key存储的位置,进⾏快速查找。...理想情况是找出⼀个好的哈希函数避免冲突,但是实际场景中,冲突是不可避免的,所以我们尽可能设计出优秀的哈希函数,减少冲突的次数,同时也要去设计出解决冲突的⽅案。...1.5哈希函数 ⼀个好的哈希函数应该让N个关键字被等概率的均匀的散列分布到哈希表的M个空间中,但是实际中却很难做到,但是我们要尽量往这个⽅向去考量设计 1.5.1除法散列法/除留余数法 除法散列法也叫做除留余数法...需要注意的是每次初始化哈希表时,随机选取全域散列函数组中的⼀个散列函数使⽤,后续增删查 改都固定使⽤这个散列函数,否则每次哈希都是随机选⼀个散列函数,那么插⼊是⼀个散列函数, 查找⼜是另⼀个散列函数...《殷⼈昆 数据结构:⽤⾯向对象⽅法与C++语⾔描述 (第⼆版)》和 《[数据结构(C语⾔版)].严蔚 敏_吴伟⺠》等教材型书籍上⾯还给出了平⽅取中法、折叠法、随机数法、数学分析法等,这些⽅

    7910

    【C++】哈希表的实现

    本质就是通过哈希 函数把关键字Key跟存储位置建⽴⼀个映射关系,查找时通过这个哈希函数计算出Key存储的位置,进 ⾏快速查找。...理想情况是找出⼀个好的哈希函数避免冲突,但是实际场景中,冲突是不可避免的, 所以我们尽可能设计出优秀的哈希函数,减少冲突的次数,同时也要去设计出解决冲突的⽅案。...1.5 哈希函数 ⼀个好的哈希函数应该让N个关键字被等概率的均匀的散列分布到哈希表的M个空间中,但是实际中却 很难做到,但是我们要尽量往这个⽅向去考量设计。...需要注意的是每次初始化哈希表时,随机选取全域散列函数组中的⼀个散列函数使⽤,后续增删查 改都固定使⽤这个散列函数,否则每次哈希都是随机选⼀个散列函数,那么插⼊是⼀个散列函数, 查找⼜是另⼀个散列函数,就会导致找不到插...《殷⼈昆 数据结构:⽤⾯向对象⽅法与C++语⾔描述 (第⼆版)》和 《[数据结构(C语⾔版)].严蔚 敏_吴伟⺠》等教材型书籍上⾯还给出了平⽅取中法、折叠法、随机数法、数学分析法等,这些⽅ 法相对更适⽤

    11010

    哈希表的实现--C++

    本质就是通过哈希函数把关键字Key跟存储位置建立一个映射关系,查找时通过这个哈希函数计算出Key存储的位置,进行快速查找。...理想情况是找出一个好的哈希函数避免冲突,但是实际场景中,冲突是不可避免的,所以我们尽可能设计出优秀的哈希函数,减少冲突的次数,同时也要去设计出解决冲突的方案。...1.5、哈希函数 一个好的哈希函数应该让N个关键字被等概率的均匀的散列分布到哈希表的M个空间中,但是实际中却很难做到,但是我们要尽量往这个方向去考量设计。...需要注意的是每次初始化哈希表时,随机选取全域散列函数组中的一个散列函数使用,后续增删查改都固定使用这个散列函数,否则每次哈希都是随机选一个散列函数,那么插入是一个散列函数,查找又是另一个散列函数,就会导致找不到插入的...• 《殷人昆 数据结构:用面向对象方法与C++语言描述 (第二版)》和 《[数据结构(C语言版)].严蔚敏_吴伟民》等教材型书籍上面还给出了平方取中法、折叠法、随机数法、数学分析法等,这些方法相对更适用于一些局限的特定场景

    11210
    领券