算法--Hash算法及其应用场所

文章目录

    • 1.Hash算法定义
    • 2.应用
      • 2.1 安全加密
      • 2.2 唯一标识
      • 2.3 数据校验
      • 2.4 散列函数
      • 2.5 负载均衡
      • 2.6 数据分片
      • 2.7 分布式存储

1.Hash算法定义

  • 哈希算法:将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值
  • 设计一个优秀的哈希算法并不容易,需要满足的几点要求:
    1· 从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法);
    2· 对输入数据非常敏感,哪怕原始数据只修改了一个Bit,最后得到的哈希值也大不相同;
    3· 散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小;
    4· 哈希算法的执行效率要尽量高效,针对较长的文本,也能快速地计算出哈希值。

2.应用

2.1 安全加密

  • 最常用于加密的哈希算法是MD5(MD5 Message-Digest Algorithm,MD5 消息摘要算法)和SHA(Secure Hash Algorithm,安全散列算法)。
  • 还有很多其他加密算法,比如DES(Data Encryption Standard,数据加密标准)、AES(Advanced Encryption Standard,高级加密标准)。
  • 加密的哈希算法有两点格外重要。第一点是很难根据哈希值反向推导出原始数据,第二点是散列冲突的概率要很小。

2.2 唯一标识

  • 海量图片查找
  • 给每一个图片取一个唯一标识。比如,从图片的二进制码串开头取100个字节,从中间取100个字节,从最后再取100个字节,然后将这300个字节放到一块,通过哈希算法(比如MD5),得到一个哈希字符串,用它作为图片的唯一标识。通过这个唯一标识来判定图片是否在图库中。

2.3 数据校验

  • BT下载电影,从多个机器上分别下载,最后合并成一个。
  • 对 n 个文件块分别取哈希值,并且保存在种子文件中。只要文件块的内容有一丁点儿的改变,最后计算出的哈希值就会完全不同。当文件块下载完成之后,我们可以通过相同的哈希算法,对下载好的文件块逐一求哈希值,然后跟种子文件中保存的哈希值比对。如果不同,说明这个文件块不完整或者被篡改了,需要再重新从其他宿主机器上下载这个文件块。

2.4 散列函数

  • 散列函数对于散列算法冲突的要求要低很多。出现个别散列冲突,只要不是过于严重,我们都可以通过开放寻址法或者链表法解决。
  • 是否能反向解密也并不关心。散列函数中用到的散列算法,更加关注散列后的值是否能平均分布,散列函数执行的快慢,也会影响散列表的性能,所以,散列函数用的散列算法一般都比较简单,比较追求效率。

思考:区块链

  • 区块链是一块块区块组成的,每个区块分为两部分:区块头和区块体。
  • 区块头保存着自己区块体和上一个区块头的哈希值。
  • 因为这种链式关系和哈希值的唯一性,只要区块链上任意一个区块被修改过,后面所有区块保存的哈希值就不对了。
  • 区块链使用的是SHA256哈希算法,计算哈希值非常耗时,如果要篡改一个区块,就必须重新计算该区块后面所有的区块的哈希值,短时间内几乎不可能做到。

分布式系统应用:

2.5 负载均衡

  • 我们可以通过哈希算法,对客户端IP地址或者会话ID计算哈希值,将取得的哈希值与服务器列表的大小进行取模运算,最终得到的值就是应该被路由到的服务器编号。我们就可以把同一个IP过来的所有请求,都路由到同一个后端服务器上。

2.6 数据分片

  • 假设有1亿张图片,很显然,在单台机器上构建散列表是行不通的。因为单台机器的内存有限,而1亿张图片构建散列表显然远远超过了单台机器的内存上限。
  • 对数据进行分片,然后采用多机处理。我们准备n台机器,让每台机器只维护某一部分图片对应的散列表。
  • 每次从图库中读取一个图片,计算唯一标识,然后与机器个数n求余取模,得到的值就对应要分配的机器编号,然后将这个图片的唯一标识和图片路径发往对应的机器构建散列表。
  • 要判断一个图片是否在图库中的时候,我们通过同样的哈希算法,计算这个图片的唯一标识,然后与机器个数n求余取模。假设得到的值是k,那就去编号k的机器构建的散列表中查找。

