iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >基于Python如何实现Hash算法
  • 766
分享到

基于Python如何实现Hash算法

2023-06-29 14:06:43 766人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

本篇内容主要讲解“基于python如何实现Hash算法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Python如何实现Hash算法”吧!1 前言Simhash的算法简单的来说就是,从海量文

本篇内容主要讲解“基于python如何实现Hash算法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Python如何实现Hash算法”吧!

1 前言

Simhash的算法简单的来说就是,从海量文本中快速搜索和已知simhash相差小于k位的simhash集合,这里每个文本都可以用一个simhash值来代表,一个simhash有64bit,相似的文本,64bit也相似,论文中k的经验值为3。该方法的缺点如优点一样明显,主要有两点,对于短文本,k值很敏感;另一个是由于算法是以空间换时间,系统内存吃不消。

2 一般hash算法

最简单的hash算法是用取余的方式,根据hash地址存放数据,这需要提供键值对(Key-value)Key是地址,value是存放的数据

2.1 算法逻辑

  • 输入存放数据,并建立(Key-value)对象

  • 通过取余数的方式 公式H = d H=d%nH=d H:哈希地址,d为数据,具有唯一性,n是样本总数

  • 把产生的哈希地址和对应数据存储到字典对象中

2.2 代码实现

# 1.需要记录的数据records = [[1,50],[2,6],[3,47],[4,8],[5,9],[6,100]] # 数据键为日期,值为销售数量# 2.定义存放的地址和数据Sadress1 = {'192.168.1.1':1}Sadress2 = {'192.168.1.2':2}Sadress3 = {'192.168.1.3':4}Sadress4 = {'192.168.1.4':6}# 数据长度定义为n = 20# 判断哈希值,分段为0-1-2-4-6for one in records:    if one[0] % n <= Sadress1['192.168.1.1']:         Sadress1[one[0]]=one[1]    elif one[0] % n <= Sadress2['192.168.1.2']:        Sadress2[one[0]] = one[1]    elif one[0] % n <= Sadress3['192.168.1.3']:        Sadress3[one[0]] = one[1]    elif one[0] % n <= Sadress4['192.168.1.4']:        Sadress4[one[0]] = one[1]print(Sadress1)print(Sadress2)print(Sadress3)print(Sadress4)

2.3 总结

  • 这是最简单的Hash算法,还有MD5,SHai,SHA2

  • 哈希地址冲突,问题主要考虑输入的唯一性取值方法

  • 分布式计算中广泛应用

3 一致性hash算法

一致性Hash算法时为了防止单个节点宕机或者删除、新增,不会导致数据存储的混乱或者无法储存。一致性服务器要求对服务器地址通过哈希算法也进行映射方式确定输出地址,再加上对数据的哈希处理,一直哈希要实现两个算法过程。

3.1 算法逻辑

  • 输入数据,建立Key-value对象

  • 利用Hash算法产生哈希地址,建立键值字典

  • 输入服务器地址,利用哈希算法产生哈希地址

  • 数据通过地址和服务器地址,放到对应的范围内

  • 输出

3.2 代码实现

import hashlib # 导入带shal()哈希算法的函数库class CHash(object):    def __init__(self,nodes=None,v_num=2):# nodes节点存放节点地址,V-num一个节点对应,# 默认节点是为2        self._v_num = v_num # 一个节点对应存放节点地址        self._vNode_IP = {} # 用于虚拟节点的hash值与node的对应关系        self._vNodeAdd = [] # 用于存放所有的虚拟节点的hash值,这里需要保持排序        for node in nodes:            self.addNode(node)        print('\n虚拟节点哈希值升序排列:\n',self._vNodeAdd) # 对虚拟节点哈希地址进行从小到大排序    # 1 建立虚拟节点环,顺序排列    def addNode(self,node):        for i in range(self._v_num):            vNodeStr = '%s%s'%(node ,i) # 根据虚拟节点,为每个节点建立虚拟节点            key = self._gen_key(vNodeStr) # 产生虚拟节点IP地址,服务器节点IP+i            print('虚拟节点字符串',vNodeStr,'对应哈希值',key)            self._vNode_IP[key] = node # 虚拟节点哈希地址为键,节点为IP地址为值            self._vNodeAdd.append(key) # 对应虚拟节点哈希地址进行独立储存            self._vNodeAdd.sort()    # 2 删除退出节点地址及对应的虚拟地址    def Del_Node(self,node): # 删除退出节点地址及对应的虚拟地址        for i in range(self._v_num):            vNodeStr = '%s%s'%(node,i)            key = self._gen_key(vNodeStr)  # 产生虚拟节点的哈希地址            del self._vNode_IP[key] # 通过哈希地址删除字典里面的虚拟节点信息            self._vNodeAdd.remove(key) # 删除虚拟节点的哈希地址    # 3 返回数据储存对应的服务器地址    def dataNode(self,data):        if self._vNodeAdd: # 虚拟节点的哈希地址列表不为空            key = self._gen_key(data) # 产生业务数据对应的哈希地址            print(data,'哈希地址',key)            for node_key in self._vNodeAdd: # 获取虚拟节点的哈希地址                if key <= node_key: # 业务数据的哈希地址<= 当前虚拟节点的哈希地址                    return self._vNode_IP[node_key] # 返回当前虚拟节点哈希地址对应节点IP            return self._vNodeAdd[self._vNodeAdd[0]] # 如果业务数据的哈希值超过所有节点的地址,则归入并返回第一个IP地址        else:            return None # 没有节点    # 4 通过shal()产生哈希值    @staticmethod # 装饰器    def _gen_key(key_str):        Hash_value = hashlib.sha1(key_str.encode('utf-8')).hexdigest()        return Hash_value# 测试C_H = CHash(['192.168.1.1','192.168.1.2','192.168.1.3','192.168.1.4'])data =['Mike','Margge','Maria']print('\n正常情况下,存储数据时,归入的节点地址:')print(data[0]+'存入的节点IP地址:',C_H.dataNode(data[0]))print(data[1]+'存入的节点IP地址:',C_H.dataNode(data[1]))print(data[2]+'存入的节点IP地址:',C_H.dataNode(data[2]))# 192.168.2.1删除节点print('\n192.168.1.2节点脱离分布式系统的情况:')C_H.Del_Node('192.168.1.2') # 删除节点print(data[0]+'存入的节点IP地址:',C_H.dataNode(data[0]))print(data[1]+'存入的节点IP地址:',C_H.dataNode(data[1]))print(data[2]+'存入的节点IP地址:',C_H.dataNode(data[2]))

