C++——散列(hash)

强颜欢笑 提交于 2020-02-28 05:40:45

散列(hash)将元素通过一个函数转换为整数,使得该整数可以尽量唯一地代表这个元素。

例如,在仅出现"A"~"Z"的字符串就可以通过hash(26*26*26)将字符型数据转换为整型数据,并且数据不会发生重复。代码如下:

#include <iostream>
using namespace std;

#define MAX 5	//输入数据的数量

int getid(char *id){	//将长度为3的字符串转换为整型存储 
	int i_id = 0;
	for(int i = 0; i < 3; i++)
		i_id = 26 * i_id + (id[i] - 'A');
	return i_id;
}

int main() {
	//使用(散列)hash(26*26*26)将字符型数据转换为整型数据 
	const int maxn = 26 * 26 * 26;
	int s[maxn], i_id;
	char c_id[MAX][3];
	for(int i = 0; i < MAX; i++){
		cin >> c_id[i];		//输入字符型数据 
		i_id = getid(c_id[i]);	//将字符型转换为整型 
		s[i] = i_id;	//存储该整型 
	}
	for(int i = 0; i < MAX; i++){
		cout << s[i] << endl;
	}
	return 0;
}

输入样例:

//输入:
AAA
AAD
ABA
ABC
CDE
//输出:
0		// 0*26*26 + 0*26 + 0	'A' - 'A' = 0
3		// 0*26*26 + 0*26 + 3	'D' - 'A' = 3
26		// 0*26*26 + 1*26 + 0	'B' - 'A' = 1
28		// 0*26*26 + 1*26 + 2	'C' - 'A' = 2
1434	// 2*26*26 + 3*26 + 4	'E' - 'A' = 4


氷鸢鸢鸢
2020.2.27

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!