当前位置:   article > 正文

【面经笔记】哈希表_哈希表有14个桶新元素31的位置

哈希表有14个桶新元素31的位置

http://blog.csdn.net/xxpresent/article/details/55806298

哈希表几种方法:

  • 直接定址法:取关键字key的某个线性函数为散列地址 Hash(key) = A*key+B
  • 除留取余法 :关键值除以比散列表长度小的素数所得的余数作为散列地址 Hash(key) = key % p;
  • 字符串:BKDR哈希算法(字符串哈希算法)

 size_t BKDRHash(const char* str)  //字符串哈希算法
    {  
        register size_t hash = 0;  
        while(*str)  
        {  
            hash = hash*131 + *str;  
            ++str;  
        }  
        return hash;  
    }  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

处理哈希冲突的闭散列方法:
闭散列:

  • 线性探测

检测当前地址的下一个地址是否可以插入,如果可以的话,就存在当前位置的下一个地址,否则,继续向下一个地址寻找,地址++

  • 二次探测:

通过二次探测的方法,取当前地址加上i^2,可以取到的新的地址就会稍微分散开。


    pair<Node*, bool> Insert(const K& key, const V& value)
    {
        _CheckCapacity();
        size_t index = HashFunc(key);
        //线性探测  
        /*while(_tables[index]._status ==  EXIST )
        {
        if(_tables[index]._key == key)
        return make_pair((Node*)NULL,false);
        ++index;

        if(index == _tables.size())
        {
        index = 0;
        }
        }
        */
        //二次探测  
        size_t i = 0;
        size_t first = index;
        while (_tables[index]._status == EXIST)
        {
            if (_tables[
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/959945
推荐阅读
相关标签
  

闽ICP备14008679号