数据结构之查找

北航软件工程专业考研991数据结构总结:

七、文件及查找
1.顺序查找法以及平均查找长度(ASL)的计算;
2.折半查找法以及平均查找长度(ASL)的计算,包括查找过程对应的“判定树”的构造;
3.散列(Hash)表的构造、散列函数的构造,散列冲突的基本概念、处理散列冲突的基本方法以及散列表的查找和平均查找长度的计算。

1、顺序查找法以及平均查找长度ASL

  挨个比较查询
  
  for(int i = 0; i < n; i++)
  {
    if(K[i] == data)
        return i;
  }
  return -1;
  
  平均查找长度为 1/n * n(n+1) / 2 = (n+1)/2
  
  算法时间复杂度 O(n)
  
2、折半查找法以及平均查找长度ASL

  排序顺序存储文件
  
  平均查找长度:log2 (n+1)  -1 
  
  算法时间复杂度:O(log2n)
  
  将要查找的关键字值与序列的居中位置的元素值进行比较,若相等,则查找成功;
  若小于居中元素,则从前半部分继续查找
  若大于居中元素,则从后半部分继续查找
  若查找失败,返回-1  失败的条件是 low > heigh
  
  n 元素个数
  low 初始1
  heigh 初始n
  mid = (low + heigh)/2 取整
  
  int BinSearch(int A[], int n, int data)
  {
    int low = 1, heigh = n;
    int mid;
    
    while(low <= heigh)
    {
        mid = (low + heigh) / 2;
        if(A[mid] == data)
            return mid;
        else if(data < A[mid])
            heigh = mid - 1;
        else
            low = mid + 1;
    }
    return -1;
  }
  
3、哈希,散列,杂凑文件

  A = H(k)
  
  k为关键字,A为存储地址,H为哈希(散列)函数
  
  对关键字通过构造散列函数映射到地址中
  
  会造成冲突,但是不会随着问题的规模n呈现复杂度的上升,难点在于哈希函数的确定和冲突解决的方案
  
  
  散列函数构造的原则
    1)、散列函数的定义域需要包含全部的关键字k  值域为关键字的个数
    2)、利用散列函数计算出来的地址应该尽可能均匀地分布在地址空间
    3)、散列函数应该尽可能简单,能够尽快得出结果
    值域,均匀,简单
    
  散列函数的构造步骤
    1)、确定关键字
    2)、构造散列函数
    3)、确定冲突处理方法
    空间,函数,冲突
    
  常见的散列函数
    1)、直接地址
    2)、除留余数
    3)、 
    
 
  常见的冲突处理方法:
  为冲突的元素再找一个地址,如果又冲突,继续找,直到不冲突位置
  
    1)、开放地址法(闭散列)
    
    Di = (H(K) + d)mod m
    
      1)、线性  d = 1,2,3,4,...,m-1 (m就是地址总数)
      2)、二次
      3)、伪
      
    2)、再散列
    
    3)、链地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值