2.7 分布式存储

  • 海量数据缓存在n台机器上,哪天缓存不够了,加一台机器,之前数据是通过和n求模得到的,现在全失效了?
  • 我们需要一种方法,使得在新加入一个机器后,并不需要做大量的数据搬移。这时候,一致性哈希算法就要登场了。
  • 假设我们有k个机器,数据的哈希值的范围是[0,MAX]。我们将整个范围划分成m个小区间(m远大于k),每个机器负责m/k个小区间。当有新机器加入的时候,我们就将某几个小区间的数据,从原来的机器中搬移到新的机器中。这样,既不用全部重新哈希、搬移数据,也保持了各个机器上数据数量的均衡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | 基于模式的时间表达式识别

本文转载自公众号:南大Websoft. 时间表达式识别是自然语言理解中一个重要而基础的任务。在以前的研究工作中,研究人员已经发现时间词的类型信息可以给识别提供明显的帮助。本文中我们以词类型序列作为表达式模式,提出了基于模式的时间表达式识别方法&…

大数据项目(四)————用户画像

原文地址:https://blog.csdn.net/Jorocco/article/details/81428996 1、用户画像概述 用来勾画用户(用户背景、特征、性格标签、行为场景等)和联系用户需求与产品设计的,旨在通过从海量用户行为数据中炼银挖金,尽可能…

最强阿里面试126题:数据结构+并发编程+Redis+设计模式+微服务

