首页 > 编程语言 >哈希表、算法

哈希表、算法

时间:2024-09-09 19:22:07浏览次数:3  
标签:int 复杂度 算法 hashtable 哈希 data

哈希表

hash:

在编程和数据结构中,"hash" 通常指的是哈希函数,它是一种算法,用于将数据(通常是字符

串)映射到一个固定大小的数字(哈希值)。哈希函数在哈希表中尤为重要,哈希表是一种通过哈

希函数将键映射到表中位置的数据结构,以实现快速的数据插入和检索。

哈希表(Hash Table):

也称为散列表,是一种通过哈希函数将键(Key)映射到表中一个位置以

便快速访问记录的数据结构。哈希表可以快速地插入和查找数据。

哈希算法:

将要存储的关键字与要存储的位置建立一种联系,这种联系就叫哈希函数/散列函数

哈希表的相关函数:

插入数据

int insert_hashtable(HSDataType data)
{
    int addr = hash_function(data.name[0]);
    
    HSNode_t *hanode = malloc(sizeof(HSNode_t));
    if(NULL == hanode)
    {
        perror("fail malloc");
        return -1;
    }

    hanode->data = data;
    hanode->pnext = NULL;

    hanode->pnext = hashtable[addr];
    hashtable[addr] = hanode;
}

遍历哈希表

void hashtable_for_each()
{
    for(int i = 0;i < HASH_SIZE;++i)
    {
        HSNode_t *p = hashtable[i];
        while(p != NULL)
        {
            printf("**%10s  **%3s\n",p->data.name,p->data.tel);
            p = p->pnext;
        }
    }
    printf("\n");
}

查找数据

int find_key_hashtable(HSDataType data)
{
    int addr = hash_function(data.name[0]);
    HSNode_t *p = hashtable[addr];
    while(p != NULL)
    {
        if(!strcmp(p->data.name,data.name))
        {
            printf("%s  %s\n",p->data.name,p->data.tel);
            return 0;
        }
        p = p->pnext;
    }
    return -1;
}

销毁哈希表

int destory_hashtable()
{
    for(int i = 0;i < HASH_SIZE;++i)
    {
        HSNode_t *p = NULL;
        while(hashtable[i] != NULL)
        {
            p = hashtable[i];
            hashtable[i] = p->pnext;
            free(p);
        }
    }
}

算法

算法即解决特定问题求解步骤

算法的设计

1.正确性

语法正确

合法的输入得到合理的结果

对非法的输入,给出满足要求的规格说明

对精心选择,甚至刁难的测试都能正常运行,结果正确

2.可读性

便于交流,阅读,理解 高内聚,低耦合

3.健壮性

输入非法内容,能进行相应的处理,而不是产生异常

4.高效率(时间复杂度)

算法时间复杂度:

执行这个算法所花时间的度量

将数据量增长和时间增长用函数表示出来,这个函数就叫做时间复杂度。

一般用大0表示法:0(n)------>时间复杂度是关于数据n的一个函数

随着n的增加,时间复杂度增长较慢的算法时间复杂度低

时间复杂度的计算规则

1,用常数1 取代运行时间中的所有加法常数

2,在修改后的运行函数中,只保留最高阶项

3,如果最高阶存在且系数不是1,则去除这个项相乘的常数

5.低存储(空间复杂度)

空间复杂度越低:低存储 越高:高存储

时间复杂度越低:高效率 越高:低效率

标签:int,复杂度,算法,hashtable,哈希,data
From: https://blog.csdn.net/2301_80338792/article/details/142066609

