哈希函数

数据结构第7~8章练习答案(PTA) 下面给出了折半查找函数的大部分内容,但缺少了一部分(以下划线____标识出来的部分)。请先将以下代码中画横线的部分补充完整,然后将完整的函数Search_Bin提交系统,完成题目要求的功能。low=1;mid=____;high=____;return 0;ElemType k要搜索的值顺序表中第一个数据元素存储在T.R[1]下面给出了顺序查找函数的大部分内容,但缺少了一部分(以下划线____标识出来的部分)。 阅读详情

设哈希表长为18,哈希函数为: H(k)=k MOD 17 建立对应的哈希表。采用开放地址法中的二次探测再散列解决冲突,完成以下工作:
(1)查找值为x的元素地址(位置)。找不到则输出-1。
(2)删除关键字为t1、t2的元素,再添加关键字为y的元素
(3)输出整个哈希表(用%4d格式,没有数据则输出4个*)

输入格式:
输入分2部分,
第一部分是初始元素个数和序列
第二部分是x、t1、t2、y的值,分3行输入。

输出格式:
输出数据共2行
第一行是x的地址 第二行是最后的哈希表

输入样例:
12
16 74 60 43 54 90 46 31 29 88 77 26
77
77 90
98
输出样例:
8
26******** 54 88**** 74******** 60 43**** 46 29 31**** 16 98

#include<stdio.h>
#include<stdlib.h>

#define HASHSIZE 18
#define NULLKEY -1
typedef struct
{
    int *elem;
    int count;
} HashTable;
int m=1,t=1;
//初始化散列表
int InitHashTable(HashTable &H,int len)
{
    int i;
    H.count=0;
    H.elem=(int*)malloc(HASHSIZE*sizeof(int));
    for(i=0; i<18; i++)
    {
        H.elem[i]=NULLKEY;
    }
    return 1;
}
//散列函数
int Hash(int key)
{
    return key%17;
}
int collision(HashTable &H,int p)
{

    int i;
    int location;
    for(i=1; i<9; i++)
    {
        location=(p+i*i)%18;
        if(H.elem[location]==NULLKEY)
            return location;
        location=p-i*i;
        while(location<0)
            location+=18;
        location=location%18;
        if(H.elem[location]==NULLKEY)
            return location;
    }
    return -1;
}
//插入关键字进散列表
void InsertHash(HashTable &H,int key)
{
    int addr=Hash(key);

    while(H.elem[addr]!=NULLKEY)
    {
        addr=collision(H,addr);

    }
    //printf("%d ",addr);
    H.elem[addr]=key;
    H.count++;
}
//查找指定元素
int SearchHash(HashTable H,int key,int &addr)
{
//    bool flag=0;
//    for(int i=0; i<18; i++)
//    {
//        if(H.elem[i]==key)
//        {
//            flag=1;
//            printf("%d",i);
//            return 0;
//        }
//    }
//    if(!flag)
//        printf("-1");
    addr=Hash(key);
    int p;
    p=addr;
    if(H.elem[addr]!=key&&H.elem[addr]!=NULLKEY)
    {
        int i;
        int location;
    for(i=1; i<9; i++)
    {
        location=(p+i*i)%18;
        if(H.elem[location]==key)
            {
                addr=location;
                //return 1;
            }
        location=p-i*i;
        while(location<0)
            location+=18;
        location=location%18;
        if(H.elem[location]==key)
            {
                addr=location;
                //return 1;
            }
    }
    }
    if(H.elem[addr]==key)
        return 1;
    else
        return 0;
}
void DeleteHash(HashTable &H,int len,int key)
{
    int i;
    for(i=0; i<18; i++)
    {
        if(H.elem[i]==key)
        {
            H.elem[i]=NULLKEY;
            H.count--;
        }
    }
}

int main()
{
    int a[1000];
    HashTable H;
    int i;
    int len;
    scanf("%d",&len);
    InitHashTable(H,len);
    for(i=0; i<len; i++)
        scanf("%d",&a[i]);
    for(i=0; i<len; i++)
    {
        InsertHash(H,a[i]);
    }
    int t;
    scanf("%d",&t);
    int addr;
    int x1,x2;
    scanf("%d%d",&x1,&x2);
    int y;
    scanf("%d",&y);
    if(SearchHash(H,t,addr))
        printf("%d\n",addr);
    else
        printf("-1\n");
    DeleteHash(H,len,x1);
    DeleteHash(H,len,x2);


    InsertHash(H,y);

//    //printf("插入之后的哈希表为:");
    for(i=0; i<18; i++)
    {

        if(H.elem[i]==NULLKEY)
            printf("****");
        else
            printf("%4d",H.elem[i]);

    }
    return 0;

}

