散列hash小结

五分钟搞定散列(hash)算法思想 问题引入 之前在算法复杂度这一章中提到过,散列算法就是典型用空间换取时间的方法。 什么时间复杂度、空间复杂度,原来不过如此! 具体体现在哪,我们用一个例子来说明。 设分别有两个集合,分别有M个和N个元素。问N个元素中每个数是否在是否在M中出现过。 一个很直观的想法就是:分别输入两组数据,然后用两个for循环来遍历查找。 时间复杂度为O(MN),当N M足够大的时候,显然效率会非常低。 所以我们不妨... 阅读详情
1.print语句打印的区别
 
my %hash = (key1 => value1,
                     kye2 
=> value2);
print "%hash";   # 打印的结果就是一个字符串 : %hash
print %hash ;     # 打印结果和列表的一样,把key和value拼接串打印    key1value1key2value2
2.散列相关函数
keys
values
each   自动的循环hash体内的key value 至undef 然后再回到第一个key value
           注:无论调用keys values 都会将each的计数点回归到原点。
测试代码如下:
my %hash = (1 => 10,
                        
2 => 20,
                        
3 => 30,
                        
4 => 40);
                        
while (my ($key ,$value) = each %hash) {
    
print "$key -- $value  ";
}
print "--------------------------------- ";

my ($key ,$value) = each %hash;
print "$key -- $value  ";
my ($key ,$value) = each %hash;
print "$key -- $value  ";
my ($key ,$value) = each %hash;
print "$key -- $value  ";
my @key = keys (%hash);
my ($key ,$value) = each %hash;
print "$key -- $value  ";
my ($key ,$value) = each %hash;
print "$key -- $value  ";
my ($key ,$value) = each %hash;
print "$key -- $value  ";
my ($key ,$value) = each %hash;
print "$key -- $value  ";
my ($key ,$value) = each %hash;
print "$key -- $value  ";


##### 执行结果#################
4 -- 40 
1 -- 10 
3 -- 30 
2 -- 20 
---------------------------------
4 -- 40 
1 -- 10 
3 -- 30 
4 -- 40 
1 -- 10 
3 -- 30 
2 -- 20 
 
--  
reverse   注意值的唯一性
delete 彻底删除 key value
exists 针对key 是否存在
defined  针对value是否被定义,赋值
用法异同比较
语法相同点:
delete ( $hash{key});
exists ($hash{key});
defined($hash{key})
一个利用散列key唯一性的日志分析
#  日志格式如下。
#  要求按照第一字段分类,其余三个字段求和
#  处理结果为:

DS-SERVER-0009|0|0|0
DS
-SERVER-0001|26|0|0
DS
-SERVER-0011|0|0|0
null
|0|0|0

原始log文件如下:
DS
-SERVER-0001|1|0|0
DS
-SERVER-0001|1|0|0
DS
-SERVER-0001|2|0|0
DS
-SERVER-0001|1|0|0
null
|0|0|0
null
|0|0|0
DS
-SERVER-0001|1|0|0
DS
-SERVER-0001|1|0|0
DS
-SERVER-0001|19|0|0
DS
-SERVER-0001|0|0|0
DS
-SERVER-0009|0|0|0
DS
-SERVER-0009|0|0|0
DS
-SERVER-0001|0|0|0
DS
-SERVER-0011|0|0|0
日志分析代码:
#! /usr/local/bin/perl
#
# 多行日志分析


use strict;

my $logFile = "/shvpn/test/wlj/perl/hashLog.log";  # DS-SERVER-0001|1|0|0
open FILE, $logFile or die "cant open logfile $!  ";

my %hash; # DS-SERVER-0001|1|0|0  key 为第一字段,二层hash sum1,sum2 sum3分别代表三个字段求和

while (<FILE>) {
    
if ($_ =~ /(.+)|(d+)|(d+)|(d+)/) {
#        if (exists $hash{$1}{'sum1'}) {     # 注:不用特意的去判断键值是否存在,会自动判断并处理
            $hash{$1}{'sum1'} += $2;
#        }
#        else {
#            $hash{$1}{'sum1'} = $2;
#        }
#        if (exists $hash{$1}{'sum2'}) {

            $hash{$1}{'sum2'} += $3;
#        }
#        else {
#            $hash{$1}{'sum2'} = $3;
#        }
#        if (exists $hash{$1}{'sum3'}) {

            $hash{$1}{'sum3'} += $4;
#        }
#        else {
#            $hash{$1}{'sum3'} = $4;
#        }

    }
}

foreach (keys %hash) {
    
print "$_|$hash{$_}{'sum1'}|$hash{$_}{'sum2'}|$hash{$_}{'sum3'} ";
}
哈希表、哈希桶(C++实现) 哈希表、哈希桶哈希概念哈希函数哈希冲突解决哈希冲突闭散列线性探测闭散列的实现哈希表的结构哈希表的插入哈希表的查找哈希表的删除开散列哈希概念 哈希概念 在顺序结构和平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,O(logN ),搜索的效率取决于搜索过程中元素的比较次数。 而理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。 如果构造一种存储结构,通过某种函数(hashFunc)使元素的存 阅读详情