相关文章

  • 【机器学习】嘿马机器学习(算法篇)第10篇:逻辑回归,学习目标【附代码文档】
    本教程的知识点为:机器学习算法定位、K-近邻算法1.4k值的选择1K值选择说明1.6案例:鸢尾花种类预测--数据集介绍1案例:鸢尾花种类预测1.8案例:鸢尾花种类预测—流程实现1再识K-近邻算法API1.11案例2:预测facebook签到位置1项目描述线性回归2.3数学:求导1......
  • Binary Search 二分查找算法:逻辑的舞蹈,二分法的精准步伐
    BinarySearch二分查找算法:逻辑的舞蹈,二分法的精准步伐二分查找算法,也称为二分搜索算法(BinarySearch),是一种在有序数组中查找特定元素的高效算法。它通过反复将搜索区间减半来快速定位目标值。二分查找算法的效率远高于线性搜索,因为它每次比较都能排除掉一半的搜索空间。......
  • Boyer-Moore 投票算法:高效发现多数元素的艺术
    Boyer-Moore投票算法:高效发现多数元素的艺术Boyer-Moore投票算法,一种在数据科学领域中备受推崇的算法,以其寻找数组中“多数元素”的高效能力而闻名。所谓“多数元素”,是指在给定数组中出现次数超过一半的元素。这种算法由RobertS.Boyer和JStrotherMoore两位杰出......
  • React diff算法原理
    React使用一种称为“Reconciliation”的过程来确定虚拟DOM树中的哪些部分发生了变化,从而最小化实际DOM更新的工作量。这个过程的核心是实现了一个高效的diff算法,通常被称为“Fiber”机制的一部分。虽然它并不完全等同于经典的diff算法(如Myers’diffalgorithm......
  • 算法与数据结构——图简介
    图图(graph)是一种非线性数据结构,由顶点(vertex)和边(edge)组成。我们可以将图G抽象地表示为一组顶点V和一组边E的集合。以下示例展示了一个包含5个顶点和7条边的图。如果将顶点看做节点,将边看做连接各个节点的引用(指针),我们就可以将图看作一种从链表拓展而来的数据结构。如下图,相较于......
  • tarjan—算法的神(一)cw
    本篇包含tarjan求强连通分量、边双连通分量、割点部分,tarjan求点双连通分量、桥(割边)在下一篇。伟大的RobertTarjan创造了众多被人们所熟知的算法及数据结构,最著名的如:(本文的)连通性相关的tarjan算法,Splay-Tree,Toptree,tarjan求lca等等。注:有向图的强连通分量、无向......
  • 负载均衡算法
    本文主要介绍常用的负载均衡算法和Nginx中支持的负载均衡算法。@pdai常见的负载均衡算法轮询法(RoundRobin)加权轮询法(WeightRoundRobin)随机法(Random)加权随机法(WeightRandom)源地址哈希法(Hash)最小连接数法(LeastConnections)Nginx的5种负载均衡算法......
  • 【Redis】redis5种数据类型(哈希)
    目录基本介绍命令HSETHGETHEXISTSHKEYSHVALSHGETALLHMGETHLENHSETNXHINCRBYHINCRBYFLOATHSTRLEN内部编码原生字符串类型、哈希类型、序列化字符串json作缓存的区别基本介绍哈希类型中的映射关系是field-value,用于区分redis整体的键值对(key-value)命令H......
  • 数据结构与算法(三)线性表的定义与抽象数据类型
    目录一、感受线性表的存在二、线性表的定义三、考题模拟1、请问公司的组织架构是否属于线性关系?2、那么班级同学的友谊呢?3、那么班级的点名册是不是线性表?四、抽象数据类型1、数据类型的定义:2、抽象数据类型一、感受线性表的存在    从这一篇开始,我们将介......
  • 2025秋招NLP算法面试真题(十九)-大模型分布式训练题目
    分布式训练题目1.理论篇1.1训练大语言模型存在问题?计算资源需求**:**训练大型语言模型需要大量的计算资源,包括高端GPU、大量的内存和高速存储器。这可能限制了许多研究人员和组织的训练能力,因为这些资源通常很昂贵。数据需求**:**训练大型语言模型需要大规模的数......