虚拟节点字符串 192.168.1.10 对应哈希值 f53e4ef74ec8f55440f9caf382c5f63c4a39b4bc
虚拟节点字符串 192.168.1.11 对应哈希值 239b32be446b1288655b570c23ccb51633c03927
虚拟节点字符串 192.168.1.20 对应哈希值 c385b891af246719e1a60c715be2f375aeab0b5b
虚拟节点字符串 192.168.1.21 对应哈希值 0d12ca599dc0316beec6436bb3beb04e84fbe3e2
虚拟节点字符串 192.168.1.30 对应哈希值 265180387f1642217973f8cfda2ca6cc92d48e60
虚拟节点字符串 192.168.1.31 对应哈希值 d6dacbe137bec9a047737207a3a82036f8454362
虚拟节点字符串 192.168.1.40 对应哈希值 7497a9439524d6f044fc22a8723039e0c42bbac8
虚拟节点字符串 192.168.1.41 对应哈希值 89c78508a642956363ed40326fce4346d7889f88

虚拟节点哈希值升序排列:

 ['0d12ca599dc0316beec6436bb3beb04e84fbe3e2', '239b32be446b1288655b570c23ccb51633c03927', '265180387f1642217973f8cfda2ca6cc92d48e60', '7497a9439524d6f044fc22a8723039e0c42bbac8', '89c78508a642956363ed40326fce4346d7889f88', 'c385b891af246719e1a60c715be2f375aeab0b5b', 'd6dacbe137bec9a047737207a3a82036f8454362', 'f53e4ef74ec8f55440f9caf382c5f63c4a39b4bc']

正常情况下,存储数据时,归入的节点地址:

Mike 哈希地址 d6ac022931a66a2bcc244db91818ebec76ce5e18
Mike存入的节点IP地址: 192.168.1.3
Margge 哈希地址 ae5e1fda577bff360ed5da0b2804a1ff0b2a1675
Margge存入的节点IP地址: 192.168.1.2
Maria 哈希地址 3e182b1ea9376483a38614d916a0b666ef531b6d
Maria存入的节点IP地址: 192.168.1.4

192.168.1.2节点脱离分布式系统的情况:

Mike 哈希地址 d6ac022931a66a2bcc244db91818ebec76ce5e18
Mike存入的节点IP地址: 192.168.1.3
Margge 哈希地址 ae5e1fda577bff360ed5da0b2804a1ff0b2a1675
Margge存入的节点IP地址: 192.168.1.3
Maria 哈希地址 3e182b1ea9376483a38614d916a0b666ef531b6d
Maria存入的节点IP地址: 192.168.1.4

到此,相信大家对“基于Python如何实现Hash算法”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 基于Python如何实现Hash算法

