iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python篇——数据结构与算法(第六部分:哈希表)
  • 856
分享到

Python篇——数据结构与算法(第六部分:哈希表)

python数据结构算法哈希算法 2023-09-10 19:09:46 856人浏览 安东尼

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

摘要

  目录 1、直接寻址表 2、直接寻址表缺点 3、哈希 4、哈希表 5、解决哈希冲突 6、拉链法 7、常见哈希函数 8、哈希表的实现 8.1迭代器iter()和__iter__ 8.2str()和repr() 8.3代码实现哈希表 8.4哈

 

目录

1、直接寻址表

2、直接寻址表缺点

3、哈希

4、哈希表

5、解决哈希冲突

6、拉链法

7、常见哈希函数

8、哈希表的实现

8.1迭代器iter()和__iter__

8.2str()和repr()

8.3代码实现哈希表

8.4哈希表的应用


 1、直接寻址表

 

2、直接寻址表缺点

3、哈希

  • 直接寻址表:key为k的元素放到k的位置上
  • 改进直接寻址表:哈希(Hashing)
    • 构建大小为m的寻址表T
    • key为k的元素放到h(k)的位置上
    • h(k)是一个函数,其将域U映射到表T[0,1,2,...,m-1]

4、哈希表

 5、解决哈希冲突

 6、拉链法

 7、常见哈希函数

 8、哈希表的实现

 8.1迭代器iter()和__iter__

  • 从根本上说,迭代器就是有一个next()方法的对象,而不是通过索引来计数。
  • 迭代器更大的功劳是提供了一个统一的访问集合的接口。
  • 迭代器为类序列对象提供了一个类序列的接口。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。
  • 迭代器只能往前不会后退。
  • python的迭代无缝地支持序列对象,而且它还允许程序员迭代非序列类型,包括用户定义的对象。
  • 迭代器用起来很灵巧,你可以迭代不是序列但表现出序列行为的对象,例如字典的键、一个文件的行。
def iter_test():    i = iter('happy')#!!!    try:        while True:            print i.next()    except StopIteration:        pass    s = {'one':1,'two':2,'three':3}    print s    m = iter(s) #!!!    try:        while True:            print m.next()  #s[m.next()]    except StopIteration:        passif __name__ == '__main__':        iter_test()
happy{'three': 3, 'two': 2, 'one': 1}threetwoone
  •  使用类实现__iter__()next()函数
  • 另一个创建迭代器的方法是使用类,一个实现了__iter__()和next()方法的类可以作为迭代器使用。
  • next方法:返回迭代器的下一个元素
  • __iter__方法:返回迭代器对象本身
class Fib(object):    def __init__(self):        self.a, self.b = 0, 1 # 初始化两个计数器a,b    def __iter__(self):        return self # 实例本身就是迭代对象,故返回自己    def next(self):        self.a, self.b = self.b, self.a + self.b # 计算下一个值        if self.a > 10: # 退出循环的条件            raise StopIteration();        return self.a # 返回下一个值if __name__ == '__main__':        for n in Fib():        print n 
112358

8.2str()和repr()

  • Python 内置函数 repr() 和 str() 分别调用对象的__repr____str__
  • repr()更能显示出对象的类型、值等信息,对象描述清晰的。 而str()能够让我们最快速了解到对象的内容,可读性较高
  • 在 Python 交互式命令行下直接输出对象默认使用的是__repr__
import datetimes = 'hello'd = datetime.datetime.now()print(str(s))print(repr(s))print(str(d))print(repr(d))
hello'hello'2023-6-13 22:39:18.014587datetime.datetime(2023, 6, 13, 22, 39, 18, 14587)

 Note:

  • map()函数
def square(x) :            # 计算平方数...     return x ** 2...>>> map(square, [1,2,3,4,5])   # 计算列表各个元素的平方[1, 4, 9, 16, 25]>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函数[1, 4, 9, 16, 25]

8.3、代码实现哈希表

