【数据结构】什么是哈希表?为什么哈希表的查询时间复杂度是O

哈希表与散列表的原理及C++实现 哈希表(Hash Table)是一种高效的数据结构,用于存储键值对(Key-Value Pairs)。它通过哈希函数(Hash Function)将键(Key)映射到一个固定大小的数组(称为散列表)中的某个位置,从而实现快速的插入、查找和删除操作。哈希表的核心思想是通过哈希函数将键转换为数组的索引,从而直接访问对应的值。理想情况下,哈希表的插入、查找和删除操作的时间复杂度都是O(1)。哈希表是一种高效的数据结构,通过哈希函数将键映射到数组索引,从而实现快速的插入、查找和删除操作。 阅读详情

一、前言

  • 实话实说,我算法贼菜,为了提高自己的算法能力,自己也是慢慢开始积累刷题经验,在做题中学习数据结构和算法。为了说明今天所要讲的哈希表这一个数据结构,还是从经典的两数之和开始吧

这道题是牛客网的一道算法题:题目链接如下:两数之和 可能刚接触编程的小伙伴们还不知道什么是牛客网:他是一个可以学习编程,比如JAVA、C++、C、Python等等编程语言;内推找工作;面经复习知识的神器,非常适合用来日常的学习

  • 题目如下,自己第一次写这道题,也是循环遍历,效率可以说是非常的慢,就像评论区那样所说:"有人相爱,有人夜里看海,有人两数之和做不出来"


二、数组

在正式开始讲解哈希表之前,让我们来简单认识一下数组。我们经常使用 数组,它也是一种数据结构,那么数组有什么优点呢?

简单来说,数组的优点是:我们可以通过数组的下标快速定位到该位置下的数值,获取这个数值是非常非常的快, O(1)级别的时间复杂度。而哈希表的出现,就很好的解决了这个问题。

但是大家有没有想过,如果我们不知道该数值的下标,想要获取这个值,只能通过从头遍历数组,这时候,查询的时间复杂度就是O(N)级别的


三、哈希表

1、百度百科

哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数(哈希函数),存放记录的数组叫做哈希表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

读起来有些吃力,我们只需要抓住两点:哈希函数、哈希表,接下来我会介绍它们


2、问题引用

前面讲过了,哈希表的出现可以解决数组的缺点,让我们从一个小案例来慢慢理解哈希表~

假如周末到了,你要去图书馆借一本书《活着》,图书馆的管理员管理书籍很随意,是按照数组的方式来放书的,就像下图一样。而恰巧你要的《活着》是在最后一个位置,管理员从头开始找,你是不是要等好久好久?

最后你等的不耐烦了,就举报这个管理员,图书馆的老板把这个管理员给解雇了,来了一个新的管理员,她很聪明,她通过一种方式把每种书籍都编上一个号,并记录下来。你向她借《活着》,她通过"一种方式"一计算,哦,是在下标为6的位置,就直接走过去,给你拿了过来。你很满意,老板也很满意,给她升职加薪~


3、哈希函数

上文说的"一种方式",就是哈希函数,它有三个很重要的性质:

  • 当给哈希函数传入相同的输入值时,返回值一样
  • 当给哈希函数传入不同的输入值时,返回值可能一样,也可能不一样,也就是我们所说的哈希碰撞
  • 很多不同的输入值所得到的返回值会均匀的分布在输出域上,这一点很重要

4、哈希表结构

前面说了数组和哈希函数,就引出了我们的哈希表结构:

我们输入一个值,通过哈希函数计算后 % 上数组的长度,就可以让值放入数组中,所以当我们使用哈希表结构的时候,它的时间复杂度在理想状态下是O(1),接下来给大家举例分析一下:


5、举例分析

当我们输入abc时,由哈希函数计算得到一个哈希值10,10求%后得到1,就把abc放到数组下标为1的位置;然后输入edg,再次由哈希函数计算得到一个哈希值13,13求%后得到4,就把edg放到数组下标为4的位置,后面的操作也是这样。


6、哈希冲突

最后再来提一提哈希冲突:当我们输入future时,假如通过哈希函数计算得到哈希值是15,我们就发现跟love的位置冲突了,解决这个方式有好几种,比如:拉链法、再次哈希法等等,这个我准备在写HashMap源码的时候,通过讲解HashMap的底层实现原理时,说一说Java的API的哈希表是什么样的时候再说。