本文链接: https://www.lsjlt.com/news/325127.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于Python如何实现Hash算法
    本篇内容主要讲解“基于Python如何实现Hash算法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Python如何实现Hash算法”吧!1 前言Simhash的算法简单的来说就是,从海量文...
    99+
    2023-06-29
  • 基于Python实现Hash算法
    目录1 前言2 一般hash算法2.1 算法逻辑2.2 代码实现2.3 总结3 一致性hash算法3.1 算法逻辑3.2 代码实现3.3 总结1 前言 Simhash的算法简单的来说...
    99+
    2024-04-02
  • 基于Python实现DIT-FFT算法
    目录自己写函数实现FFT使用python的第三方库进行FFT自己写函数实现FFT 使用递归方法 from math import log, ceil, cos, sin, pi im...
    99+
    2024-04-02
  • ava如何实现一致性Hash算法
    这篇文章主要介绍了ava如何实现一致性Hash算法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ava如何实现一致性Hash算法文章都会有所收获,下面我们一起来看看吧。1. 实现原理将key映射到 2^32 -...
    99+
    2023-07-05
  • 如何用Python实现基于蒙特卡洛算法小实验
    今天就跟大家聊聊有关如何用Python实现基于蒙特卡洛算法小实验,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。用Python实现基于蒙特卡洛算法小实验蒙特卡洛算法思想蒙特卡洛(Mon...
    99+
    2023-06-02
  • python基于双向链表实现LFU算法
    本文实例为大家分享了python实现LFU算法的具体代码,供大家参考,具体内容如下 在第一节中实现了双向链表DoubleLinkedList类,上一节中基于双向链表实现了LRU算法,...
    99+
    2024-04-02
  • 基于python快速实现排列组合算法
    1.python语言简单、方便,其内部可以快速实现排列组合算法,下面做简单介绍、 2.一个列表数据任意组合 2.1主要是利用自带的库 #_*_ coding:utf-8 _*_ #__author__='dragon' impor...
    99+
    2023-01-31
    算法 排列组合 快速
  • ava实现一致性Hash算法
    目录1. 实现原理2. 解决数据倾斜的问题什么是数据倾斜?解决3. 代码实现3.1 ConsistentHash3.2 Hash3.3 Utils3.4 main1. 实现原理 将k...
    99+
    2023-03-24
    Java哈希算法 Hash算法实现一致性
  • 基于Python代码实现Apriori 关联规则算法
    目录一、关联规则概述二、应用场景举例1、股票涨跌预测2、视频、音乐、图书等推荐3、打车路线预测(考虑时空)4、风控策略自动化挖掘三、3个最重要的概念1、支持度2、置信度3、提升度4、...
    99+
    2024-04-02
  • Python基于DFA算法实现内容敏感词过滤
    DFA 算法是通过提前构造出一个 树状查找结构,之后根据输入在该树状结构中就可以进行非常高效的查找。 设我们有一个敏感词库,词酷中的词汇为: 我爱你我爱他我爱她我爱你呀我爱他呀我爱她...
    99+
    2024-04-02
  • golang如何实现hash
    本篇内容介绍了“golang如何实现hash”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!哈希(Hash)指的是将任意长度的二进制串映射为固...
    99+
    2023-07-06
  • Python实现基于标记的分水岭分割算法
    目录1. 原理2.代码实现2.1 利用OpenCV和c++实现分水岭算法2.2 Python实现分水岭分割(1)2.3 Python实现分水岭分割(2)分水岭技术是一种众所周知的分割...
    99+
    2024-04-02
  • Java实现一致性Hash算法详情
    目录1. 实现原理2. 解决数据倾斜的问题2.1 什么是数据倾斜?2.2 解决3. 代码实现3.1 ConsistentHash3.2 Hash3.3 Utils3.4 main1....
    99+
    2024-04-02
  • 基于Python如何实现围棋游戏
    本篇内容主要讲解“基于Python如何实现围棋游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Python如何实现围棋游戏”吧!1.导入模块tkinter:ttk覆盖tkinter部分对象...
    99+
    2023-06-30
  • 基于Python如何实现帕累托图
    这篇“基于Python如何实现帕累托图”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“基于Python如何实现帕累托图”文章吧...
    99+
    2023-07-05
  • python如何实现Simhash算法
    这篇文章主要介绍python如何实现Simhash算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、simhash步骤simhash包含分词、hash、加权、合并、降维五大步骤simhash代码如下:import...
    99+
    2023-06-29
  • Python如何实现KPM算法
    这篇文章主要介绍Python如何实现KPM算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!知识点说明:先说前缀,和后缀吧比如有一个串:abab则在下标为3处的(前缀和后缀都要比下标出的长度小1,此处下标为3出的长度...
    99+
    2023-06-21
  • 算法介绍及实现——基于遗传算法改进的BP神经网络算法(附完整Python实现)
    目录 一、算法介绍 1.1 遗传算法 1.2 为什么要使用遗传算法进行改进 二、算法原理 三、算法实现 3.1 算子选择 3.2 代码实现 一、算法介绍 1.1 遗传算法         遗传算法是受启发于自然界中生物对于自然环境 “...
    99+
    2023-09-04
    神经网络 pytorch
  • OpenCV基于ORB算法实现角点检测
    本文实例为大家分享了OpenCV基于ORB算法实现角点检测的具体代码,供大家参考,具体内容如下 ORB算法是FAST算法和BRIEF算法的结合,ORB可以用来对图像中的关键点快速创建...
    99+
    2024-04-02
  • Python基于均值漂移算法和分水岭算法实现图像分割
    目录一.基于均值漂移算法的图像分割二.基于分水岭算法的图像分割三.总结一.基于均值漂移算法的图像分割 均值漂移(Mean Shfit)算法是一种通用的聚类算法,最早是1975年Fuk...
    99+
    2023-01-11
    Python均值漂移算法 图像分割 Python 分水岭算法 图像分割 Python图像分割
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作