zoukankan      html  css  js  c++  java
  • 哈希查找

    哈希查找的思想是按照某种弄规则散列(分组)

    创建哈希表,可以多次利用

    哈希查找适用于多次查找,查找速度是最快的

    散列我们一般用求整取余法

    数组长度是几我们就对几取余,存到哈希表的对应数组下标里

    但是可能会遇到哈希冲突,也就是数组里某一处已经有元素了,还要往里存

    解决哈希冲突我们一般用两种方法

    1.开放地址法

      1.1线性探测  有冲突就放入下一个

      1.2线性补偿探测  有冲突就向后走步长个

      1.3线性有偿再散列  有冲突就往±1,±4,±9,±16放

      1.4随机补偿  生成随机数,如果有的话再生成

    2.拉链法

      代码如下

      

    typedef struct NODE
    {
        int nValue;
        int xb;
        struct NODE* pNext;
    }Node;
    
    
    Node** CreateHX(int* arr,int length)
    {
        //创建一个指针数组 
        Node** ptemp = (Node**)malloc(sizeof(Node*) * length);
        memset(ptemp,0,sizeof(Node*)*length);
        
        int j;
        for(int i=0;i<length;i++)
        {
            //求整取余 
            j = arr[i]%length;
            Node* p = (Node*)malloc(sizeof(Node));
            p->nValue = arr[i];
            p->xb = i;
            p->pNext = NULL;
            //链表的头添加 
            if(ptemp[j] == NULL)
            {
                ptemp[j] = p;                
            }
            else
            {
                p->pNext = ptemp[j];
                ptemp[j] = p;
            }
        }
        return ptemp;
    }
    
    int Search(Node** node,int* arr,int length,int num)
    {
        //得到余数,哈希表的下标 
        int j = num%length;
        Node* ptemp = NULL;
        if(node[j])
        {
            //得到链表头 
            ptemp = node[j];
            while(ptemp != NULL)
            {
                if(ptemp->nValue == num)
                    return ptemp->xb;
                ptemp = ptemp->pNext;    
            }
        }
        return -1;
    }
    
    void DeleteHX(Node** pNode,int length)
    {
        Node* p = NULL;
        for(int i=0;i<length;i++)
        {
            while(pNode[i])
            {
                p = pNode[i];
                pNode[i] = pNode[i]->pNext;
                free(p);
                p = NULL;
            }
        }
    
        free(pNode);
    }

      

  • 相关阅读:
    NHibernate介绍
    dwr配置文件dwr.xml详解
    架构设计师与SOA
    SOA是什么
    JDK常用命令
    在WPF的WebBrowser控件中抑制脚本错误
    通过编程计算一个游戏的胜率
    在C#中模拟大数乘法
    解决HttpWebRequest首次连接特别慢的问题
    布隆过滤器(Bloom Filter)
  • 原文地址:https://www.cnblogs.com/TheQi/p/9123152.html
Copyright © 2011-2022 走看看