# hashclass Linklist:    class node:        def __init__(self, item=None):            self.item = item            self.next = None    class LinkListIterator:        def __init__(self, node):            self.node = node        def __next__(self):            if self.node:                cur_node = self.node                self.node = cur_node.next                return cur_node.item            else:                raise StopIteration        def __iter__(self):            return self    def __init__(self, iterable=None):        self.head = None        self.tail = None        if iterable:            self.extend(iterable)    def append(self, obj):        s = Linklist.Node(obj)        if not self.head:            self.head = s            self.tail = s        else:            self.tail.next = s            self.tail = s    def extend(self, iterable):        for obj in iterable:            self.append(obj)    def find(self, obj):        for n in self:            if n == obj:                return True        else:            return False    def __iter__(self):        return self.LinkListIterator(self.head)    def __repr__(self):        return "<<" + ",".join(map(str, self)) + ">>"# 类似于集合的结构class HashTable:    def __init__(self, size=101):        self.size = size        self.T = [Linklist() for i in range(self.size)]    def h(self, k):        return k % self.size    def insert(self, k):        i = self.h(k)        if self.find(k):            print("Douplicated insert")        else:            self.T[i].append(k)    def find(self, k):        i = self.h(k)        return self.T[i].find(k)lk = Linklist([1, 2, 3, 4])print(lk)ht = HashTable()ht.insert(0)ht.insert(1)# hashclass Linklist:    class Node:        def __init__(self, item=None):            self.item = item            self.next = None    class LinkListIterator:        def __init__(self, node):            self.node = node        def __next__(self):            if self.node:                cur_node = self.node                self.node = cur_node.next                return cur_node.item            else:                raise StopIteration        def __iter__(self):            return self    def __init__(self, iterable=None):        self.head = None        self.tail = None        if iterable:            self.extend(iterable)    def append(self, obj):        s = Linklist.Node(obj)        if not self.head:            self.head = s            self.tail = s        else:            self.tail.next = s            self.tail = s    def extend(self, iterable):        for obj in iterable:            self.append(obj)    def find(self, obj):        for n in self:            if n == obj:                return True        else:            return False    def __iter__(self):        return self.LinkListIterator(self.head)    def __repr__(self):        return "<<" + ",".join(map(str, self)) + ">>"# 类似于集合的结构class HashTable:    def __init__(self, size=101):        self.size = size        self.T = [Linklist() for i in range(self.size)]    def h(self, k):        return k % self.size    def insert(self, k):        i = self.h(k)        if self.find(k):            print("Douplicated insert")        else:            self.T[i].append(k)    def find(self, k):        i = self.h(k)        return self.T[i].find(k)lk = Linklist([1, 2, 3, 4])print(lk)ht = HashTable()ht.insert(0)ht.insert(1)ht.insert(3)ht.insert(102)print(",".join(map(str, ht.T)))

结果

<<1,2,3,4>><<1,2,3,4>><<0>>,<<1,102>>,<<>>,<<3>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>,<<>>Process finished with exit code 0

8.4、哈希表的应用

 MD5算法

 

 

 

 

来源地址:https://blog.csdn.net/qq_42120059/article/details/131188575

--结束END--

本文标题: Python篇——数据结构与算法(第六部分:哈希表)

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

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

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

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

