先说一下我自己的理解。

我先给你N组数据,这个N组里可能有重复的!

然后我们先统计好了N组里面的独立的每个对应的出现了几次(相当于map,然后每项属性有出现了多少次的),用的是数组下标对应

现在我们给了M个名字,要看这个出现了几次

就直接返回数组下标对应的数

但是呢,这个数组可能会太长了,我们就用一些方法,比如求余,让这组数尽量紧凑起来。

但是求余会导致得到同样的结果,处理的方法有H(key)+1,+2..或者H(key)+1^2 再或者用一个链表,把H(key)相同的存起来。

  1. 散列的定义与整数散列

    给定数组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的更多相关文章

  1. Android数据加密之SHA安全散列算法

    前言: 对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好 ...

  2. 个人理解c#对称加密 非对称加密 散列算法的应用场景

    c#类库默认实现了一系列加密算法在System.Security.Cryptography; 命名空间下 对称加密 通过同一密匙进行加密和解密.往往应用在内部数据传输情况下.比如公司a程序 和B程序 ...

  3. C# SHA1散列算法

    C# SHA1散列算法 /// <summary> /// C# SHA1散列算法 /// </summary> /// <param name="str&qu ...

  4. SHA安全散列算法简析

    1 SHA算法简介 1.1 概述 SHA (Secure Hash Algorithm,译作安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散 ...

  5. shiro进行散列算法操作

    shiro最闪亮的四大特征:认证,权限,加密,会话管理 为了提高应用系统的安全性,这里主要关注shiro提供的密码服务模块: 1.加密工具类的熟悉 首先来个结构图,看看shiro提供了哪些加密工具类: ...

  6. [转帖]什么是安全散列算法SHA256?

    什么是安全散列算法SHA256? http://8btc.com/article-136-1.html 发布者: 无主之地 发表于: 2013-10-1 01:31 78152 2 分享   安全散列 ...

  7. shiro中自定义realm实现md5散列算法加密的模拟

    shiro中自定义realm实现md5散列算法加密的模拟.首先:我这里是做了一下shiro 自定义realm散列模拟,并没有真正链接数据库,因为那样东西就更多了,相信学到shiro的人对连接数据库的一 ...

  8. 什么是安全散列算法SHA256?

    安全散列算法SHA(Secure Hash Algorithm)是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数,包括 SHA-1.SHA-224.S ...

  9. java学习-sha1散列算法

    直接调用HashKit.sha1(String str)方法就可以了,,返回的是16进制的字符串长度是40, 也就是用md.digest()方法解析出来的字节数是160字节长度. 而MD5散列算法生成 ...

随机推荐

  1. maven中的distributionManagement的作用

    mvn install  会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库. 本地Maven仓库的构件只能供当前用户使用,在分发到远程Ma ...

  2. 如何系统学习C 语言(下)之 预处理命令篇

    大话c语言(下)之 预处理命令篇 预处理就是在编译之前,通过一些预处理命令对源代码进行管理和控制的过程. 由源代码得到可执行的程序,会经过预处理.编译.汇编和链接几个过程 预处理命令大致可以分为文件包 ...

  3. Part 29 AngularJS intellisense in visual studio

    In the previous videos if you have noticed as we were typing the angular code in Script.js file we w ...

  4. 第二周PTA笔记 均等笔+旋转骰子+两个日期相差天数

    均等笔 n个人围成一圈,每人有ai支笔.每人可以向左右相邻的人传递笔,每人每次传递一支笔消耗的能量为1.求使所有人获得均等数量的笔的最小能量. 输入格式: 第一行一个整数n ,表示人的个数(30%的数 ...

  5. 记一次 .NET 某电商无货源后端服务 死锁分析

    一:背景 1. 讲故事 这个月初,星球里的一位朋友找到我,说他的程序出现了死锁,怀疑是自己的某些写法导致mongodb出现了如此尴尬的情况,截图如下: 说实话,看过这么多dump,还是第一次遇到真实的 ...

  6. [51nod1237]最大公约数之和V3

    $\sum_{i=1}^{n}\sum_{j=1}^{n}gcd(i,j)\\$ $=\sum_{d=1}^{n}d\sum_{i=1}^{n/d}\sum_{j=1}^{n/d}\varepsilo ...

  7. [bzoj1934]善意的投票

    最小割,考虑最小割就是要将整张图分为两块,本题中就分别表示赞同和不赞同,那么首先一开始赞同的点向S连边,不赞同的点向T连边,如果这些点分到了另一边就要割掉这条边,朋友关系同理,连双向边同样表示分到两边 ...

  8. [cf1184E]Daleks' Invasion

    先求出任意一棵最小生成树,然后对边分类讨论1.非树边,答案即最小生成树的环上的最长边2.树边,反过来考虑,相当于对于每一个点对那条路经打上标记,取min对于1直接用倍增维护即可,对于2可以用树链剖分/ ...

  9. 文本分类:Keras+RNN vs传统机器学习

    摘要:本文通过Keras实现了一个RNN文本分类学习的案例,并详细介绍了循环神经网络原理知识及与机器学习对比. 本文分享自华为云社区<基于Keras+RNN的文本分类vs基于传统机器学习的文本分 ...

  10. .NET Core基础篇之:依赖注入DependencyInjection

    依赖注入已经不是什么新鲜话题了,在.NET Framework时期就已经出现了各种依赖注入框架,比如:autofac.unity等.只是在.net core微软将它搬上了台面,不用再依赖第三方组件(那 ...