图解算法学习笔记(五):散列表

目录

1)示例1:

2)散列函数

3)应用案例

4)冲突

5)性能

6)小结


本章内容:

       学习散列表,最有用的数据结构之一。

       学习散列表的内部机制:实现、冲突和散列函数。

1)示例1:

假设你在一家杂货店上班,有顾客来买东西时,你得在本子中查找价格。第一章介绍的简单查找,需要O(n)时间,如果你使用的是二分查找,时间为O(log n)

二分查找的速度已经很快了,但作为收银员,在本子中查找价格是件很痛苦的事,即使本子的内容是有序的。在查找价格时,你都能感觉到顾客的怒气。但如果我们有一位雇员(Maggie),她能记住所有商品的价格,问她就能马上知道答案。这位雇员报出任何商品的价格的时间为O(1)

2)散列函数

散列函数是这样的函数,无论你给它什么样的数据,它都还给你一个数字。

你可能认为散列函数输出的数字没什么规律,但其实散列函数必须满足一些要求。

  • 它必须是一致的,输出与输入保持一致;
  • 它应将不同的输入映射到不同的数字;

现在,我们可以打造我们的"Maggie"了。

首先创建一个空数组:

现在,我们将苹果的价格加入到数组中,输入为apple时,散列函数的输入为3,因此我们将苹果的价格存储到数组的索引3处。

不断地重复这个过程,最终整个数组将填满价格。

现在假设需要知道鳄梨(avocado)的价格,你无需在数组中查找,只需将avocado作为输入交给散列函数。,它会告诉你价格存储在索引4处。

散列函数之所以能准确地指出价格的存储位置,具体原因如下:

  • 散列函数总是将同样的输入映射到相同的索引。
  • 散列函数将不同的输入映射到不同的索引。
  • 散列函数知道数组有多大,只返回有效的索引。

现在,我们可以结合散列函数和数组创建一个被称为散列表(hash table)的数据结构,在学习的复杂数据结构中,散列表可能是最有用的。Python提供的散列表实现为字典

3)应用案例

散列表用途广泛,具体有:

  • 手机里的电话簿,DNS解析;
  • 防止重复;
  • 将散列表用作缓存,缓存是一种常用的加速方式,所有的大型网站都使用缓存,缓存的数据存储在散列表中;

4)冲突

要明白散列表的性能,我们先搞清什么是冲突,现在我们有一个数组,它包含26个位置。

使用的散列函数非常简单,它按字母表顺序分配数组的位置。

现在,我们分别将苹果,香蕉、鳄梨的价格存储到散列表中,会出现下面这种情况:

这时出现了冲突(collision):给两个键分配的位置相同

最简单的办法如下:如果两个键映射到同一个位置,就在这个位置存储一个链表

通过上面的介绍,我们了解到散列函数很重要,理想的是散列函数将键均匀地映射到散列表的不同位置

5)性能

散列表查找、插入、删除的运行时间如图所示:

在使用散列表是,避免最糟情况至关重要,为此,需要避免冲突,需要有:较低的填装因子,良好的散列函数

填装因子度量的是散列表有多少位置是空的。一个经验是:一旦填装因子大于0.7,就调整散列表的长度。而什么是良好的散列函数,这不需要我们操心——天塌下来有高个子顶着。

6)小结

冲突很糟糕,你应使用可以最大限度减少冲突的散列函数。

散列表的查找、插入和删除速度都非常快。

散列表适合用于模拟映射关系。
一旦填装因子超过0.7,就该调整散列表的长度。

散列表可用于缓存数据(例如,在Web服务器上)。

散列表非常适合用于防止重复。

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

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

相关文章

图解算法学习笔记(六):广度优先搜索

目录 1)图简介 2)图是什么 3)广度优先搜索 4)实现图 5)实现算法 6)小结 本章内容; 学习使用新的数据结构图来建立网络模型; 学习广度优先搜索; 学习有向图和无向图…

图解算法学习笔记(七):狄克斯特拉算法

目录 1)使用狄克斯特拉算法 2)术语 3)实现 4)小结 本章内容; 介绍加权图,提高或降低某些边的权重; 介绍狄克斯特拉算法,找出加权图中前往X的最短路径; 介绍图中的环…

【HDU - 5477】A Sweet Journey(思维,水题)

题干: Master Di plans to take his girlfriend for a travel by bike. Their journey, which can be seen as a line segment of length L, is a road of swamps and flats. In the swamp, it takes A point strengths per meter for Master Di to ride; In the f…

图解算法学习笔记(八):贪婪算法

目录 (1)背包问题 (2)集合覆盖问题 (3)NP完全问题 (4)小结 本章内容: 学习如何处理没有快速算法的问题(NP完全问题)。学习近似算法&#xff…

图解算法学习笔记(九):动态规划

