hash

MIT Introduction to Algorithms 学习笔记(十)

随声附和 提交于 2020-03-01 20:52:18
Lecture 9: Hashing II: Table Doubling,Karp-Rabin 散列表应该有多大 ? 理想状态 : 根据需要改变大小 . ( 重散列 )Rehashing 增长 : 散列表长度成倍增长是个好选择 . 删除 : 字符串匹配 (String Matching) Simple Algorithm: Karp-Rabin Algorithm: python代码: def karp_rabin(T, P): n = len(T) m = len(P) d = 256 q = 101 h = d ** (m - 1) % q p = 0 t = 0 for i in range(m): p = (d*p + ord(P[i])) % q t = (d*t + ord(T[i])) % q for s in range(n - m + 1): print(s,p,t) if p == t and T[s:s+m] == P: return s if s < n - m: t = ( d * ( t - ord( T[s] ) * h ) + ord( T[s + m] ) ) % q 来源: oschina 链接: https://my.oschina.net/u/106593/blog/604576

集合

不问归期 提交于 2020-03-01 20:08:17
1.为什么单向链表查询效率较低? 因为单向链表中的每个元素在空间的存储位置上没有规律,也没有顺序,那么在查找某个元素的时候必须从头节点挨着往后找,直到找到为止。 2.为什么单向链表的增到效率较高? 因为链表每个元素存储的空间是是没有顺序的,删除或者添加某个元素,只需要让指针重新指向即可。不需要其他元素位移。 關於collection集合中的方法 boolean add(object element);向集合中添加元素 void clear();清空集合 boolean contains(object o);判断集合中是否包含某个元素 boolean isEmpty();判断集合中是否有元素 Iteratoriterator();获取集合所依赖的迭代器对象 boolean romove(object o);删除集合中某个元素 int size();获取集合中元素的个数 object[]toArray();将集合转换为数组 contains方法底层调用的是equals方法,如果equals返回true就是包含。 关于Map集合中常用的方法 void clear() ;清空Map Map boolean containsKey (object key) ;判断Map中是否包含这样的key. boolean containsvalue (object value)

Java编程的逻辑 (40) - 剖析HashMap

