1.本周学习总结
1.思维导图
2.谈谈你对查找运算的认识及学习体会
本章学习了查找的相关知识。介绍了线性表查找、数表查找和哈希表查找等相关算法设计查找算法。查找又称为检索,是指在某种数据结构种找出满足给定条件的元素。感觉运算方式很多,前人的知识与发现真的特别了不起。查找这一章最主要的是二叉排序树、平衡二叉树、哈希表。课上对这三个讲得也格外的多,偏向于理论,需要我们非常清楚他们是怎么做的,结果会是怎样,适合什么情况,为为后续的选择上提供非常坚实的理论基础和方法。通过学习查找,很大程度的提高工作效率,减少时间,为我们在后续的遍历代码里能很快的找到最合适的方法。查找算法非常多样也极具针对性,在不同情况下需要对应用不同的查找算法,这样才能拥有最小的时间复杂度,值得我们好好学习。
2.PTA实验作业(6分)
2.1.题目1:7-2 航空公司VIP客户查询
2.1.1设计思路(伪代码)
定义一个string和int的map的变量a
定义整型n,k,m,km,字符数组user[19]
输入飞行记录总数N,最低历程k
for i=0 to n
输入相应数值
if 里程<最低里程
里程=最低里程
else if a中没有身份证号
a[身份证]=里程
else
身份证对应里程加上输入的里程
输入查询总数m
for i=0 to m
输入要查询的身份证号
if a中有该身份证号
输出身份证号对应的里程
else 输出“No Info”
2.1.2代码截图
2.1.3本题PTA提交列表说明。
- 最开是网上找了相应题目的代码放上去
- 后来自己理解看代码的时候,发现太多,且很难看进去,就去问其他同学是如何做的,就看到用map的比较间的的方法,且容易理解代码量还少
2.2 题目2: 是否二叉搜索树
2.2.1设计思路(伪代码)
定义p
if T为空 return true
if T左右子树皆空 return true
p=T->Left
if p非空
while(p->Right) p=p->Right;
if(p->Data>T->Data) return false;
p=T->Right;
if p非空
while(p->Left) p=p->Left;
if(p->Data<T->Data) return false;
return IsBST(T->Left)&&IsBST(T->Right);
2.2.2代码截图
2.2.3本题PTA提交列表说明。
- 这题代码其实比较简单,了解了一下其他同学的思路,就是直接找左子树的最右的结点以及右子树的最左的结点,若一个小于根节点,一个大于根节点。
2.3 题目3:QQ帐户的申请与登陆
2.3.1设计思路
map<long long, string>ma
输入N
输入的字符为'N'时
判断里面是否有该账号记录
若没有
输出ok 把数据输入
若有
输出Exist
输入的字符为‘L’时
判断里面是否有该账号的记录
若没有
输出 Exist
若有
进一步判断密码是否正确
2.3.2代码截图
2.3.3本题PTA提交列表说明。
- 最开始就是编译器没改,导致编译错误
- map是一个很简单方法,本来光想的时候,觉得好复杂。
3、阅读代码
3.1 题目
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
示例 1:
输入: dividend = 10, divisor = 3
输出: 3
示例 2:
输入: dividend = 7, divisor = -3
输出: -2
说明:
被除数和除数均为 32 位有符号整数。
除数不为 0。
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。
3.2 解题思路
用异或来计算是否符号相异
unsigned int result = 0;
for (int i = 31; i >= 0; i--)
找出足够大的数2^n*divisor
将结果加上2^n
将被除数减去2^n*divisor
if (result == LIMIT)
return INT_MIN;
else
符号相异取反
3.3 代码截图
3.4 学习体会
- 首先我没怎么接触到异或这种算法,上一次是大作业的时候,其他同学写过,让我有一点接触。这一次,是我第二次在代码方面碰到这种运算方式,很新奇。只能大概说是知道了,还能这么用。
- 说实话,题目要求近乎是把我做这道题的路全断了,真的是长见识,增知识了。