目录 (1)背包问题 (2)最长公共子串 (3)小结 本章内容: 学习动态规划,它将问题分成小问题,并先着手解决这些小问题。学习如何设计问题的动态规划解决方案。 &#xff…

Java(win10安装jdk,第一个hello world)

Java 第一步 :安装jdk 推荐默认安装。(安装到C盘)第二步 :配置jdk环境 JAVA_HOME C:\Program Files\Java\jdk1.8.0_191 JDK的安装路径 Path: C:\Program Files\Java\jdk1.8.0_191\bin JDK下bin目录的路径 &#xf…

#pragma 详解

#pragma 求助编辑 pragma - 必应词典美[prɡmə]英[prɡmə]n.〔计〕杂注网络编译指示;显示编译指示;特殊指令 百科名片 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些…

1.绪论

目录 (1)C语言传值与传地址变量 (2)算法效率的度量 (3)基本操作 (4)主函数 主要由实现基本操作和算法的程序构成。这些程序有6类: 数据存储结构,文件名第…

(ECC)椭圆曲线加密算法原理和C++实现源码

目录 (1)ECC加密原理: (2)编译生成LibTommath静态库 (3)ECC源码 今天介绍一下利用LibTommath数学库实现椭圆曲线加密算法的原理和源码。 (1)ECC加密原理:…

【POJ - 2553】The Bottom of a Graph(tarjan强连通分量缩点,模板题)

题干: We will use the following (standard) definitions from graph theory. Let V be a nonempty and finite set, its elements being called vertices (or nodes). Let E be a subset of the Cartesian product VV, its elements being called edges. Then G(…

机器学习笔记(1):Introduction

目录 1)welcome 2)What is Machine Learning 3)Supervised Learning 4)Unsupervised Learning 1)welcome 第一个视频主要介绍了机器学习目前的案例,主要有:数据库挖掘、医疗记录、生物工程…

【POJ - 3352】Road Construction(Tarjan,边双连通分量)

题干: Its almost summer time, and that means that its almost summer construction time! This year, the good people who are in charge of the roads on the tropical island paradise of Remote Island would like to repair and upgrade the various roads…

机器学习简易入门-附推荐学习资料

目录 (1)机器学习正规学习路线 (2)机器学习快速入门 (3)总结 感谢黄海广博士的分享 原创: 机器学习初学者 机器学习初学者 今天 机器学习如何入门?目前没有明确的答案。本站面向…

C++11中的std::function

原文地址&#xff1a;http://www.jellythink.com/archives/771 看看这段代码 先来看看下面这两行代码&#xff1a; std::function<void(EventKeyboard::KeyCode, Event*)> onKeyPressed; std::function<void(EventKeyboard::KeyCode, Event*)> onKeyReleased; 这两…

【HDU - 3394】Railway(点双连通分量,Tarjan算法,思维tricks)

题干&#xff1a; There are some locations in a park, and some of them are connected by roads. The park manger needs to build some railways along the roads, and he would like to arrange tourist routes to each circuit. If a railway belongs to more than one …

飞机大战(简易版)

一、游戏分析 飞机大战中的主要“角色”有&#xff1a; 1.英雄 2.敌方飞机 3.英雄发射的子弹 我们需要控制的有&#xff1a; 1.绘制屏幕内的角色 2.控制角色的逻辑&#xff0c;比如&#xff1a;敌方飞机与我方飞机的碰撞检测&#xff0c;我方飞机发射的子弹与敌方飞机之间的碰撞…

在Ubuntu上安装Keras深度学习框架

目录 1&#xff09;安装pip 2&#xff09;安装Python科学套件 3&#xff09;安装TensorFlow 4&#xff09;安装keras 5&#xff09;安装Jupyter Notebook 6&#xff09;运行Keras 本文介绍如何在Ubuntu上安装Keras深度学习框架。 1&#xff09;安装pip 安装pip包&#…

【POJ - 1523】SPF(Tarjan求割点,求分割成的连通块数,模板题,tricks)

题干&#xff1a; Consider the two networks shown below. Assuming that data moves around these networks only between directly connected nodes on a peer-to-peer basis, a failure of a single node, 3, in the network on the left would prevent some of the still…

机器学习笔记(2):单变量线性回归

目录 1&#xff09;Model representation 2&#xff09;Cost function 3&#xff09;Cost function intuition 1 4&#xff09;Cost function intuition2 5&#xff09;Gradient descent 6&#xff09;Gradient descent intuition 7&#xff09;Gradient descent for li…

安装VMware tools

点击“虚拟机” 安装VMware tools提取图中文件到“下载” 提取登入root 进入 cd 下载/vmware-tools-distrib 执行 ./vmware-install-pl 输入yes或者点击“enter”出现图中&#xff0c;即为成功安装