淺唱寂寞╮ 提交于 2020-03-01 16:19:38
前面两节介绍了ArrayList和LinkedList,它们的一个共同特点是,查找元素的效率都比较低,都需要逐个进行比较,本节介绍HashMap,它的查找效率则要高的多,HashMap是什么?怎么用?是如何实现的?本节详细介绍。 字面上看,HashMap由两个单词组成,Hash和Map,这里Map不是地图的意思,而是表示映射关系,是一个接口,实现Map接口有多种方式,HashMap实现的方式利用了Hash。 下面,我们先来看Map接口,接着看如何使用HashMap,然后看实现原理,最后我们总结分析HashMap的特点。 Map接口 基本概念 Map有键和值的概念,一个键映射到一个值,Map按照键存储和访问值,键不能重复,即一个键只会存储一份,给同一个键重复设值会覆盖原来的值。使用Map可以方便地处理需要根据键访问对象的场景,比如: 一个词典应用,键可以为单词,值可以为单词信息类,包括含义、发音、例句等。 统计和记录一本书中所有单词出现的次数,可以以单词为键,出现次数为值。 管理配置文件中的配置项,配置项是典型的键值对。 根据身份证号查询人员信息,身份证号为键,人员信息为值。 数组、ArrayList、LinkedList可以视为一种特殊的Map,键为索引,值为对象。 接口定义 Map接口的定义为: public interface Map<K,V> { V put(K key, V

Java中equals和hascode之间的关系

懵懂的女人 提交于 2020-03-01 16:16:26
在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题。比如说:Java 的 equals() 和 hashCode() 是远房亲戚吗?像这类灵魂拷问的主题,非常值得深入地研究一下。 另外,我想要告诉大家的是,研究的过程非常的有趣,就好像在迷宫里探宝一样,起初有些不知所措,但经过一番用心的摸索后,不但会找到宝藏,还会有一种茅塞顿开的感觉,非常棒。 对于绝大多数的初级程序员或者说不重视“内功”的老鸟来说,往往停留在“知其然不知其所以然”的层面上——会用,但要说底层的原理,可就只能挠挠头双手一摊一张问号脸了。 很长一段时间内,我,沉默王二也一直处于这种层面上。但我决定改变了,因为“内功”就好像是在打地基,只有把地基打好了,才能盖起经得住考验的高楼大厦。借此机会,我就和大家一起,对“equals() 和 hashCode()”进行一次深入地研究。 equals() 和 hashCode() 是 Java 的超级祖先类 Object 定义的两个重要的方法: public boolean equals (Object obj) public int hashCode () 讲道理,单从方法的定义上来看, equals() 和 hashCode() 这两个方法之间没有任何亲戚关系,远房都够不上资格。但往深处扒拉,它们之间还真的是有千丝万缕的关系。到底是什么关系呢

redis源码分析之内存布局

假装没事ソ 提交于 2020-03-01 14:05:03
1. 介绍 众所周知,redis是一个开源、短小、高效的key-value存储系统,相对于memcached,redis能够支持更加丰富的数据结构,包括: 字符串(string) 哈希表(map) 列表(list) 集合(set) 有序集(zset) 主流的key-value存储系统,都是在系统内部维护一个hash表,因为对hash表的操作时间复杂度为O(1)。如果数据增加以后,导致冲突严重,时间复杂度增加,则可以对hash表进行rehash,以此来保证操作的常量时间复杂度。 那么,对于这样一个基于hash表的key-value存储系统,是如何提供这么丰富的数据结构的呢?这些数据结构在内存中如何存储呢?这篇文章将用大量的图片演示redis的内存布局和数据存储。 2. redisServer 在redis系统内部,有一个 redisServer 结构体的全局变量 server , server 保存了redis服务端所有的信息,包括当前进程的PID、服务器的端口号、数据库个数、统计信息等等。当然,它也包含了数据库信息,包括数据库的个数、以及一个redisDb数组。 struct redisServer { …… redisDb *db; int dbnum; /* Total number of configured DBs */ …… } 显然

Redis中hash的理解

自作多情 提交于 2020-03-01 13:08:39
Hash 常用命令: 序号 命令及描述 1 HDEL key field2 [field2] 删除一个或多个哈希表字段 2 HEXISTS key field 查看哈希表 key 中,指定的字段是否存在。 3 HGET key field 获取存储在哈希表中指定字段的值。 4 HGETALL key 获取在哈希表中指定 key 的所有字段和值 5 HINCRBY key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment 。 6 HINCRBYFLOAT key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。 7 HKEYS key 获取所有哈希表中的字段 8 HLEN key 获取哈希表中字段的数量 9 HMGET key field1 [field2] 获取所有给定字段的值 10 HMSET key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中。 11 HSET key field value 将哈希表 key 中的字段 field 的值设为 value 。 12 HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值。 13 HVALS

集合框架之HashMap(一)

半城伤御伤魂 提交于 2020-03-01 08:33:16
HashMap是非常重要的数据结构,并且大部分面试都会问到,优秀的java程序员应当要对HashMap进行深入的了解,今天我们就来剖析一下它。 目录 HashMap简介 成员变量 get和put的流程 hashMap相关的面试题 总结 一.简介 首先,HashMap是一个无序key,value集合,它的底层存储是由数组加链表和红黑树结构组成的的。在进行添加,删除和查找时,效率非常高,如果不考虑哈希碰撞,一次定位就能完成操作,时间复杂度为O(1)。 下面是一个默认长度的hashMap。 二.hashMap的成员变量 1.初始大小 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 这个是值是数组长度,也就是数组的初始最大行数,当然如果碰撞比较多,也有可能hashMap存了200个值,但是容量还是16。当然这不是理想状态。 2.最大值 static final int MAXIMUM_CAPACITY = 1 << 30; 这个没有什么好说的,hashMap最大容量。 3.增长因子 static final float DEFAULT_LOAD_FACTOR = 0.75f; 增长因子,就是如果数组被占用的大小超过当前大小的75%时,就进行扩容,按照当前容量二倍创建一个新的Entry

PHP大型Web应用入门(三)

拈花ヽ惹草 提交于 2020-03-01 07:04:14
PHP大型Web应用入门(三) 接上一篇:还是郁字符长度的限制。 早期版本的PHPWIND论坛的cache机制是很差的,虽然它很快,但是很脆弱,一旦cache文件损坏或丢失,它不会自己去创建它,而是直接导致程序无法运行,这种只能叫做临时文件,而不能叫cache。我不知道现在的PHPWIND什么样,因为我一直没兴趣去看它…… 下面的部分是mSession的实现,它只是模拟了session的存取过程,并对系统session进行了改进。它用了Hash目录。它的缺点是在程序结束部分还要Rewrite一下,把数据更新到session文件里,当然这个很容易被改进。 < ? php class BsmSession { var $ sid ; var $ sess_file ; function mSession_Start ( ) { // Special Function...session_start() global $ cookie_sess_id_varname , $ cookie_path , $ sess_liftime , $ mSession ; $ sid = $ _COOKIE [ $ cookie_sess_id_varname ] ? $ _COOKIE [ $ cookie_sess_id_varname ] : $ this - > _Gen_Sid ( ) ;

Sort multidimensional hash by values and print the highest

五迷三道 提交于 2020-03-01 05:30:19
问题 I have a stored multidimensional hash ( %info ) with following structure: $info{$os}{$id}=$length; foreach $os (keys %info){ foreach $id (keys %{$info{$os}}){ print "$os $id => " . $info{$os}{$id} ."\n" if (keys %info > 100); } } With this, I can read the hash and print only those $os with more than 100 occurrences, but now I would like to print only the $id with highest $length (i.e., values). So I would like to sort the hash by values and print only $os and $id with highest value. Any help?

Sort multidimensional hash by values and print the highest

淺唱寂寞╮ 提交于 2020-03-01 05:29:51
问题 I have a stored multidimensional hash ( %info ) with following structure: $info{$os}{$id}=$length; foreach $os (keys %info){ foreach $id (keys %{$info{$os}}){ print "$os $id => " . $info{$os}{$id} ."\n" if (keys %info > 100); } } With this, I can read the hash and print only those $os with more than 100 occurrences, but now I would like to print only the $id with highest $length (i.e., values). So I would like to sort the hash by values and print only $os and $id with highest value. Any help?