汉明距离——提高海量查询性能的方法

    在前面讨论的三种图片识别的哈希算法,最后都是通过比较哈希的相似度,即汉明距离实现的。虽然比较两个hash值的汉明距离非常快,但受不住数据的爆发式增长,在海量的数据中找出两个相似的hash值,性能也会慢慢变差,显然这种最基本的顺序查找,无法扩展到数以亿计的数据中。

    在图片的识别中,汉明距离在0~10之间认为是相似的。如果采用顺序查找,查询完的次数为1万次。

算法原理

    如果把hash值分成11份,那么两个hash值相同,则必有一块区域是完全相同的。这个分法不太科学,我们可以把hash值分为8份,这样如果每部分都不相同,则汉明距离肯定大于8;相反,如果汉明距离小于8,则至少有一块是相同的。

    按照这个原理,分以下步骤,可以对海量数据建立索引:

  1. 将64位hash值分成8等份。
  2. 调整上面64位hash,将任意一块作为前8位,总共有8个table
  3. 采用精确匹配的方式,查找前8位
  4. 如果查找到,再精确判断这里的hash值。

java实现

public class DIndex implements Serializable {

    private static final long serialVersionUID = -4463444087393922139L;
    List<Map<Integer, List<Long>>> index_store = new ArrayList<Map<Integer, List<Long>>>();
   
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值