zoukankan      html  css  js  c++  java
  • 大二《数据结构》机考解题报告

           这次学校数据结构机考,题目很奇怪,简直让我觉得这是算法考试……三道题,撑死了用到树的遍历和并查集,连个队列都没用,也是醉了-.-

    第一题 高精度加法

       两个数相加,数最多5000位,也就是和最多5001位,而且连数的长度都会给。直接两个数组相加就好。

    第二题 给出树的前序、中序遍历,要求写出树的后序遍历。

       一棵树,若知道两种遍历,且其中一种是中序遍历,那么必然可以确定下这棵树,自然也可以求出第三种遍历。而这道题中,树最多有26个点(还是52个?记不清了),这就是告诉我们:你们随便搞吧,别进死循环就不会超时~~因此,我们只需要在纸上手动操作一下样例,看看如何构造出这棵树,然后用计算机搞定这个过程,最后后序遍历一下就好了。

    第三题 给出两个M的矩阵,问只通过交换两行和交换两列,是否可以从其中一个矩阵构造出另一个。

           分析一下这两种操作,以交换两行为例:操作过程中,原来是一行的那些元素,换完了还是在一行;原来是一列的那些元素,现在还是在一列。而且,还可以想到,一旦满足这个条件,那么这两个矩阵一定可以互相构造出来,证明略。(因为这个很明显是对的,但是我暂时只能想到很麻烦的证明方法,所以就先不写了,等我想到很简洁漂亮的方法,会在此更新的。)因此,我们只要去判断这个就好了:A矩阵中随便取一行元素,在B矩阵中找相同的元素,应当也是在同一行;列同上。我暂时想到的有两种方法——

           方法一:并查集。在此只说行如何做,列的类似就好了。我们首先初始化并查集,然后扫一遍A矩阵,一行一行扫,把每行的所有数都合并到同一个集合。这样搞完,两个数如果在同一个集合中,则说明他们在A中处于同一行。此时,我们再扫一遍B矩阵,也是一行一行扫,每一行的数据判断下是否都在同一个集合中(判断方法随意,保证线性即可,当然此题数据太小,此处平方级别也可以过),这样如果全都合法,就说明B中在同一行的数据,在A中也处于同一行。如此这般,行列都做完,都合法,也就可以输出Yes了,否则中间直接跳出输出No便可。应当注意的是,题目本身保证了一个矩阵中没有相同的数,在此条件之下,上面判断过程如果都满足,则说明两矩阵中的元素完全一样,这个无需单独判断。

           方法二:存映射。如果你不想用并查集,比如你想提高效率(毕竟并查集的复杂度不是O(1)而是O(α)嘛-.-),或者觉得并查集代码太麻烦(毕竟有四五行-.-),那么你可以考虑详细一些。其实,我们只需要做到下面这样就足够了:对于A矩阵中的任意一个数,都可以瞬间找到其在B矩阵中的位置。这种思路下,我们只要扫一遍B,存一个下标0~10000的数组siteB(元素的范围是0~10000),数组中的元素是坐标(i,j),其意义为:siteB[x]表示x在B中的位置。而后,我们扫一遍A矩阵,一行一行扫,利用siteB数组,判断每行元素在B中是否也位于同一行。至此,后面均同方法一,略。

        代码有时间补上。

  • 相关阅读:
    AX 2012 Security Framework
    The new concept 'Model' in AX 2012
    How to debug the SSRS report in AX 2012
    Using The 'Report Data Provider' As The Data Source For AX 2012 SSRS Report
    Deploy SSRS Report In AX 2012
    AX 2012 SSRS Report Data Source Type
    《Taurus Database: How to be Fast, Available, and Frugal in the Cloud》阅读笔记
    图分析理论 大纲小结
    一文快速了解Posix IO 缓冲
    #转载备忘# Linux程序调试工具
  • 原文地址:https://www.cnblogs.com/icedream61/p/4184785.html
Copyright © 2011-2022 走看看