当前位置: 首页 > news >正文

哈希 --- 线性探测法

Constraints

Time Limit: 1 secs, Memory Limit: 256 MB

Description

 

 使用线性探测法(Linear Probing)可以解决哈希中的冲突问题,其基本思想是:设哈希函数为h(key) = d, 并且假定哈希的存储结构是循环数组则当冲突发生时继续探测d+1, d+2…, 直到冲突得到解决

例如现有关键码集为 {477291116922283}

设:哈希表表长为m=11;哈希函数为Hash(key)=key mod 11;采用线性探测法处理冲突。建哈希表如下:

 

0

1

2

3

4

5

6

7

8

9

10

11

22

 

47

92

16

3

7

29

8

 

 

现在给定哈希函数为Hash(key)= key mod m,要求按照上述规则使用线性探测法处理冲突.要求建立起相应哈希表,并按要求打印。

 

Input

 

 仅有一个测试用例1行为整数nm1 <= n, m <= 10000), n代表key的总数, m代表哈希表的长度并且令哈希函数为Hash(key) = key mod m.

接下来n行,每行一个整数,代表一个keyKeykey两两不相同 ( 0 <= key <= 10, 000)

 

Output

 

 输出建立好的hash表,比如下表

0

1

2

3

4

5

6

7

8

9

10

11

22

 

47

92

16

3

7

29

8

 

 

应输出

0#11

1#22

2#NULL

3#47

4#92

5#16

6#3

7#7

8#29

9#8

10#NULL

 

Sample Input

3 5
1
5
6

Sample Output

0#5
1#1
2#6
3#NULL
4#NULL

 

初学哈希,水一题。

 

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main()
{
    int n,m;
    int a,b;
    int num[10001];
    memset(num,0,sizeof(num));
    cin>>n>>m;
    while(n--)
    {
        cin>>a;
        b=a%m;
        if(!num[b])
            num[b]=a;
        else
            while(num[b])
            {
                b++;
                b%=m;
            }
            num[b]=a;
    }
    for(int i=0;i<m;i++)
    {
        if(!num[i])
            cout<<i<<"#NULL"<<endl;
        else cout<<i<<"#"<<num[i]<<endl;
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/crazyacking/p/3757386.html

相关文章:

  • 百度的疯狂 UC的隐忍
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 新的一年,来看看大数据与AI的未来展望
  • daemontools 监控进程
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • select的使用(一)
  • LeeCode 14. 最长公共前缀
  • struts2 中的 addActionError 、addFieldError、addAction
  • 广西苗乡民众与游人“打同年”庆祝苗年
  • 网站验证码突然无法显示
  • [leetcode]Search a 2D Matrix @ Python
  • 雷军亲自打造的套餐了解下:用多少付多少
  • linux的进程管理
  • 网站三要素tdk如何正确的设置
  • 快照——COFW\ROFW
  • eclipse的离线汉化
  • JavaScript学习总结——原型
  • JS+CSS实现数字滚动
  • JSDuck 与 AngularJS 融合技巧
  • PHP 小技巧
  • Python_网络编程
  • ReactNative开发常用的三方模块
  • SpingCloudBus整合RabbitMQ
  • SpriteKit 技巧之添加背景图片
  • vuex 学习笔记 01
  • 基于 Babel 的 npm 包最小化设置
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 区块链技术特点之去中心化特性
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 微服务入门【系列视频课程】
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • # 达梦数据库知识点
  • #NOIP 2014#Day.2 T3 解方程
  • (003)SlickEdit Unity的补全
  • (多级缓存)缓存同步
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (三)c52学习之旅-点亮LED灯
  • (转)我也是一只IT小小鸟
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .net 简单实现MD5
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .net分布式压力测试工具(Beetle.DT)
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .NET微信公众号开发-2.0创建自定义菜单
  • .sys文件乱码_python vscode输出乱码
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • /var/log/cvslog 太大
  • @RequestParam详解
  • [Angular 基础] - 数据绑定(databinding)
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [AutoSar]BSW_Com02 PDU详解
  • [BZOJ] 2044: 三维导弹拦截