7、哈希表的优缺点

  • 优点:处理元素很快,添加、删除、修改、查找元素性能好
  • 缺点:元素在数组中是无序的,不能重复

最后,讲解了哈希表的数据结构,那么力扣第一题你会了吗?

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] arr = new int[2];
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if (map.containsKey(nums[i])) {//如果为true,说明target-num[i-1]的值在数组中存在
                arr[0] = map.get(nums[i]);
                arr[1] = i;
                return arr;
            }
            map.put(target - nums[i], i);//这条语句不能放到if语句的前面!
        }
        return arr;
    }
}
什么是散列表(哈希表)? 本文文末有福利,不要错过奥! 前言 假设你们班级100个同学每个人的学号是由院系-年级-班级和编号组成,例如学号为01100168表示是1系,10级1班的68号。为了快速查找到68号的成绩信息,可以建立一张表,但是不能用学号作为下标,学号的数值实在太大。因此将学号除以1100100取余,即得到编号作为该表的下标,那么,要查找学号为01100168的成绩的时候,只要直接访问表下标为68的数据即可... 阅读详情

相关推荐

散列表(下):为什么散列表和链表经常会一起使用

本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 散列表和链表,经常会被放在一起使用,在链表那一节,我们讲到,LRU淘汰算法的时间复杂度是O(n),当时我也提到,通过散列表可以将这个时间复杂度降低到O(1)。 跳表那一节,我提到Redis的有序集合是使用跳表来实现了,跳表可以卸任一种改进版的链表。Redis的有序集合不仅使用了跳表,还用到了散列表。 除此之外,Java中LinkedHa...

every__day的博客 1532

java数据结构—时间复杂度和空间复杂度

Java数据结构——时间复杂度和空间复杂度

m0_62747332的博客 1704

数据结构——哈希表(散列)原理与代码应用

文章目录什么是哈希表?Hash的应用Hash复杂度散列表的查找步骤散列函数(哈希函数)——散列地址哈希表优缺点优点:缺点:散列的三种方法1、除法散列法2、平方散列法3、斐波那契(Fibonacci)散列法散列冲突的解决方案:扩展代码应用 什么是哈希表? 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 记录的存储位置=f(关键

流楚丶格念的博客 5997

【Java面试】ArrayList、LinkedList 查找数据哪个快

ArrayList、LinkedList查找数据哪个快?这里有几种不同情况1、是不是有序的?2、还是调用的contains(o)方法?ArrayList 因为是基于数组实现,所以可以随机访问,时间复杂度是O(1);LinkedList 因为是基于链表实现,所以只能从头到尾遍历,时间复杂度是O(n);从理论上看是一样快,但是你可能忽略了

狗尾巴草也开花的博客 3212

MySQL为什么不用数组、哈希表、二叉树等数据结构作为索引呢

MySQL为什么要用B+Tree作为索引的数据结构,而不用数组、哈希表、二叉树等数据结构作为索引呢

天堂的博客 2254

跳表、哈希表数据结构相关知识

数据结构志在提高算法效率,使功能运行运行更加流程,内存消耗更加少,跳表和哈希表就是两个几高效又简单的数据结构,两者直接要怎么选呢,可以分别从实现算法,时间复杂度等方面出发,供给参考。

qq_57285750的博客 1628

使用HashMap的containsKey查找键,时间复杂度为什么是O(1)?

在最坏情况下,所有键都被映射到同一个桶中,导致链表或红黑树的长度变为N,此时插入、查找和删除的时间复杂度将变为O(N)。为了避免这种情况,需要使用一种好的哈希函数,使得键被平均分布到各个桶中,从而使得插入、查找和删除的平均时间复杂度保持为O(1)。同样,查找和删除操作的时间复杂度也是O(1),因为可以根据键的哈希值直接定位到对应的桶,然后在桶中查找或删除该键值对。在哈希表中,插入一个键值对的时间复杂度是O(1),因为只需要计算出键的哈希值,然后将它插入到对应的桶中。

十一月廿七风雨大作 1万+

三菱FX3U PLC红绿灯ST编程实战:从基础逻辑到急停功能完整实现

本文以十字路口红绿灯控制为例,详细讲解了三菱FX3U PLC使用ST编程的完整实战过程。内容涵盖从基础时序逻辑、状态机设计,到急停功能、黄灯闪烁、昼夜模式切换等高级功能的实现,并提供了代码优化与调试技巧,帮助工程师掌握结构化文本在工业控制中的清晰、结构化应用。

weixin_29070861的博客 535

Java算法时间复杂度的表示:o(1)、o(n)、 o(logn)、o(nlogn)

Java算法时间复杂度的表示:o(1)、o(n)、 o(logn)、o(nlogn) 在描述算法复杂度时,经常用到O(1)、O(n)、O(logn)、O(nlogn)来表示对应算法的时间复杂度, 这里进行归纳一下它们代表的含义: O后面的括号中有一个函数,指明某个算法的耗时/耗空间与数据增长量之间的关系。其中的n代表输入数据的量。 O(n):时间复杂度为O(n),代表数据量增大几倍,耗时也增大几倍。比如常见的遍历算法。 再比如时间复杂度O(n^2),就代表数据量增大n倍时,耗时增大n的平方倍,这是比线性更高

Skf_0004010的博客 1973

Hive中的四种排序方式(order by,sort by,distribute by,cluster by)使用与区别详解

在平时的Hive数仓开发工作中经常会用到排序,而Hive中支持的排序方式有四种,这里结合具体的案例详细介绍一下他们的使用与区别: order by sort by distribute by cluster by 一、order by(全局排序) 1、作用:全局排序,只有一个reducer。 order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序),也正因为只有一个reducer,所以当输入的数据规模较大时会导致计算时间较长。   set hive.mapr

