第七章学习小结

 

一、主要内容

1、这一章节主要学习查找的算法,主要分为:

  1)静态查找(顺序查找、二分查找、插值查找、索引查找等)和动态查找(二叉排序树、平衡二叉树、B树、散列表);

  2)无序查找和有序查找。

2、个人感觉比较难的是与树相关的查找:

  二叉树表:二叉树表特点是该节点左子树的值小于该节点的值,右子树的值大于该节点的值。

  AVL树:又名平衡树,将每个节点的左子树高与右子树高的差值取绝对值,所有节点的绝对值的值小于等于1。

  B树:平衡的多叉树,一个节点有多于两个(不能小于)结点的平衡多叉树。

  B+树:B+树是对B树的一种变形树,利用指针和二分法进行查找。

3、二分查找的递归与非递归算法

int Search(SSTable ST, KeyType key, int low, int high) 
{
    if(low >high) return 0;//找不到则return 0;
    mid = (low+high) / 2;
    if(key == ST.R[mid].key) 
              return mid;//找到则return所在表中的下标 
    else if(key < ST.R[mid].key)
              return Search(ST,key,low,mid-1);//递归查找左段
    else 
             return Search(ST,key,mid+1,high);//递归查找右段
}
二分递归
int Search(SSTable ST, KeyType key) 
{
    int low = 1, high = ST.length;//初始化 
    while(low <= high) 
    { 
        mid = (low+high) / 2; 
        if(key == ST.R[mid].key) 
            return mid;//找到则函返回在表中的位置下标
        else if(key < ST.R[mid].key) 
            high = mid-1; //左段查找 
        else low = mid + 1; //右段查找 
    }
    return 0; //表中不存在待查元素,返回0 
}
二分非递归

 

二、学习心得

1、实践1:二分查找变形

  我一直卡在“若不存在这样的数,输出-1”这个地方,前前后后在while里面改了好几遍,经历了部分正确到段错误,从16分到0分,我都快被自己绕晕了…后来去洗澡放空自己的时候终于想起了“a[0:n-1]是按非降序排列的数组”,要“查找自左向右第一个大于等于x的值”,那不存在的话就说明x大于数组里所有元素,直接在while外面加一句“if(x>a[high]) return -1”就正确了,修修改改代码面目全非,没想到最后还是回到最初的代码,事实证明要认真审题,想不通时不要太倔,重新审题换个思路想想。

2、作业: Hashing

  首先要是要写好判断素数、读入表长不为素数时要找大于他的最小素数的函数;然后是要用二次(平方)探测法处理冲突。思路其实蛮清晰的,但最后一个测试点一直过不去,令人头秃。

3、作业客观题:

  召回率:Recall,又称“查全率”,是检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率;

  准确率:Precision,又称“精度”、“正确率”,是检索出的相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率。

 

三、下阶段目标

  学好最后一章,好好复习前面快要忘记的知识点,争取期末考个好成绩!

posted @ 2020-06-27 13:59  杨璇  阅读(142)  评论(0编辑  收藏  举报