zoukankan      html  css  js  c++  java
  • 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 学习体会

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

  • 相关阅读:
    同花顺黄金分割线及斐波那契数列分析网格(主图公式)
    走在城市计算的路上
    206. Reverse Linked List
    237. Delete Node in a Linked List
    876. Middle of the Linked List
    83. Remove Duplicates from Sorted List
    21. Merge Two Sorted List
    33. Search in Rotated Sorted Array
    852. Peak Index in a Mountain Array
    744. Find Smallest Letter Greater Than Target
  • 原文地址:https://www.cnblogs.com/qqcom/p/11023563.html
Copyright © 2011-2022 走看看