牛客网试题+答案分析+大牛面试经验(11) 一、循环队列的存储空间为 Q(1:40) ,初始状态为 front=rear=40 。经过一系列正常的入队与退队操作后, front=rear=15 ,此后又退出一个元素,则循环队列中的元素个数为( )。 A、39,或0且产生下溢错误 B、14 C、40 D、15 答案:A 解析:循环队列是队列的一种顺序存储结构,用队尾指针 rear 指向队列中的队尾元素,用排头指针 front 指向排头元素的前... 阅读详情

相关推荐

区块链与哈希函数

武汉大学《区块链与密码学》课件整理

weixin_62775913的博客 5540

哈希表

哈希表 哈希函数 哈希函数形成的表为哈希表。元素关键字为K,位置为P 基本思想:K和P之间建立对应关系,使得P=f(K);f为哈希函数 哈希冲突:K不同的映射到同一位置 哈希函数构造方法 原则:函数本身便于计算,计算出来的地址分布均匀。减少冲突, 数学分析法 ​ 实现知道关键字集合,且每个关键字的位数比哈希表地址码位数多,可以从关键字中选取特殊的若干位形成哈希地址。 平方取中法 ​ 先平方...

冢狐的私人空间 796

redis中几种哈希函数的研究

redis中几种哈希函数的研究         这段时间一直在研究redis的源码,在研究其字典结构体的实现部分时,遇到了几个陌生的哈希函数。研究了一下才发现这些函数在如今的开源项目中早已得到了广泛的应用,如标准C++库、nginx、Hadoop等等。         于是乎,我对redis中的这几个函数做了点研究,自己琢磨出点东西来,在这里与大家分享一下。我写这篇文章的目的主要是想阐述一下我

jasperlei的进击之旅 1万+

八大数据结构——哈希表(五)

import java.util.Enumeration; import java.util.NoSuchElementException; //哈希表,基于“开放链地址法”的冲突解决方法 public class HashTable<K, V> { // 定义存储容器,表长如果改变,原来的哈希算法也要调整,情况复杂,这里不予考虑,所以表长初始化就不给改变。 private HashNode<K, V>[] array; // 记录已存储元素个数

BaldIsImpossible的博客 919

常用的字符串哈希函数

本文将介绍什么是字符串哈希函数,字符串哈希函数常见用法,以及字符串哈希函数的实现原理和常用算法。

dvlinker的技术专栏 1万+

AC360变频器使用案例

AC360变频器使用案例!

QING_BOSS的博客 517

Hash算法

概述   Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将...

weixin_33979203的博客 306

NVIDIA驱动版本太低?手把手教你解决CUDA与PyTorch版本冲突问题

本文针对深度学习开发中常见的NVIDIA驱动版本过低导致的CUDA与PyTorch版本冲突问题,提供了从根源理解到实战解决的完整指南。文章详细解析了驱动、CUDA与PyTorch的依赖关系,并给出了升级驱动、降级PyTorch、使用Conda环境管理及Docker容器化四种核心解决方案,帮助开发者快速诊断并构建稳定的GPU开发工作流。

grpc6streamer的博客 969

哈希函数及哈希函数的特性

哈希函数 以及哈希函数的三个特性 抗碰撞性 隐藏性 谜题友好性

dadenny的博客 4805

深入博通PEX89000内部:那颗ARM CPU和Synthetic Mode到底能玩出什么花样?

本文深入解析博通PEX89000系列PCIe交换芯片内置的ARM CPU与Synthetic Mode技术,揭示其在AI计算和数据中心的智能潜能。通过ARM Cortex CPU的实时控制和Synthetic Mode的自治网络功能,PEX89000实现了GPU集群的动态拓扑重组和资源池化,大幅提升AI训练效率。文章还探讨了该技术在软件定义数据平面和弹性AI架构中的创新应用。

