查找
来源:互联网 发布:jpg看图软件 编辑:程序博客网 时间:2024/04/30 18:01
二分查找:
数组必须是有序的数组。
int low,hiagh;
int k;
while(low<=high)
{
int mid=(low+high)/2;
if(k==a[mid])return true;
else if(k<a[mid]){high=mid-1;}
else low=mid+1;
}
寻找数组中第i小的元素
利用快速排序的思想。
int select(int low,int high,int i) //i代表第i小的元素
{
if(low==high)return a[low];
q=partition(low,high);
k=q-low+1;
if(i==k)return a[q];
else if(i<k)
return select(low,q-1,i);
else return select(q+1,high,i-k);
}
hash表
1.利用链表解决冲突
2.利用线性探查,二次探查,双重散列来解决冲突。
双重散列是用于开放寻址法的最好方法之一。它采用如下形式的散列函数
h(k,i)=(h1(k)+i*h2(k))mod m;
其中h1,h2为辅助散列函数,初始探查位置为T[h1(k)],后续的探查位置在此基础上加上偏移量h2(k)模m.为能查找整个散列表,值h2(k)要与表的大小m互质。一种方法为,取m为质数,并设计一个总是产生较m小的整数的h2.例如我们可以取m为质数,并取
h1(k)=k mod m, h2(k)=1+(k mod m1);
m1略小于m(如m-1);例如m=13,可取m1=11,这样h1(k)=k mod 13; h2(k)=1+(k mod 11);
int hash-insert(int k)
{
for(i=0;i<m;i++)
{
j=h(k,i);
if(T[j]==null){T[j]=k;return j;}
}
return -1;
}
int hash-search(int k)
{
for(i=0;i<m;i++)
{
j=h(k,i);
if(T[j]==null)return -1;
else if(T[j]==k)return j;
}
return -1;
}
串树是一个字典树,它的每一个元素都包含一个数组bool a[27],前26位为各个英文字母,最后一位代表到该元素的父节点字符串是否结束。
struct Node
{
bool a[27];
};
数组必须是有序的数组。
int low,hiagh;
int k;
while(low<=high)
{
int mid=(low+high)/2;
if(k==a[mid])return true;
else if(k<a[mid]){high=mid-1;}
else low=mid+1;
}
寻找数组中第i小的元素
利用快速排序的思想。
int select(int low,int high,int i) //i代表第i小的元素
{
if(low==high)return a[low];
q=partition(low,high);
k=q-low+1;
if(i==k)return a[q];
else if(i<k)
return select(low,q-1,i);
else return select(q+1,high,i-k);
}
hash表
1.利用链表解决冲突
2.利用线性探查,二次探查,双重散列来解决冲突。
双重散列是用于开放寻址法的最好方法之一。它采用如下形式的散列函数
h(k,i)=(h1(k)+i*h2(k))mod m;
其中h1,h2为辅助散列函数,初始探查位置为T[h1(k)],后续的探查位置在此基础上加上偏移量h2(k)模m.为能查找整个散列表,值h2(k)要与表的大小m互质。一种方法为,取m为质数,并设计一个总是产生较m小的整数的h2.例如我们可以取m为质数,并取
h1(k)=k mod m, h2(k)=1+(k mod m1);
m1略小于m(如m-1);例如m=13,可取m1=11,这样h1(k)=k mod 13; h2(k)=1+(k mod 11);
int hash-insert(int k)
{
for(i=0;i<m;i++)
{
j=h(k,i);
if(T[j]==null){T[j]=k;return j;}
}
return -1;
}
int hash-search(int k)
{
for(i=0;i<m;i++)
{
j=h(k,i);
if(T[j]==null)return -1;
else if(T[j]==k)return j;
}
return -1;
}
串树是一个字典树,它的每一个元素都包含一个数组bool a[27],前26位为各个英文字母,最后一位代表到该元素的父节点字符串是否结束。
struct Node
{
bool a[27];
};
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 万字的最笨画法
- 10个你闻所未闻的奇趣网站
- Linux 中JDK的安装
- MySQL master-slave高可靠方案
- gentoo2008.0minicd加stage3的安装和升级(1)
- 查找
- 让控件不可编辑,只能参照
- Spring Framework
- Servlet过滤器
- boost的安装问题
- 如何在容器中画手机皮肤作背景
- Things work out 守得云开见月明
- Servlet过滤器介绍之原理分析
- What Great .NET Developers Ought To Know NET 牛人应该知道些什么