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