• DS博客作业07--查找


    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 学习体会

    • 首先我没怎么接触到异或这种算法,上一次是大作业的时候,其他同学写过,让我有一点接触。这一次,是我第二次在代码方面碰到这种运算方式,很新奇。只能大概说是知道了,还能这么用。
    • 说实话,题目要求近乎是把我做这道题的路全断了,真的是长见识,增知识了。
  • 相关阅读:
    css注入获取网页中的数据
    跨路径读取cookie
    python 网络爬虫介绍
    ssh无法登录,提示Connection closing...Socket close.
    Tengine 添加第三方监控模块nginx-module-vts
    使用nginx很卡之strace命令
    MySQL清理慢查询日志slow_log的方法
    Python之json模块
    zabbix3调用接口发送短信告警
    RabbitMQ 安装 rabbitmq_delayed_message_exchange插件
  • 原文地址:https://www.cnblogs.com/056lu/p/11032000.html
Copyright © 2020-2023  润新知