最近在复习算法和数据结构 ,这章把hash表的概念和相关题目进行汇总。
0、前言
0.1、哈希表和数组、以及链表的对比:
(1).数组的特点:寻址容易,插入和删除困难; 数组存储连续,查找一个元素的时间复杂度为O(1);
(2).链表的特点:寻址困难,插入和删除容易。链表存储区是离散的,遍历链表的元素的时间复杂度为O(N)。
(3).hash-table是根据关键值(key-value)来直接进行访问的数据结构,它结合了数组和链表的优点。...
分类:
其他好文 时间:
2015-07-31 18:21:45
阅读次数:
111
哈哈,这个事自己敲的,而且运用了set容器,就是查找而已,用set容器挺方便的,网上用的hash做的都好长好
麻烦,我觉得hash表有点难,特别是要自己想出一个函数,不太想学这个。。。
贴代码:
#include
#include
#include
#include
#include
#include
using namespace std;
char a[120005][20];
char...
分类:
其他好文 时间:
2015-07-31 16:17:21
阅读次数:
172
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。思路:这道题的简单版本是除了一个数字之外,其他数字都出现了两次,这个很简单,将所有的数异或一遍就得到了那个数字。如果不考虑空间复杂度的话,通过hash表统计的方法可以得到这两个数字;但如果空间复杂度要求...
分类:
编程语言 时间:
2015-07-26 22:16:34
阅读次数:
169
1.awk中的!a[$0]++与!a[$1]++的使用!a[$0]++可以去除一行中重复的记录,例子如下:[root@localhostshell]#cat1.txt
a
a
b
b
c
c
e
f
g
a
f
[root@localhostshell]#awk‘!a[$0]++‘1.txt
a
b
c
e
f
g解释:a[$0]就是以每一行内容为索引的一个hash表,当a[$0]未声明时,a[$0]为假,..
分类:
其他好文 时间:
2015-07-26 06:23:36
阅读次数:
128
这道题和Remove Duplicates from Sorted Array这道题相类似,不同的是这里允许出现重复的数字,可以采用二分搜索的变种算法,只不过加入了剔除和第一个元素相同的元素的过程。另一个思路是加入一个变量,用于记录元素出现的次数。这题因为是已经排序的数组,所以一个变量即可解决。如果是没有排序的数组,则需要引入一个hash表来记录出现次数。...
分类:
其他好文 时间:
2015-07-24 18:29:26
阅读次数:
124
memcache的工作就是在专门的机器的内存里维护一张巨大的hash表,来存储经常被读写的一些数组与文件,从而极大的提高网站的运行效率,减轻后端数据库的读写压力。实验环境:centos6.6x86_64LAMP环境搭建完毕:php版本5.6.8、apache版本2.4.121、在安装memcached之前需要安装libe..
分类:
Web程序 时间:
2015-07-21 19:03:17
阅读次数:
173
这个问题的解决方法是多种多样的。如本文所用,Trie为了解决这个问题。它也可用于hash表。map等解决方案,由于输入是特定7数字,因此,你应该能够解决。如本文所用,Trie不是非常快。最后,我主要是由于直接输出导线,遍历整个Trie速度相当慢。思路:1 使用insert函数建立Trie。主要添加一...
分类:
其他好文 时间:
2015-07-21 16:40:24
阅读次数:
88
题目:选课系统,每个人选5门课,如果很多人选择相同5门课认为这个组合比较热门,
现在要求出选择最热门课程组合的选择人数。
分析:数据结构,STL。对每组数据先排序,然后利用map统计求解即可。
(也可以使用hash表或者利用long long压缩排序统计)
说明:如果有很多人们组合,都算在一起。
#include
#include
#i...
分类:
其他好文 时间:
2015-07-21 10:40:24
阅读次数:
139
Golang中也有实用的泛型编程模板。如map。据Go官方团队称,其实现为Hash表,而非类似cpp或Java的红黑树。所以理论上速度更能快上几个等级(Hash与红黑树的效率对比可以看我的文章C++中各种关联方式的速度对比,效率比约为3:1),但有一些区别,就是遍历时,数据是无需且随机的(当然,.....
分类:
其他好文 时间:
2015-07-20 23:13:44
阅读次数:
171
查找算法中 hash查找是最快的.但是它需要先构造hash表,构造hash表之后利用hash函数在hash表中查找的速度是非常迅速的 所以时间复杂度是O(1)
最常用的构造散列函数的方法是: 除留余数法
F(key) = key mod P (P <= M)
若散列表的长度是M, 通常p为小于或等于表长(最好接近于m)的最小质数,或不包含小于20质因子的合数.
has...
分类:
其他好文 时间:
2015-07-20 19:34:36
阅读次数:
146