DS博客作业07--查找

1.本周学习总结

1.思维导图

 

2.对查找运算的认识及学习体会。

查找有顺序查找,二分查找,二叉排序树的查找,哈希表查找等等,有着不同的时间复杂度,使用也有要求,二分查找是顺序查找的优化版,但是使用上需要数组中的数据排列有序。在stl容器中,可以通过find函数和count。find的函数需要定义一个指针,如果没有找到的话,指针就会指向容器的尾部,否则如果指针没有指向容器尾部就是找到了。而count是查找容器当中这个元素的个数,不为0则代表存在于容器中。查找是一种很复杂的算法,不同情况下需要对应用不同的查找算法,这样才能拥有最低的时间复杂度,需要我们好好学习。

2.PTA实验作业

2.1.题目1:7-1 QQ帐户的申请与登陆

2.1.1设计思路

map<string,string>Q;
输入N
输入的字符为'N'时
{    判断里面是否有该账号记录
      若没有{  输出ok 并把数据输入}
      若有{ 输出Exist}   }
输入的字符为‘L’时
{      判断里面是否有该账号的记录
         若没有{ 输出 Exist}
         若有{  进一步判断密码是否正确 } }

 

 

2.1.2代码截图

 

2.1.3本题PTA提交列表说明。

  • map函数只了解了大概,在应用时的具体规范格式还不太熟练,导致编译错误。
  • 熟记map函数如何应用后修改格式,答案正确。

2.2 题目2:6-3 二叉搜索树中的最近公共祖先

2.2.1设计思路

Find 函数
{
   如果T为空  
     返回0  递归出口
   如果a大于T的值
     就往T的右树寻找
  如果a小于T的值
     就往T的左树寻找
  如果找到
    就返回1
                    }

LCA 函数
{
   如果T为空
     返回error 
  如果树中没有u和v的值
     返回error
  如果u和v一个比T的值大一个小
    T就是他们的共同最近祖先
  如果u和v有一个跟T的值相同
    T就是他们的共同最近祖先
  如果u和v都小于T的值
     就往T的左树寻找
 如果u和v的值都大于T的值
     就往T的右树寻找
}

 

2.1.2代码截图

 

2.2.3本题PTA提交列表说明。

  • Q:树中无值时设计出现错误,部分正确
  • A:在find函数和LCA函数中增加if(!T)语句,答案正确。

2.3 题目3:7-2 航空公司VIP客户查询

2.3.1设计思路

定义一个string和int的map的变量a
输入飞行记录总数N,最低历程k
for i=0 to n
    输入身份证号和里程
    如果 里程低于最低里程 
        里程等于最低里程
    如果 a中没有身份证号
        a[身份证]=里程
    否则
        身份证对应里程加上输入的里程
输入查询总数m
for i=0 to m
    输入要查询的身份证号
    如果a中有该身份证号
        输出身份证号对应的里程
    否则 输出“No Info”

 

2.3.2代码截图

 

2.3.3本题PTA提交列表说明。

 

  • Q:运行超时错误,一开始用map做运行超时,于是我用哈希表做还是超时,是因为哈希冲突导致时间复杂度大大增加所以超时。
  • A:最后用map,然后将cin全改成scanf,cout全改成printf就过了,原来c的输入输出的时间复杂度比c++的低。

3、阅读代码

3.1 题目:红黑树查找结点

3.2 解题思路

红黑树的查找就和二叉搜索树的查找没太大区别,都是利用循环找到与之对应的key值返回就好了。

3.3 代码截图

 

3.4 学习体会

这篇代码的好处在于出现的生词比其源代码少很多,让我不用看的头昏脑涨,让我花费较少的时间去了解红黑树的,
注释也很清晰。相对契合我们刚刚学习的二叉树,都是根据左子树小于节点,右子树大于节点来编写代码。

posted @ 2019-06-16 11:10  郭坤  阅读(156)  评论(0编辑  收藏  举报