算法补习-第五天-查找(中)

来源:互联网 发布:网易股票分时数据 编辑:程序博客网 时间:2024/05/01 10:54

哈希查找索引查找

哈希查找:

用哈希技术的情况:从一个含m个元素的大集合中,取出n个元素组成小集合S

哈希技术的关键:哈希函数的构造;解决冲突的方法。

哈希函数的构造方法:

直接定址法,数字分析法,平分取中法,除留余数法

解决冲突的方法:

开放定址法,再哈希法,链地址法。


方法讲解:

除留余数法:

H(key) = key mod p (p为不大于表长度(m)的质数)

开放定址法:

key1!=key2   但H(key1) = H(key2) 产生冲突

        则同义词需按一定原则找新地址

Hi =  ((H(key) + di) mod m

函数解释:

void InsertHash():

int SearchHash():

代码:

#include<iostream>using namespace std;int result,a[]={13,29,27,28,26,30,38};int hashLength = 13;int hash[13];void InsertHash(int hash[],int hashLength,int data){int hashAddress = data % 13;while(hash[hashAddress] != 0){hashAddress = (++hashAddress) % hashLength;}hash[hashAddress] = data;}int SearchHash(int hash[],int hashLength,int key){int hashAddress = key % hashLength;while(hash[hashAddress] != 0 && hash[hashAddress] != key){hashAddress = (++hashAddress) % hashLength;}if(hash[hashAddress] == 0) return -1;return hashAddress;}int main(){for(int i=0;i<7;i++){InsertHash(hash,hashLength,a[i]);}for(int i=1;i<13;i++){cout<<hash[i]<<",";}cout<<endl;cout<<"请输入要查找的数"<<endl;cin>>result;int index = SearchHash(hash,hashLength,result);if(index != -1)cout<<"它的位置在"<<index<<endl;elsecout<<"我擦嘞找不到这货";return 0;}


0 0
原创粉丝点击