BAT技术面试范围 数据结构与算法:最常见的各种排序,最好能手写 Java高级:JVM内存结构、垃圾回收器、回收算法、GC、并发编程相关(多线程、线程池等)、NIO/BIO、各种集合类的比较优劣势(底层数据结构也要…

AdaX:一个比Adam更优秀,带”长期记忆“的优化器

关注小夕并星标,解锁自然语言处理搜索、推荐与算法岗求职秘籍文 | 苏剑林(追一科技,人称苏神)美 | 人美心细小谨思密达前言这篇文章简单介绍一个叫做AdaX的优化器,来自《AdaX: Adaptive Gradient Descent with Exponen…

金融情报挖掘:面向公开文本的期货事件聚合与传导因素分析

金融情报挖掘是情报领域的一个重要分支,通过对金融领域信息进行提取和分析,发现关联线索,对传导关联进行建模,能够挖掘出市场变动的规律,最终辅助决策。 例如,国内外资本市场,衍生品市场热点不断…

论文浅尝 | 知识图谱的单样本关系学习

链接:http://cn.arxiv.org/pdf/1808.09040动机如今的知识图谱规模很大但是完成度不高,long-tail关系在知识图谱中很常见,之前致力于完善知识图谱的方法对每个关系都需要大量的训练样本(三元组),而新加入的关…

POJ 1200 Crazy Search 查找有多少种不同的子串(hash)

文章目录1.采用map解题2.采用hash查找题目链接: http://poj.org/problem?id1200题目大意:给定子串长度,字符中不同字符数量,以及一个字符串,求不同的子串数量。1.采用map解题 把子串插入map,map自动去重&…

金融行业如何用大数据构建精准用户画像?

原文地址:https://www.jianshu.com/p/6e0a0ca5948e 1. 什么是用户画像?2. 用户画像的四阶段用户画像的焦点工作就是为用户打“标签”,而一个标签通常是人为规定的高度精炼的特征标识,如年龄、性别、地域、用户偏好等,最…

随笔-机器如何学习我们的知识?

1、 人类语言的语法知识。 不同的人类语言有不同的语言表达形式,包括语言符号,语言符号的组合和应用规则。阿拉伯文字、斯拉夫文字、罗马文字、拉丁文字、象形文字等代表着不同语言背景、语言文化。 2、 机器可用的词典知识库有哪些? 1&am…

最全BAT前端开发面试80题:算法+html+js+css!含答案大赠送!

最全前端开发面试题目:包含算法网络css面试jsh5面试题目,尾部有最全BAT前端面试经典77题和答案,想要的就快来领走吧~(领取方式见文末) 一、前端算法面试 1、基本排序的方式 冒泡、快排、桶排、堆排序、归并排序、插入…

求大于n的最小质数

hash取模运算时选取比较大的质数,就可以有效减少冲突。 有定理,一个数如果不能被2到它的平方根的所有数整除,它就是质数。 /*** description: 求大于n的最小质数* author: michael ming* date: 2019/5/9 22:35* modified by: */ #include &l…

超一流 | 从XLNet的多流机制看最新预训练模型的研究进展

关注小夕并星标,解锁自然语言处理搜索、推荐与算法岗求职秘籍文 | 老饕(某厂研究员,祖传调参)美 | 人美心细小谨思密达导读作为 NLP 近两年来的当红炸子鸡,以 ELMo/BERT 为代表的语言预训练技术相信大家已经很熟悉了。…

论文浅尝 | 神经网络与非神经网络简单知识问答方法的强基线分析

来源:NAACL 2018链接:http://aclweb.org/anthology/N18-2047本文关注任务为面向简单问题的知识库问答(仅用KB中的一个事实就能回答问题)。作者将任务划分为实体检测,实体链接,关系预测与证据整合&#xff0…

干货 | 搞定用户画像只需5个步骤

【转】http://www.sohu.com/a/115611583_445326有一句话是,千万人撩你,不如一人懂你,这句话在互联网圈可以说成是,真正的了解用户,才能得到用户,所以,用户画像的重要性不言而喻。什么是用户画像…

领域情报搜索实践:真实场景下的问答实施策略与风险分析

知识搜索,对于一个企业而言,目前无论是在对内管理还是对外服务的业务上,都有着大量的需求,并表现出急迫性的特征。 例如,很多企业都积累了大量的企业知识资产,并且规模以每年200%的速度增长,其…

数据结构--二叉树 Binary Tree

文章目录1.概念2.存储方式2.1 链式存储(二叉树代码大部分是链式实现的)2.2 顺序存储(基于数组)3.二叉树的遍历3.1 基于链表的二叉树实现代码3.2 基于数组的二叉树实现代码3.3 非递归法 二叉树遍历1.概念 二叉树,每个节…

算法工程师思维导图—数据结构与算法

卖萌屋的妹子们(划掉)作者团整理的算法工程师思维导图,求职/自我提升/查漏补缺神器。该手册一共分为数据结构与算法、数学基础、统计机器学习和深度学习四个部分。点击这里查看具体使用指南。该手册有两种获取方式:公众号后台回复…

通过预训练提升语言理解

官方地址:https://blog.openai.com/language-unsupervised/文章:https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf代码:https://github.com/openai/finetune-tran…

最全Java架构师130面试题:微服务、高并发、大数据、缓存等中间件

一、数据结构与算法基础 说一下几种常见的排序算法和分别的复杂度。 用Java写一个冒泡排序算法 描述一下链式存储结构。 如何遍历一棵二叉树? 倒排一个LinkedList。 用Java写一个递归遍历目录下面的所有文件。 二、Java基础 接口与抽象类的区别&#xf…

智能投顾全面解读

智能投顾全面解读 <p>传统投顾一直是与理财产品的销售紧密结合在一起的。投顾即销售&#xff0c;在国内理财界也是约定俗成的现实。<br></p><p>传统投资顾问即证券投资顾问业务遵循《证券投资顾问业务暂行规定》&#xff0c;开展证券投资顾问业务的机构…