weixin_43230682的博客 1万+

Gartner《构建可扩展数据产品建设框架》心得

数据产品化:从概念到落地的实践指南 当前企业正从传统数据需求模式转向数据产品化新范式。本文系统阐述了数据产品的核心价值、定义分类和实施框架,指出成功关键是将数据包装为可复用、可扩展的产品。Gartner框架强调产品思维,提出4阶段12步实施路径,涵盖设计、工程、发布和监控全流程。文章特别提醒要避免7大常见误区,如简单重命名报表、忽视元数据治理等,建议采取MVP策略,90天内完成从价值验证到产品落地的闭环。实施中需平衡技术选型与业务需求,建立跨职能团队,并通过AARRR模型持续追踪产品价值。

2501_91410404的博客 1007

JAVA--HashMap查询的时间复杂度为什么是O(1)

写在前面 HashMap查询的时间复杂度是O(1),这是众所周知的,但是你知道为什么是O(1)吗? 正文 要研究明白这个问题,我们需要从数组开始研究。 数组查询的时间复杂度是O(1),为什么呢?因为在内存中,数组对象被创建时,是被分配了一块连续的内存地址,这块连续的内存地址上,存放着大小相等的引用类型,在默认情况下,如果虚拟机内存没有超过32GB,那么JVM使用的是32位的压缩指针,也就是说,在这块连续的内存地址上存放的是一个个的32位的压缩指针。现在假设我们的数组中存了10个对象,那么我们如果要找

weixin_42603382的博客 7471

深入解析MOS管电容特性:从基础理论到高频应用

本文深入解析了MOS管的电容特性,从基础物理结构出发,详细拆解了栅氧电容、重叠电容和结电容的成因与影响。文章重点探讨了电容值随工作状态变化的非线性特性,并分析了其在CMOS高频开关电源、射频电路等应用中的关键作用,包括开关损耗、米勒效应、信号完整性挑战以及如何将电容特性转化为可控元件(如MOS变容管)的机遇。最后提供了从选型、仿真到PCB布局的实战设计指南。

weixin_29278805的博客 384

【数据结构】什么是哈希表?为什么哈希表的查询时间复杂度是O(1)?

力扣刷题的第一题:两数之和的最佳解决方法就是哈希表,本篇就是来讲解数据结构:哈希表的,来帮助大家认识哈希表,助力解题!

知识记录 1万+

Windows/Linux双平台实战:QtCreator构建套件配置全攻略(含GCC/G++/GDB/CMake)

本文详细介绍了在Windows和Linux双平台下配置QtCreator构建套件的完整流程,涵盖GCC/G++、GDB和CMake等核心工具链的设置技巧。通过分步指导和实用示例,帮助开发者解决跨平台开发中的配置难题,提升Qt应用开发效率。特别针对QtCreator新手和需要在多平台切换的开发者提供了全面的配置指南。

weixin_28836507的博客 471

