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

长沙网站建设服务商优化网站推广网站

长沙网站建设服务商,优化网站推广网站,哪些网站做任务赚钱,营销网站建设专业团队在线服务Hash函数是一种映射关系,通过一种映射关系,将原本的字符串,数字或其他关键信息转换为一个索引值。用数学关系式表示为:index function(key) 数序上有不同的映射关系,不同的key,有可能会获取相同的index&…
Hash函数是一种映射关系,通过一种映射关系,将原本的字符串,数字或其他关键信息转换为一个索引值。
用数学关系式表示为:
   index  =  function(key)

数序上有不同的映射关系,不同的key,有可能会获取相同的index,这个时候的index就是有重码,也就是collosion,这就导致了Hash函数的不唯一性,从而在查找index下的关键字时也是有冲突的。

目前一些常用的数学映射关系为:
   1、直接定址法,就是直接使用key作为index
   2、数字分析法,取key中的若干位数作为index,有较多冲突
   3、平法取中法,取key的平方,然后取中间几位作为index(index与key值密切相关),
   4、折叠法,将key从中间分割成几个部分,然后按照一定规则相加获取的结果为index。
   5、除留余数法,将key对某个数值m求余,获取的余数即为index,显然indxe<m,也就是如果key>m,必然会有n-m个冲突存在(n为key关键字的个数)。
   6、随机数法,将key值通过随机数求取index,即function(key)=random(key),伪随机数的均匀性较好,当关键字长度不相等时,用此法构造较为恰当。

解决冲突:
    其实并不是将冲突去掉,而是通过一种变通的方法,将冲突变得可以唯一查找,而不是有冲突就没有唯一的index位置了。
   解决方法有:
    一、开放定址法:
             index = (function(key)+di)mod m
               di:增长序列,m哈希表长,d的求取方法有下面集中。
      1、线性探测再散列,就是查找或插入时,如果发生冲突,就线性排列下去,下面还有冲突,继续排列下去,直到没有冲突时,查找结束或添加index。d=1,2,3,……,m-1
     2、二次探测再散列,d=1^2,-1^2,2^2,-2^2,……,±k^2(k<=m/2)
     3、伪随机探测再散列,d=random(key)
  二、再Hash法
        即将index冲突的key关键字进行另一种Hash算法,得到key关键的index2索引值,从而来降低和避免冲突,当然要将冲突完全避免,则需要多个Hash算法隐含在其中。
 三、链地址法
        当Index发生冲突时,将同一个index下冲突的key值都放在以index开头的链表中,这样index开头的链表中的key都可以比较方便的查找出来。
四、建立溢出表
         建立一个和key关键字一样多的index索引,当index发生冲突时,将所有发生冲突的key或index都放在溢出表中。

Hash表查找:
  
// -------开放定址Hash表的存储结构------------
int hashsize[]=...{997,...};  //Hash表容量递增表,一个合适的素数序列
typedef struct...{
   ElemType 
*elem;           //数据元素存储基址,动态分配数组
   int              count;          // 当前数据元素的个数
   int              sizeIndex;   //hashsize[sizeIndex]为当前容量
}
HashTable;

//--------链接地址Hash表的存储结构---------------
typedef struct childchain
{
   ElemType data;   // 数据值
   struct childchain *next;  // 下一个childchain值,NULL结束
}ChildChainHash

  typedef struct mainchain{
    int index;   // 主链的索引值
    ChildChainHash  *child;  // 指向冲突的child子链,当没有冲突时,给予NULL值。
   struct mainchain *main;  //
}
MainChainHash;

#define SUCCESS 1
#define UNSUCCESS 0
#define DUPLICATE -1
采用链接构建Hash的思路,MainChainHash申请一个head指针和若干个变量,然后main指针依次指向下一个MainChainHash指针,而每一个child指针,指向ChildChainHash链中的值,这样一个Hash表就 构造完成了。当主键key使用Hash一下获取的Index时,通过Index索引值知道Child链,从而构造了一个核实的Hash表。

// 采用开放式哈希表的存储结构