weixin_30776273的博客 210

Mac上Office合法安装与激活全指南:2021/2024/M365区别解析

Office是微软办公套件的核心产品,其在macOS平台的部署逻辑与Windows截然不同——不依赖传统密钥激活,而是基于Microsoft账户与设备标识的云端绑定机制。理解这一原理,是解决‘无法验证开发者’‘打不开’‘功能受限’等常见问题的前提。Office 2021代表永久许可模型,Office 2024 LTSC面向企业离线场景,Microsoft 365则是持续订阅服务,三者在授权验证方式、更新策略与系统兼容性上存在本质差异。实际应用中,需结合macOS版本、芯片架构(Intel/Apple Sil

weixin_33491377的博客 1240

一文读懂哈希函数

哈希函数 哈希函数(Hash):h=H(Data) ##定义 哈希函数H,将可变大小的数据Data作为输入,产生固定长度的h值。 密码学哈希函数,是一个数学函数。哈希函数本身拥有的特征: 1、输入任意性:函数的输入可以是任意大小的数据; 2、输出固定性:函数的输出是一个固定大小的数据; 3、能够进行有效计算:也就是说在一个合理的时间内,能够对输入数据进行运算得出输出。 对于区块链技术以及加密数字货...

BitTribeLab的博客 9624

3、利用预训练卷积神经网络进行特征提取

本文介绍了如何使用预训练的卷积神经网络(如VGG16)进行图像特征提取,并将提取的特征存储在HDF5数据集中,以便后续用于机器学习模型的训练。文章详细阐述了特征提取的原理、HDF5数据格式的优势、HDF5DatasetWriter类的实现、特征提取流程的代码实现以及实际应用案例。通过该方法,可以在多种图像数据集上高效构建高精度的分类模型。

z2a3b4c5d的博客 114

哈希函数的特征_哈希函数及其特征

哈希函数的特征Prerequisite: Hashing data structure 先决条件: 哈希数据结构 The hash function is the component of hashing that maps the keys to some location in the hash table. As part of the hashing technique, we nee...

5665

YOLOv11与Roboflow数据预处理实战:从原始数据到高性能模型

摘要 Roboflow平台与YOLOv11的结合为计算机视觉开发者提供了高效的工作流。Roboflow提供数据集管理、预处理、增强和导出的一站式解决方案,支持多种标注格式并与YOLOv11无缝集成。YOLOv11在YOLO系列基础上进行了架构创新,包括深度宽度优化、C3k2机制和C2PSA注意力机制,提供从纳米版到超大版的多种模型变体。 使用Roboflow的流程包括:注册工作区、收集/导入数据(支持本地和公开数据集)、专业标注(含SAM辅助)、预处理(尺寸调整、归一化等)和数据增强(几何变换和颜色调整)。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 350

基于 高斯过程回归(Gaussian Process Regression, GPR) 的 时间序列区间预测 的 MATLAB 示例代码

基于 高斯过程回归(Gaussian Process Regression, GPR) 的 时间序列区间预测 的 MATLAB 示例代码

算法如诗的博客 153

哈希函数学习笔记

哈希函数(Hash Function)是一公开函数,用于将任意长的消息M映射为较短的、固定长 度的一个值H(M),又称为散列函数、杂凑函数.我们称函数值H(M)为哈希值、杂凑值、杂凑码、 或消息摘要。杂凑值是消息中所有比特的函数,因此提供错误检测能力。消息中任何一个比特或者几个比特的改变都会造成杂凑值的改变。总结:密码学上安全的哈希函数H应该包含的性质:①对于任意的消息x,计算H(x)是容易的。②H是单向的③H是强抗碰撞的对于给定的哈希值h,试图找到满足H(x)=h的x。对于m位的哈希值,穷举的规模大约是2

qq_54223524的博客 9966

STM32 stack_size和heap_size大小设置的意义

在使用STM32编程时,一般情况下我们不会关注堆栈空间的大小,因为在STM32的启动文件中,已经帮我们预先设置好了堆栈空间的大小。如下图所示的启动代码中,Stack栈的大小为:0x400(1024Byte),Heap堆的大小为:0x200(512Byte)。 1、若工程中使用的局部变量较多,定义的数据长度较大时,若不调整栈的空间大小,则会导致程序出现栈溢出,程序运行结果与预期的不符或程序跑飞。这时我们就需要手动的调整栈的大小。 2、当工程中使用了malloc动态分配内存空间时,这时分配.......

zxm8513优快云博客 3万+

哈希函数(Hash Function)

哈希函数(散列函数)说明应用解释Q:冲突是不是可以避免的?hash函数的构造准则:简单、均匀hash函数的构造方法:处理冲突的方法:参考 说明 散列的概念属于查找,它不以关键字的比较为基本操作,采用直接寻址技术。在理想情况下,查找的期望时间为O(1)。 简单的说,hash函数就是把任意长的输入字符串变化成固定长的输出字符串的一种函数。输出字符串的长度称为hash函数的位数。(下图来源于维基百科) ...

一个机器学习的学习之旅 2万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

密码学(哈希函数)

预处理:填充(若需)并分割输入为固定长度块。处理:逐块压缩,将前一状态与当前块组合。输出转换:直接取最终压缩结果(或进一步处理)。通过迭代设计,即使输入极长,也能高效生成固定长度输出,并累积处理全输入。迭代哈希函数的示例1990年,MD4,由 Rivest 提出。1992年,MD5,对 MD4 的修改,由 Rivest 提出。1993年,SHA(-0),由 NIST 提出作为标准,被采用为 FIPS 180。1995年,SHA-1,对 SHA 的小幅修改,被发布为 FIPS 180-1。

tianyunlinger的博客 2335

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

什么是哈希函数

哈希函数是一种将任意长度的数据(如字符串、文件、图片等)映射为固定长度的输出值的函数,这个输出值称为“哈希值”(hash value)或“摘要”(digest)。h(x)=y其中 x 是输入,h 是哈希函数,y 是输出(固定长度)项目内容定义将任意长度数据映射为固定长度输出的函数特点确定性、固定长度、抗碰撞、不可逆用途密码保护、数据完整性、哈希表、签名、区块链、Git代表算法SHA-256、SHA-3、MD5(不推荐)、SHA-1(不推荐)

王景程的博客 2251

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

哈希函数的性能优化:如何设计一个高质量的哈希函数?

设计一个高效的哈希函数不仅有助于提高数据检索的速度,还有助于保证系统的安全和完整性。在实际应用中,选择合适的哈希算法和参数至关重要,通常需要根据具体的应用场景和需求进行调整。

你若盛开,清风自来 2300

哈希函数——MD5

哈希函数简介 信息安全的核心技术是应用密码技术。密码技术的应用远不止局限于提供机密性服务,密码技术也提供数据完整性服务。密码学上的散列函数(Hash Functions)就是能提供数据完整性保障的一个重要工具。Hash函数常用来构造数据的短“指纹”,消息的发送者使用所有的消息产生一个短“指纹”,并将该短“指纹”与消息一起传输给接收者。即使数据存储在不安全的地方,接收者重新计算数据的指纹,并验证指纹...

圣三一 7593

什么是哈希函数?如何设计一个好的哈希函数?

哈希函数(Hash Function),也称为散列函数,是一种将任意长度的数据映射为固定长度的哈希值的函数。它能够将输入数据转换为一串数字或字母组成的固定长度字符串,这个字符串通常作为数据的指纹或摘要。哈希函数在数据结构(如哈希表)和密码学中有广泛应用,其设计的质量直接影响到哈希表的数据分布和性能。:相同的输入必须产生相同的输出。这意味着如果输入数据不变,哈希函数的输出也必须一致。:计算哈希值的速度应较快,以确保在实际应用中能够迅速完成大量的哈希运算。

破损的天堂鸟博客 2359

C++ 中 自定义哈希函数

哈希表是一种关键的数据结构,广泛用于在计算机科学中管理和访问数据。通过使用哈希函数将数据键转换为数组索引,哈希表允许快速数据访问,通常提供平均常数时间复杂度的插入、查找和删除操作。在C++中,标准库中的`std::unordered_map`和`std::unordered_set`是基于哈希表实现的容器,它们使用哈希函数来优化数据的存储和访问速度。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 1626
上一篇: 快速排序
下一篇: 最短工期
Asssshzy
博客等级 码龄7年 28粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值