别再为CAD和GIS数据对不上而头疼了!一份完整的ArcGIS for AutoCAD坐标系定义与数据套合指南

本文详细介绍了如何通过ArcGIS for AutoCAD插件解决CAD与GIS数据坐标系不匹配的问题,实现数据的精准套合。文章从坐标系冲突分析、插件核心功能解析到五步标准化工作流,提供了完整的解决方案,帮助工程师和设计师提升跨平台协作效率。

weixin_42531886的博客 217

数据结构与算法 - 哈希表的查询效率:为什么平均时间复杂度是O(1)

哈希表查询效率为何平均O(1)? 哈希表通过哈希函数将键映射到数组索引,实现快速访问。其平均O(1)时间复杂度基于两个关键因素: 均匀哈希函数:理想情况下,哈希函数能将键均匀分布到各桶中,使每个桶只包含少量元素。 负载因子控制:当元素数量与桶数之比(负载因子)超过阈值(如0.75)时,哈希表会自动扩容,重新分配元素以保持桶的低负载。 对于链地址法,查询只需遍历短链表(平均1-2个节点);开放地址法则通过探测序列快速定位元素。通过数学推导可证明,在合理假设下,哈希表的查询操作平均只需常数时间。 Java的Ha

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

《Unity DOTS之ECS从入门到不香》(1)基本概念

文章目录一、什么是DOTS?二、什么是ECS?三、Hello World 一、什么是DOTS? Data Oriented Tech Stack(DOTS)是unity推出的多线程面向数据的技术堆栈 。它是一套高性能解决方案,包含三个部分: 1.ECS:ECS是一种有别于面向对象的编程模式,是面向CPU Cache友好的编程模式。要求代码都要按照 实体+组件+系统 的框架构建。官方链接 2.JobSystem:JobSystem是unity推出的一套先进的多线程任务管理系统,结合ECS可以获得最佳性能。当然

Cxihu田树东的游戏开发博客 2732

数据结构☞散列表

散列表(Hash Table) 散列表的英文叫“Hash Table”,我们平时也叫它“哈希表”或者“Hash 表”。 散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。 key:键或者关键字。 散列函数(或“Hash 函数”“哈希函数”):把key值转化为数组下标的映射方法。 散列函数计算得到的值就叫作散列值(或“Hash 值”“哈希值”)。 散列函数 散列函数设计的基本要求: 散列函数计算得到的散列值是一个非负整

weixin_47251999的博客 2万+

【Network Management】DCM模块唤醒网络是主动唤醒还是被动唤醒

DCM模块唤醒网络是主动唤醒还是被动唤醒

qq_36056498的博客 1541

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

数据结构——哈希表

摘要:本篇笔记主要讲解了重要数据结构——哈希表,以及键值对的含义,为什么要用键值对,哈希表的应用场景,以及内存中运行的数据库的基础知识

云杉木屋 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【C语言数据结构】之哈希表

本文主要讲解哈希表的概念和实现,尤其是解决哈希冲突时候所采用的链地址法。我们主要还是要实现出代码,理解和代码共存。

weixin_61276540的博客 3166

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

散列表、哈希表、冲突

散列表(Hash Table),也称哈希表,是一种根据关键码值(Key-Value)进行访问的数据结构,通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。散列表可以使用数组来实现,每个数组元素对应一个桶,每个桶可以存储多条数据,每条数据的访问时间是O(1)的。散列表的核心就是散列函数,它把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变成固定长度的输出,该输出即为散列值。散列表中使用散列函数计算出每个关键字的散列值,并根据该值存储或查找对应的数据。

m0_58381606的博客 1270

【算法】哈希表

本次为大家带来的是哈希表在算法中的应用与实践,主要讲解哈希表的思路以及在算法题中的应用,本篇文章由于是面向算法党的,对于工程实现部分讲解较为粗糙,以后会在STL中详细讲解工程实现。当然,本篇文章会给出哈希表的两种快速实现,希望大家能将这两个模板理解记忆,方便面试中或者算法竞赛中快速实现。散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。

白晨的博客 3348

哈希表(散列表)原理详解

哈希表(散列表)原理详解

那年聪聪 30万+

数据结构与算法学习笔记----哈希表

@ author: 明月清了个风。

weixin_60278491的博客 2369
上一篇: 说透常见设计模式之代理模式
下一篇: 我不允许你还不知道这本助你斩获高薪offer的神书
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值