Status SearchHash(HashTable H, KeyType k, 
int &p, int &c)
...{
     
// 开放地址哈希表H中查找关键字k的元素,若查找成功,以p指示待查数据,
   
// 元素在表中位置,并返回SUCESS,否则,以p指示插入位置,并返回UNSUCESS,
   
// c用以计冲突次数,其初值置零,供建表插入时参考
  p  = Hash(k);   // 求得hash地址表
  while( H.elem[p].key != NULLKEY &&   //该位置中填有记录
           !EQ( k,H.elem[p].key)                 // 并且关键字不相等
          collision( p, ++c) ;                  // 求得下一探索地址p
   if (EQ(K, H.elem[p].key ) )
          
return SUCCESS;                 // 查找成功,p返回待查数据元素位置
   else
         
return UNSUCESS;              // 查找不成功.( H.elem[p].key == NULLKEY )
                                                      
// p返回的是插入的位置
}
// SearchHash

Status InsertHash( HashTable 
&H, ElemType e)
...{
     
// 查找不成功时,插入数据元素e到开放定址Hash表H中,并返回OK,
    
// 若冲突次数过大,需重新构建Hash表
   c = 0;
   
if( SearchHash( H,e.key,p,c ))
        
return DUPLICATE;           // 表中已有与e有相同关键字的元素
  else if ( c <hashsize[H.sizeindex]/2 )  //冲突次数c未达到上限时,(c的阈值可调)
  ...{
         H.elem[p] 
= e; ++H.count; return OK;    // 插入e
   }

   
else 
  
...{
     RecreateHashTable(H);
    
return UNSUCESS;    // 重建hash表
  }

}
  // InsertHash
摘抄自严蔚敏的C数据结构中Hash章节。

Hash表最大的特点:
    不管n有多大,即表有多长,我们总可以选择一个合适的装填因子以便将来平均查找长度限定在一个范围之内。

查找长度
链地址:
          S=1+α /2
线性探测:
          S = 1/2 (1+1/(1-α ) )
伪随机探测:
          S = -1/
α ln(1-α )





 

转载于:https://www.cnblogs.com/ubunoon/archive/2007/03/16/2058946.html

http://www.lbrq.cn/news/2515357.html

相关文章:

  • dw手机销售网站制作千峰培训
  • 网站建设价格如何常用的五种网络营销工具
  • 界面设计好看的网站网站优化费用报价明细
  • 哈尔滨网站优化如何ks免费刷粉网站推广马上刷
  • 怎么做一个企业网站精准引流推广
  • 和创互联的网站是多少哪个公司做网站推广最好
  • 武汉建设银行社会招聘网站互联网推广销售是做什么的
  • 成都专业制作网站公司seo的工具有哪些
  • 织梦网站入侵苏州关键词优化搜索排名
  • 做网站提供服务器吗新闻发稿软文推广
  • 怎样创办一个网站搜索引擎营销的四种方式
  • 网站建设项目经验怎么写网络营销案例分析报告
  • 格尔木城乡建设规划局网站西安网站设计开发
  • 台江网站建设推广网站有哪些
  • 免费单页网站建设营销策划咨询机构
  • 济南网站搭建公司手机网站百度关键词排名查询
  • 政府网站建设发展站长工具综合查询ip
  • 南京电商网站建设简述网络推广的方法
  • 怎么做自己网站北京优化靠谱的公司
  • 2023b站免费推广入口游戏百度网站大全
  • 百度网站建设微信封面域名注册 万网
  • 黄岛区做网站的网页设计与网站开发
  • flash素材网站电商代运营收费标准
  • 做网站的问卷调查免费拓客软件
  • 南通网站建设找哪家好建立网站用什么软件
  • 做网站需要神网站怎样优化文章关键词
  • 购物网站的搜索功能是怎么做的网站建设需要啥
  • 温州网上推广什么网站好传统营销
  • 大学网站建设管理制度注册域名查询网站官网
  • 哪些公司做外贸网站江阴企业网站制作
  • Linux - 权限的理解(深入浅出,详细细微)
  • Python高效历史记录管理:保存最后N个元素的完整指南
  • 电脑没有声音了怎么恢复 快速解决音频故障
  • S7-200 SMART 通过本体 RS485 口与 DP01 上传 / 下载程序(网口故障)
  • JavaScript:10个数组方法/属性
  • RCLAMP2574N.TCT Semtech:超低钳位TVS二极管 0.5pF超低电容+±30kV超强防护