相关推荐

hash算法概念和hash加盐法

hash算法简单介绍,以及hash加盐法的简单介绍

社区之星的专栏 3692

Perl 中 %hash and \%hash 作为参数的区别

Perl 中 %hash and \%hash 作为参数的区别

dujidan的博客 464

从Multibit到Debanking:芯片设计中的时序优化完整流程解析(含真实案例)

本文深入解析芯片设计中Multibit技术与Debanking的时序优化完整流程,结合7nm移动SoC真实案例,详细探讨Multibit的核心优势、实施条件及潜在风险,并提供Debanking的触发时机与操作策略。通过平衡Multibit与Debanking,工程师可有效优化PPA(Power-Performance-Area),提升芯片设计效率。

weixin_30316097的博客 462

Perl自学(11)——引用

(本文参考博客) 1. Perl 引用 定义变量的时候,在变量名前面加个\,就得到了这个变量的一个引用。 Perl 引用是一个标量类型可以指向变量、数组、哈希表(也叫关联数组)甚至子程序,可以应用在程序的任何地方。 #标量引用 my$scalar=42; my$sref=\$scalar ; # 数组引用 my@array= (1,2,3) ; my$aref=\@array ; #哈希引用 my%hash= ("name"=>"foo","age"=>42,"gender"=&g

陌上人如玉,公子世无双。 732

DC综合中set_dft_signal的实战配置与优化策略

本文深入解析了DC综合中set_dft_signal命令的实战配置与优化策略。文章从命令的核心作用出发,详细拆解了-view、-type、-usage等关键参数,并通过扫描使能与时钟门控的实战案例,展示了如何正确配置以实现测试模式下的功耗优化。同时,文章总结了高级优化策略、与低功耗流程的协同方法以及常见错误排查清单,旨在帮助数字芯片设计工程师构建高可测性、低功耗的稳健DFT基础。

weixin_28347369的博客 403

从报错到优化:一次Gauss JDBC参数限制排查实录(32767参数上限避坑指南)

本文详细记录了排查GaussDB JDBC驱动因绑定参数数量超过32767上限而抛出`PSQLException`(报错信息为`Tried to send an out-of-range integer as a 2-byte value`)的全过程。文章深入分析了该限制的底层协议原理,并提供了应用层分批查询、使用临时表以及优化业务逻辑等多种解决方案,旨在帮助开发者规避此参数上限陷阱,构建更稳健的数据访问层。

rgv23456789的博客 218

散列hash

1.print语句打印的区别   my %hash = (key1 => value1,                      kye2 => value2); print "%hash";   # 打印的结果就是一个字符串 : %hash print %hash ;     # 打印结果和列表的一样,把key和value拼接串打印    key1value1key2value2

Ftabhb的专栏 538

QSPI Flash的原理与QSPI时序的Verilog实现

本节主要是讨论QSPI(Quad SPI,四线SPI总线)的相关内容。我的开发板上有一片型号是W25Q128BV的Quad SPI Flash存储器,本文将以它为例子来说明QSPI操作的一些内容。

Go Forward Forever! 4166

hash 和hash引用的常见操作方法

hash和hash引用的常见操作方法如下: #init a hash my %hash = (); #init a hash reference my $hash_ref = {}; # add a key/value pair to hash $hash{"key01"} = '111'; $hash{"key02"} = '222'; $hash_ref->{"key01"} =

Keep Moving~ 1589

工厂自动化布线实战:从功率计算到线槽布局的完整避坑指南

本文详细介绍了工厂自动化布线的实战经验,从功率计算到线槽布局的完整避坑指南。通过三步计算法确定线径需求,强调电压降控制的重要性,并分享线槽布局的50%法则和强弱电分离技巧。特别针对移动设备和多芯信号线提供专业解决方案,帮助工程师避免常见错误,提升布线效率和质量。

weixin_29266007的博客 355

【Python计量】linearmodels面板数据回归(一)

我们以伍德里奇《计量经济学导论现代方法》的”第14章高级面板数据方法“的案例14.1为例,使用jtrain中的数据来进行固定效应估计。

mfsdmlove的博客 9277

perl 总结

小括号 ()是给数组或者hash赋值 整个hash的初始化,用小括号%hash=("foo",35,"bar","12.4"); 列表赋值 ($fred,$barney)=qw (a b c d); ($fred,$barney)=@_; @line=();是置空数组,hash,list 置空都是() 中括号 数组下标[] 对匿名列表的引用:将列表的()替换为[]:my $arr

fdsafwagdagadg6576的专栏 3466

链接文件及功能安全:基于Tasking的LSL链接文件知识点梳理及实际应用分析

