• 博客作业05--查找


    1.学习总结(2分)

    1.1查找的思维导图



    .2 查找学习体会

    查找这章的内容大多是操作多于编程,很多概念如果理不清楚的话很容易出错,比如说B—和B+树的插入和删除操作,有些概念稍微有那么一点容易混淆,还有平衡二叉树的调整,删除之类的,以及哈希表的查找;还有这周学习的map函数,Map的元素是成对的键值/实值,内部的元素依据其值自动排序,Map内的相同数值的元素只能出现一次,Multimaps内可包含多个数值相同的元素,内部由二叉树实现(实际上基于红黑树(RB-tree)实现。学习这周主要用到了map函数中的find函数和count函数:

    使用count,返回的是被查找元素的个数。如果有,返回1;否则,返回0。注意,map中不存在相同元素,所以返回值只能是1或0。

    使用find,返回的是被查找元素的位置,没有则返回map.end()。

    详细操作见链接:https://www.cnblogs.com/Deribs4/p/4948351.html

    2.PTA实验作业(4分)

    2.1 题目1:6-3 二叉搜索树中的最近公共祖先(25 分)

    2.2 设计思路

    解题思路:首先判断u,v 是否在树中,若不在,返回ERROR,若在,判断u,v是否同在树的左子树或右子树或分别在树的左右子树,然后再根据其关系找出最近公共祖先

    伪代码:

           Tree p;定义flag=0;
    	   p=T;
    	   if p不为空 
              if(p->Key等于u)
    		     flag=1;break;
    		  else if  p->Key大于u
    		      p=p->Left;
    		  else
    		      p=p->Right;
    		if  flag= 0;返回ERROR 
    		同理判断v是否在树中
    		p=T; 
    		 while(P不为空)
    		    if(u,v都小于p->Key)
    			   p=p->Left;
    			else if(u,v都大于p->Key)
    			   p->Right;
    			else
    			    break;
    				
    		  返回 p->Key;
    		  end
    

    2.3 代码截图



    2.4 PTA提交列表说明

    这题基本上没什么太大的问题,其做题思路呢就是:先判断u,v在树中是否存在,若不存在则返回ERROR,若存在则,判断u,v若都小于根节点,这说明在左子树上去其最近公共祖先,p=p->Left ,当满足(uKey&&v>p->Key)||(u>p->Key&&vKey)时则p->Key即为最近的公共祖先,同理当u,v若都大于根节点时,可求出在右子树上的最大公共祖先;这题只是在运行的时候不小心把定义的变量写错,导致编译错误,

    2.1 题目2:7-1 QQ帐户的申请与登陆(25 分)

    2.2 设计思路

    解题思路:调用Map函数,若输入的命令为申请,调用T.find函数检验id,若T.find函数等于T.end,说明STL容器中没有此账号,将密码附给账号,申请成功,否则说明账号已存在;若输入命令为老账户登录,调用T.find函数检验id,若T.find函数等于T.end,说明账号输入错误,若T.find函数不等于T.end,说明账号存在,判断密码是否相等,若不等,则密码输入错误,若相等,则登录成功

    伪代码

          定义 M;string c,id,pass;
    	  输入M;
    	  while M--
    	      输入c,id,pass;
    		  if  c[0]等于N
    		     if(T.find(id)!=T.end()) 
    		     输出 ERROR: Exist
    			 else
    			     T[id]=pass;
    				 输出 New: OK
    		  else
    		     if(T.find(id)==T.end()) 
    		        输出ERROR: Not Exist
    			 else
    			    if  密码匹配
    				  输出Login: OK
    				else
    				   输出ERROR: Wrong PW 
    

    2.3 代码截图


    2.4 PTA提交列表说明

    这题是看了老师说的调用map函数来做的,一开始的时候不理解T.find和T.end的运用,导致一直写不出来 ,然后上网百度了下T.find和T.end的用法后才写出来的,使用find,返回的是被查找元素的位置,没有则返回map.end()。 map.end()指向map的最后一个元素之后的地址,所以当输入申请的命令的时候,若T.find函数等于T.end,说明STL容器中没有此账号,将密码附给账号,申请成功,否则说明账号已存在;若输入命令为老账户登录,若T.find函数等于T.end,说明账号输入错误,若T.find函数不等于T.end,说明账号存在,判断密码是否相等,若不等,则密码输入错误,若相等,则登录成功

    2.1 题目3:6-2 是否二叉搜索树(25 分)

    2.2 设计思路

    解题思路:判断是否二叉搜索树,需满足(1)非空左子树的所有键值小于其根结点的键值。(2)非空右子树的所有键值大于其根结点的键值。

    (3)左、右子树都是二叉搜索树。,且由二叉搜索树的性质可知,左子树的最大键值在最右下角,右子树的最小键值在最左下角,故找到左子树的最大键值,小于根节点,找到右子树的最小键值,大于根节点,则为二叉搜索树

    伪代码:

          BinTree p;
    	  if T不为空,返回true;
    	  if  T的左右子树都不为空,返回true 
    	  p=T->Left ;
    	  if p不为空
    	      while(P->Right不为空)
    		     p=p->Right;
    			 if P->Data大于T->Data
    			    返回false 
    	  同理检验T的右子树
    	  递归检验右子树和左子树是否是二叉搜索树
    	  返回 IsBST(T->Left)&&IsBST(T->Right)
    	  end 
    

    2.3 代码截图

    2.4 PTA提交列表说明

    这题部分正确的原因主要是忘记判断当二叉搜索树的左右子树为空,它也是二叉搜索树,加上这句判断后答案正确

    3.截图本周题目集的PTA最后排名(3分)

    3.1 PTA排名(截图带自己名字的排名)

    3.2 我的总分:2.5

    4. 阅读代码(必做,1分)

    哈希表查找代码实现 -

    https://blog.csdn.net/qq_35644234/article/details/68068293

    详细介绍了哈希表查找的三种解决哈希冲突的方法 ,即线性探测,二次探测,链地址法,

    5. 代码Git提交记录截图

  • 相关阅读:
    Solr4.8.0源码分析(16)之SolrCloud索引深入(3)
    Solr4.8.0源码分析(15) 之 SolrCloud索引深入(2)
    Solr4.8.0源码分析(14)之SolrCloud索引深入(1)
    Solr In Action 笔记(4) 之 SolrCloud分布式索引基础
    Solr In Action 笔记(3) 之 SolrCloud基础
    change buffer太复杂了
    mtr语言真是逆天了
    mysql自动化测试第一个例子
    mysql mtr写入数据
    垃圾规范
  • 原文地址:https://www.cnblogs.com/2223ch/p/9091409.html
Copyright © 2020-2023  润新知