【C/C++】散列/算法笔记4.2
先说一下我自己的理解。
我先给你N组数据,这个N组里可能有重复的!
然后我们先统计好了N组里面的独立的每个对应的出现了几次(相当于map,然后每项属性有出现了多少次的),用的是数组下标对应
现在我们给了M个名字,要看这个出现了几次
就直接返回数组下标对应的数
但是呢,这个数组可能会太长了,我们就用一些方法,比如求余,让这组数尽量紧凑起来。
但是求余会导致得到同样的结果,处理的方法有H(key)+1,+2..或者H(key)+1^2 再或者用一个链表,把H(key)相同的存起来。
- 散列的定义与整数散列
给定数组N和数组M,要查询M中的数字是否在N中出现过,用空间换时间,建立一个哈希表,如果被查询数组N中有这个数字x,就将哈希表的第x个bool值改为true,不然就是false。
然后一边读入M中的数字,一边看哈希表中对应位置是不是为true,如果是就输出。
#include <iostream>
const int maxn = 100000;
bool hashtable[maxn] = {false}; //一次将所有的置为false
int main()
{
// for (int i = 0; i < 10; i++)
// {
// if (hashtable[i] == false)
// {
// printf("Yes\n");
// }
// }
int m, n, x;
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++)
{
scanf("%d", &x);
hashtable[x] = true;
}
for (int i = 0; i < m; i++)
{
scanf("%d", &x);
if (hashtable[x] == true)
{
printf("%d\n",x);
}
}
system("pause");
}
如果要看查询表M中的元素,在被查询N数组中出现的次数,把hashtable设置为int型。
#include <iostream>
const int maxn = 100000;
int hashtable[maxn];
int main()
{
memset(hashtable,0,sizeof(hashtable));
int m, n, x;
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++)
{
scanf("%d", &x);
hashtable[x]++;
}
for (int i = 0; i < m; i++)
{
scanf("%d", &x);
printf("%d\n", hashtable[x]);
}
system("pause");
}
2.字符串hash
字母用用把字母转化到十进制数,然后再用1的方法。
给出N个字符串统计,给出M个查询串,问每个查询串在N个字符串种出现的次数。
hashtable是262626,因为26进制转化后最大为(26^2+26+1)*25(注意是25),变化为1,开始为000.
#include <iostream>
#include <string.h>
using namespace std;
const int maxn = 100; //设置被查询串个数
char s[maxn][5]; //字典,3位大写英文,有maxn组
char temp[5];
int hashtable[26*26*26 + 10];
int hashFunc(char a[], int len)
{
int id = 0;
for (int i = 0; i < len; i++)
{
id = (a[i] - 'A') + id*26;
}
return id;
}
int main()
{
memset(hashtable,0,sizeof(hashtable));
//输入输出
int m, n; //m个查询串,n个被查询串(字典)
scanf("%d%d", &m, &n);
//建立字典
for (int i = 0; i < n; i++)
{
scanf("%s", s[i]);
hashtable[hashFunc(s[i], 3)]++;
}
for (int i = 0; i < m; i++)
{
scanf("%s", temp);
int t = hashFunc(temp, 3);
printf("%d\n", hashtable[t]);
}
system("pause");
}
【C/C++】散列/算法笔记4.2的更多相关文章
- Android数据加密之SHA安全散列算法
前言: 对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好 ...
- 个人理解c#对称加密 非对称加密 散列算法的应用场景
c#类库默认实现了一系列加密算法在System.Security.Cryptography; 命名空间下 对称加密 通过同一密匙进行加密和解密.往往应用在内部数据传输情况下.比如公司a程序 和B程序 ...
- C# SHA1散列算法
C# SHA1散列算法 /// <summary> /// C# SHA1散列算法 /// </summary> /// <param name="str&qu ...
- SHA安全散列算法简析
1 SHA算法简介 1.1 概述 SHA (Secure Hash Algorithm,译作安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散 ...
- shiro进行散列算法操作
shiro最闪亮的四大特征:认证,权限,加密,会话管理 为了提高应用系统的安全性,这里主要关注shiro提供的密码服务模块: 1.加密工具类的熟悉 首先来个结构图,看看shiro提供了哪些加密工具类: ...
- [转帖]什么是安全散列算法SHA256?
什么是安全散列算法SHA256? http://8btc.com/article-136-1.html 发布者: 无主之地 发表于: 2013-10-1 01:31 78152 2 分享 安全散列 ...
- shiro中自定义realm实现md5散列算法加密的模拟
shiro中自定义realm实现md5散列算法加密的模拟.首先:我这里是做了一下shiro 自定义realm散列模拟,并没有真正链接数据库,因为那样东西就更多了,相信学到shiro的人对连接数据库的一 ...
- 什么是安全散列算法SHA256?
安全散列算法SHA(Secure Hash Algorithm)是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数,包括 SHA-1.SHA-224.S ...
- java学习-sha1散列算法
直接调用HashKit.sha1(String str)方法就可以了,,返回的是16进制的字符串长度是40, 也就是用md.digest()方法解析出来的字节数是160字节长度. 而MD5散列算法生成 ...
随机推荐
- AppGallery Connect场景化开发实战—注册订阅通知
借助AppGallery Connect(以下简称AGC)的认证服务,云函数,短信服务等服务,当用户注册成功后,便可以在注册的手机号或者邮箱地址中收到一条应用的欢迎短信或者欢迎邮件.以便让开发者更快地 ...
- Mysql5.7和8.0版本的文件夹版安装教程(整合版,超详细)
安装Mysql(5.7版本) 下载地址在这里可以自选版本,找到合适的版本进行下载 解压安装包 配置环境变量 win+r 输入 sysdm.cpl 点击高级 点击环境变量 新建一个系统变量 变量名为MY ...
- [loj6736]最小连通块
定义$f(S)$表示点集$S$的最小连通块 做法1 通过对所有节点判定,可以在$n$次询问中求出具体的$f(S)$ 对于$x\ne y$,显然$(x,y)\in E$当且仅当$f(\{x,y\})=\ ...
- [hdu7082]Pty loves lcm
先将问题差分,即仅考虑上限$R$(和$L-1$) 注意到$f(x,y)$增长是较快的,对其分类讨论: 1.若$y\ge x+2$,此时满足$f(x,y)\le 10^{18}$的$(x,y)$只有约$ ...
- [luogu1526]智破连环阵
(以下在描述复杂度时,认为$n$和$m$相同,因此一律使用$n$) 称第$i$个炸弹能匹配非空区间$[l,r]$,当且仅当$l$到$r$内所有武器都在$i$攻击范围内,且$r=m$或第$r+1$个武器 ...
- [hdu6715]算术
首先要知道一个式子:$\mu(lcm(i,j))=\mu(i)\cdot \mu(j)\cdot \mu(gcd(i,j))$(分是否为0讨论)令$d=gcd(i,j)$,$n'=\lfloor n/ ...
- [bzoj4652]循环之美
对于一个分数x/y(x和y互素),在k进制下为纯循环当且仅当y和k互素证明:任意一个分数都可以写成0.abbbbbbbb的形式(不妨假设a尽量短),设a的位数为l1,b的位数为l2,那么原分数即$\f ...
- set比较大小
#include <iostream> using namespace std; #include <set> class Person{ public: Person(str ...
- 第一章 初始C语言
第一章 初始C语言 目录 第一章 初始C语言 1. C语言起源 2. 选择C语言的理由 2.1 设计特性 2.2 高效性 2.3 可移植性 2.4 强大而灵活 2.5 面向程序员 3. C语言的应用范 ...
- 洛谷 P6672 - [清华集训2016] 你的生命已如风中残烛(组合数学)
洛谷题面传送门 题解里一堆密密麻麻的 Raney 引理--蒟蒻表示看不懂,因此决定写一篇题解提供一个像我这样的蒟蒻能理解的思路,或者说,理解方式. 首先我们考虑什么样的牌堆顺序符合条件.显然,在摸牌任 ...