本文旨在记录研究链接文件时所遇到的问题及个人理解,以便日后查阅。在探索过程中,我遇到了诸多问题,同时对链接文件有了初步的认识。通过记录这些问题与理解,我希望能够为后续的研究提供清晰的思路和有价值的参考。这不仅是对研究过程的总结,更是对未来学习和实践的有力支持。

梦想技术家 1103

哈希算法(Hash、散列)应用场景小结

  项目中有好几个地方用到了哈希算法,更确切地说,是SHA算法的应用场景。MD5也是常用的哈希算法,但已经被证明不再安全,SHA-1也是如此,不安全的原因主要是彩虹表,或是碰撞计算,这里不详细描述。一般推荐使用SHA-256或者SHA-512,至少在当前是安全的。  哈希表在代码中也普遍使用,是一种用于关键字查询的数组或顺序列表,这里就不说了。 1. 校验安装文件的完整性  在软件部署的时候,计...

weixin_33670713的博客 345

【定位模块项目实战】gnss_localizer、lidar_localizer功能包解析

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、1.2.3.4.二、1.2.3.4.三、1.2.3.4.四、1.2.3.4.总结参考资料 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对**【无人驾驶autoware项目实战】感知–定位模块**做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、 1. 2. 3. 4. . . 二、

qq_35635374的博客 1931

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ruby 数组与散列哈希小结

首先安装 ruby   安装 rvm =&gt; ruby =&gt; rubymine   首先是数组的创建   names = [ ] #定义一个空数组 names = Array.new #创建数组 names = Array.new(20) #设置数组的大小   我们还可以返回数组的长度   names = Array.new(20) puts names...

iteye_983的博客 424

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

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

哈希表小结-冲突解决——哈希桶实现(开散列法)代码+思路+图片详解

冲突避免,冲突解决(线性探测,二次探测),链表插入,数组扩容,哈希表冲突解决的简单实现,你要寻找的开链法/哈希桶/开散列法就在这里,思路+图片+代码详解

m0_64304792的博客 687

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【数据结构基础】散列表存储

散列表

正心 诚意 修身 2339

数据结构mooc课小结(0)

想总结一下,大部分内容都掌握了,但相信还是有很多不熟练之处 授课大纲 第一讲 基本概念 [陈越] 1.1 什么是数据结构 1.2 什么是算法 1.3 应用实例:最大子列和问题 第二讲 线性结构 [何钦铭] 2.1 线性表及其实现 2.2 堆栈 2.3 队列   第三讲 树(上) [何钦铭] 3.1 树与树的表示 3.2 二叉树及存储结构 3.3 二叉树的遍历   第四讲 树(中)[何钦铭] 4....

A Little Programmer's Base 707

散列查找

对于散列表的定义,实现,以及冲突的处理,学过数据结构的肯定非常熟悉。下面借助leetcode上一道简单题目来浅谈如何散列进行查找。这是典型的利用空间来换取时间的例子。 问题描述 Given an array of integers, return indices of the two numbers such that they add up to a specific target. ...

CS改变世界 1008

哈希算法篇——散落的秘密与精准的归宿,混沌中的秩序之美(上)

在信息科学的星空下,有一种算法宛如一位洞悉混沌的智者,能够以其独特的规则,在无限的可能性中找到秩序。哈希算法将复杂数据映射到简单空间,它赋予了无序的世界以秩序,将分散的数据安排得井井有条。这是一个将键(Key)与值(Value)关联的数据结构,它通过哈希函数将键映射到数组的索引,实现快速的数据存取。这个过程像是一场化繁为简的魔术,将庞杂的输入浓缩成一个小巧的“指纹”。

2303_81060385的博客 6895

散列、散列函数、散列算法分析

散列函数、散列算法的Python语言实现

yiweixiaomiandui的博客 1563

Hash算法小结

1.哈希(Hash)与加密(Encrypt)的区别 在本文开始,我需要首先从直观层面阐述哈希(Hash)和加密(Encrypt)的区别,因为我见过很多朋友对这两个概念不是很清晰,容易混淆两者。而正确区别两者是正确选择和使用哈希与加密的基础。 概括来说,哈希(Hash)是将目标文本转换成具有相同长度的、不可逆的杂凑字符串(或叫做消息摘要),而加密(Encrypt)是将目标文本转换成具有不同长度的、可...

bitcarmanlee的博客 3063

关于哈希表/哈希算法的小结

关于hash table的总结

roufoo的博客 665

C++11 std::hash 用法小结

Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。Hash算法可以将一个数据转换为一个标志,这个标志和源数据的每一个字节都有十分紧密的关系。Hash算法还具有一个特点,就是很难找到逆向规律。...

HelloKandy's Blog 1万+
上一篇: 数组小结
下一篇: Perl特殊变量(flw等翻译)
utopia_wang
博客等级 码龄20年 7粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值