第四讲. 经典算法之哈希映射

1. 简介

哈希即Hash,一般翻译为散列的意思,简单而言其实就是通过一个函数,将一个值映射成另一个更好的值。
这个更好,是一个比较抽象的概念。可以是把一个很大的数,映射到一个小的区间内,以作为数组索引;也可以是将一个非数值型数据,如字符串等映射成一个数值型数据,以实现更好的索引或者判重;又或者将一段很长的信息加密成一段短小的密文,以实现信息的保密传输等等。
x = H ( k ) x=H(k) x=H(k)这里的 k k k 表示原始值或者哈希键值, H H H 表示映射函数, x x x 表示将哈希键映射后的结果值。
哈希映射图解

2. 从一个简单例题开始

现在给出 n 个数(a[0],a[1],…,a[n-1]),且每个数的大小都是小于等于 1010 的非负数(0<=a[i]<=1010),现需要统计每个数的出现次数,并从小到大依次输出,且 n 是小于等于 100 的正整数(0<n<=100)。
输入样例:

10
12 116 87 105 12 605 8998 87 12 105

输出样例:

12 3
87 2
105 2
116 1
605 1
8998 1

我想许多人拿到这类题的第一感觉就是,直接利用数组的下标索引标记每个数,然后每次出现 i ,便令 x[i]++ 即可。确实,这样的算法非常灵活地运动了下标,在统计计数地过程中也达到了线性时间复杂度,是最优的算法了,代码如下:

#include <stdio.h>
#define MAX 10000000000
int x[MAX+5] = {
   
   0};
int main()
{
   
   
	int n
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值