算法导论第十一章11.4例题——开放寻址法代码实现
来源:互联网 发布:移动网络共享 编辑:程序博客网 时间:2024/05/16 05:01
本代码根据开放寻址法的三种方法——线性探查、二次探查、双重探查法实现散列表的插入,删除,寻找。
开放寻址法一个槽只插入一个元素,完全避免冲突,但是查找时间可能会增大。
以上三种方法要做到降低集群现象的发生(即大量的元素密集的排列在散列表中的某一段区域,这样会增加插入查找的时间复杂度)。
具体代码如下:
//开放寻址法//散列函数包括线性探测、二次探测、双重探测#include<iostream>using namespace std;//除法散列法int h1(int k,int m){return k%m; }//乘法散列法int h2(int k,int m,float A){float fnum=(float)k;float re=((fnum*A)-(int)(fnum*A))*m;return (int)re;}//全域散列法,p为质数int h3(int k,int p,int m){int a,b;a=11;b=13;return ((a*k+b)%p)%m;}//线性探查int LinerProbing(int k,int m,int i){return (h1(k,m)+i)%m;}//二次探查int QuadraticProbing(int k,int m,int i){int c1=17,c2=67;return (h1(k,m)+c1*i+c2*i*i)%m;}//双重探查int DoublefunProbing(int k,int m,int i){return (h3(k,17,m)+i*h1(k,m))%m;}//插入值为k的元素到具有m个槽的T中int Insert(int *T,int k,int m){int i=1,j;while(1){//利用双重探查得出插入位置j=DoublefunProbing(k,m,i);if(i==m+1){break;}//T[j]==-1表示该槽为空if(T[j]==-1){T[j]=k;return j;}i++;}return -1;}//删除值为k的元素在具有m个槽的T中bool Delete(int *T,int k,int m){int i=1,j;while(1){j=DoublefunProbing(k,m,i);if(i==m+1){return 0;}if(T[j]==-1){return 0;}if(T[j]==k){T[j]=-1;return 1;}i++;}}//搜索值为k的元素在具有m个槽的T中int Search(int *T,int k,int m){int i=1,j;while(1){j=DoublefunProbing(k,m,i);if(i==m+1){return -1;}if(T[j]==-1){return -1;}if(T[j]==k){return j;}i++;}}int main(){int a[10]={4,8,2,6,41,21,53,496,3216,48};int T[101]={0};int i;for(i=0;i<101;i++){T[i]=-1;}for(i=0;i<10;i++){Insert(T,a[i],100);}for(i=1;i<=100;i++){if(T[i]!=-1){cout<<T[i]<<" ";}}cout<<endl;cout<<Search(T,2,100)<<endl;Delete(T,2,100);cout<<Search(T,2,100)<<endl;}
- 算法导论第十一章11.4例题——开放寻址法代码实现
- 《算法导论》笔记 第11章 11.4 开放寻址法
- 算法导论 开放寻址法
- 算法导论:开放寻址
- 算法导论11.4开放寻址法 练习总结
- 算法导论例题及课后习题代码实现——第六章
- 算法导论程序26--开放寻址法(Python)
- 《算法导论》第11章 散列表 (3)开放寻址
- 算法-----开放寻址法
- 算法导论第七章例题——快速排序
- 算法导论例题——钢管切割
- 开放寻址法PYTHON实现
- 算法导论 第十一章总结
- 算法导论 第十一章:哈希表
- 算法导论第十章例题-栈的实现
- CLRS 11.4开放寻址法
- 算法竞赛入门经典第十一章例题与代码(排序从前到后)
- chap11 哈希表实现-开放寻址法
- wordpress的编辑后台显示历史版本
- 算法时间复杂度
- spring 的JDBCtemplate试用
- 头文件中的ifndef/define/endif是干什么的?
- 命令模式
- 算法导论第十一章11.4例题——开放寻址法代码实现
- 常用的正则表达式
- structure
- 右下角弹出窗口(C#)
- 乔布斯传读书笔记
- const与#define相比有什么不同
- 如何在MyEclipse中修改Servlet模版
- 皮克定理 poj2954
- Java字符串转换为日期和时间比较大小