下载Word文档
猜你喜欢
  • Python篇——数据结构与算法(第六部分:哈希表)
      目录 1、直接寻址表 2、直接寻址表缺点 3、哈希 4、哈希表 5、解决哈希冲突 6、拉链法 7、常见哈希函数 8、哈希表的实现 8.1迭代器iter()和__iter__ 8.2str()和repr() 8.3代码实现哈希表 8.4哈...
    99+
    2023-09-10
    python 数据结构 算法 哈希算法
  • Java数据结构哈希算法之哈希桶方式解决哈希冲突
    一. 实现形式一(键值对只能为整数) 我们可以先实现一个比较简单的哈希表,使用java中解决哈希冲突的方法,即哈希桶(开散列)方式实现,其中注意: 可以使用内部类方式定义节...
    99+
    2024-04-02
  • Java深入了解数据结构之哈希表篇
    目录1,概念2,冲突-避免3,冲突-避免-哈希函数设计4,冲突-避免-负载因子调节5,冲突-解决-闭散列①线性探测②二次探测6,冲突-解决-开散列/哈希桶7,完整代码1,概念 顺序结...
    99+
    2024-04-02
  • 带你了解Java数据结构和算法之哈希表
    目录1、哈希函数的引入①、把数字相加②、幂的连乘2、冲突3、开放地址法①、线性探测②、装填因子③、二次探测④、再哈希法4、链地址法5、桶6、总结1、哈希函数的引入 大家都用过字典,字...
    99+
    2024-04-02
  • Java数据结构与算法系列精讲之哈希算法实现
    概述 从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章. 获取哈希值 hashCode()方法可以返回一个对象的哈希值. 需要注意的是, 我们需要对值...
    99+
    2024-04-02
  • Java数据结构之实现哈希表的分离链接法
    哈希表的分离链接法 原理 Hash Table可以看作是一种特殊的数组。他的原理基本上跟数组相同,给他一个数据,经过自己设置的哈希函数变换得到一个位置,并在这个位置当中放置该数据。哦...
    99+
    2024-04-02
  • Java数据结构中实现哈希表的分离链接法
    这篇文章主要介绍“Java数据结构中实现哈希表的分离链接法”,在日常操作中,相信很多人在Java数据结构中实现哈希表的分离链接法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数据结构中实现哈希表的分离...
    99+
    2023-06-20
  • Python数据结构树与算法分析
    目录1.示例2.术语及定义3.实现3.1 列表之列表3.2节点与引用4.二叉树的应用4.1解析树4.2树的遍历5.利用二叉堆实现优先级队列6.二叉搜索树6.1搜索树的实现7.平衡二叉...
    99+
    2024-04-02
  • Python数据结构与算法之算法分析详解
    目录0. 学习目标1. 算法的设计要求1.1 算法评价的标准1.2 算法选择的原则2. 算法效率分析2.1 大O表示法2.2 常见算法复杂度2.3 复杂度对比3. 算法的存储空间需求...
    99+
    2024-04-02
  • Python数据结构与算法之跳表详解
    目录0. 学习目标1. 跳表的基本概念1.1 跳表介绍1.2 跳表的性能1.3 跳表与普通链表的异同2. 跳表的实现2.1 跳表结点类2.2 跳表的初始化2.3 获取跳表长度2.4 ...
    99+
    2024-04-02
  • python数据结构与算法(3)
    Python内置类型性能分析 timeit模块timeit模块可以⽤来测试⼀⼩段Python代码的执⾏速度。class timeit.Timer(stmt='pass', setup='pass', ...
    99+
    2023-01-31
    数据结构 算法 python
  • python数据结构算法分析
    目录1.算法分析的定义2.大O记法3.不同算法的大O记法3.1清点法3.2排序法3.3蛮力法3.4计数法4.列表和字典操作的复杂度4.1列表4.2字典前文学习: python数据类型...
    99+
    2024-04-02
  • 如何分析Python数据结构与算法中的顺序表
    这篇文章的内容主要围绕如何分析Python数据结构与算法中的顺序表进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!0. 学习目标线性表在计算机中的表示...
    99+
    2023-06-26
  • 基于哈希表的数据结构优化PHP数组交集和并集的计算
    利用哈希表可优化 php 数组交集和并集计算,将时间复杂度从 o(n * m) 降低到 o(n + m),具体步骤如下:使用哈希表将第一个数组的元素映射到布尔值,以快速查找第二个数组中元...
    99+
    2024-05-02
    优化 数据结构
  • 分析Java数据结构与算法
    本篇内容主要讲解“分析Java数据结构与算法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“分析Java数据结构与算法”吧!1.什么是二叉树二叉树:就是每个节点都...
    99+
    2024-04-02
  • Python高级数据结构与算法实例分析
    本文小编为大家详细介绍“Python高级数据结构与算法实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python高级数据结构与算法实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、简介我们将从以...
    99+
    2023-07-05
  • 详解Python数据结构与算法中的顺序表
    目录0. 学习目标1. 线性表的顺序存储结构1.1 顺序表基本概念1.2 顺序表的优缺点1.3 动态顺序表2. 顺序表的实现2.1 顺序表的初始化2.2 获取顺序表长度2.3 读取指...
    99+
    2024-04-02
  • Python数据结构与算法之链表,无序链表详解
    目录我们首先来构造节点。节点(Node)的类构建完毕后,接下来我们开始构建整个链表(LinkList)的类。那么我们还需要一个方法来判断链表头的指向。接下来我们构建链表节点的添加方法...
    99+
    2024-04-02
  • python数据结构算法的示例分析
    小编给大家分享一下python数据结构算法的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.算法分析的定义有这样一个问题:当两个看上去不同的程序 解决同...
    99+
    2023-06-22
  • Java数据结构与算法的示例分析
    这篇文章给大家分享的是有关Java数据结构与算法的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。第1章 数据结构与算法基础概述1.1 数据结构和算法的重要性算法是程序的灵魂,优秀的程序可以在海量数据计算时...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作