zoukankan      html  css  js  c++  java
  • 初赛2018(1)(自用)

     

    算法

    5.现有一段文言文,要通过二进制哈夫曼编码进行压缩。简单起见,假设这段文言文只由4个汉字“之”、“乎”、“者”、“也”组成,它们出现的次数分别为700、600、300、400。那么,“也”字的编码长度可能是(  )。
    A.1             B.2            C.3             D.4
    答案:BC
    解释网上有,就是如果有相同出现次数的要爆搜一下
    哈夫曼树构造:对于一个序列(以频率为权值,比如700,600,300,400),初始有序列元素个数个节点(节点权值为序列元素值),每次找出权值最小的两节点,删去,这两个节点以一个新建节点为父亲,新建节点权值为这两个节点的权值和,然后将新建节点放回去
    哈夫曼树的带权路径长度:就是找出初始序列每个元素在哈夫曼树中的深度(根节点深度为0),计算所有的(元素权值*深度)之和

    2.定义一种字符串操作,一次可以将其中一个元素移到任意位置。举例说明,对于字符串“BCA”可以将A移到B之前,变字符串“ABC”。如果要将字符串“DACHEBGIF”变成“ABCDEFGHI”最少需要________次操作。
    答案:4

    方法:找出DACHEBGIF和ABCDEFGHI的LCS(最长公共子序列),保留这个LCS内字母位置不动,只有剩下字母需要动

    如此题LCS是ACEGI,剩下4个字母要动,因此答案是4

    另外:编辑距离资料(待看):https://www.cnblogs.com/BlackStorm/p/5400809.html

    (以上对应程序填空待做)

    6、给定一个正整数N=8934632178,现决定依次删除其中6个数位上的数字(每次删除一个数位上的数字),每次删除后按原来的次序组成一个新数M的值均是当前状态下的最小数,则第四次应该删除的数字是()。
    A、6 B、8 C、7 D、4
    答案:D

    题意就是 函数f = x=>从x中取出一位并删掉,使得得到的数最小,返回这个最小数;每一步操作相当于令n=f(n)

    7、下列形状的三角形中,字幕a-i分别表示数字1,2,3,…,9
    a
    b c
    d e
    f g h i
    字母a-i同时满足下列条件:
    (1) a<f<i
    (2) b<d,g<h,c<e
    (3) a+b+d+f=f+g+h+i=i+e+c+a=19
    则满足条件的三角形个数为()。
    A、2 B、3 C、4 D、5
    答案:C
    方法:直接爆搜?没什么好方法,题怕是废了

    14、若已知一个栈的入栈顺序1,2,3,…,n,其输出序列为P1,P2,P3,…,Pn(它是输入序列的一个排序),则在输出序列中可能出现的情况是()。
    A、Pj<Pk<Pi,其中i<j<k B、Pk<Pj<Pi,其中i<j<k
    C、Pj<Pi<Pk,其中i<j<k D、Pi<Pk<Pj,其中i<j<k
    答案:BCD
    只能说注意仔细看题...

    直接令三个P(按顺序排的)分别为1,2,3,验证即可;如A,令Pj=1,Pk=2,Pi=3,则出栈序为3,1,2,不合法

    15、设有一个含有13个元素的Hash表(0-12),Hash函数是:H(key)=key%13,其中%是求余数运算。用二次探查法解决冲突,则对于序列(8,31,20,33,18,53,27),则下列说法正确的是()。
    A、18在4号格子中 B、33在6号格子中
    C、31在5号格子中 D、20在7号格子中
    答案:ABCD

    二次探查法大概是说,如果插入x,H(x)=i,那么依次尝试i,i+1^2,i-1^2,i+2^2,i-2^2,i+3^2,i-3^2,..直到没有冲突

    2、在m*n的棋盘上,每个方格(单位正方形,即边长为1的正方形)的顶点称为格点。以格点为顶点的多边形称为格点多边形。若设格点凸八边形面积的最小值为9,格点凸八边形内部(非顶点的)格点的个数的最小值为___。
    答案:6
    (题面里面“设”是假的,无视即可,这个只是一个提示)

    根据皮克定理:S=a+b/2-1(对于格点多边形,a表示边界内点个数,b表示边界上点个数)计算即可

    1、 Kathy函数是这样定义的:
    f(1)=1
    f(3)=3
    f(2n)=f(n)
    f(4n+1)=2f(2n+1)-f(n)
    f(4n+3)=3f(2n+1)-2f(n)
    对于一个给定的数m=55,求出所有满足f(n)=n,(n<=m)的自然数n的个数 。
    答案:13
    原题:hnoi2002kathy函数(并不会)

    (180924后面待做)

    19、下列关于图的说法正确的是():
    A、欧拉图的每一个顶点都能作为某条欧拉闭迹的起点
    B、 一个图有欧拉闭迹当且仅当该图有零个奇点。
    C、 若一个无向图有奇数条边,则它必然不是二分图。
    D、若G是汉密尔顿图,则对G上的汉密尔顿圈C,任意删去n个点,最多可将C划分为n段,反之亦然。
    答案:A
    注意:B不对,还要求连通

    4、合唱演出在即,一名团员病倒了,不能参加。指挥排了一下队伍,如果10人一排,有一排少一人,如果12人一排,有一排还是少一人,如果15人一排,有一排仍少一人。请问这个未上百人的合唱团共有多少()人?
       A、59  B、60   C、61  D、62
    答案:C
    注意:脑筋急转弯题2333,仔细看题

    13、在待排序的数据表已经为有序时,下列排序算法中花费时间反而多的是()。
    A、堆排序 B、希尔排序  C、冒泡排序  D、快速排序
    答案:D

    根据上面所给的图,回答下面两个问题:
    83、这个工程最早可能在什么时间结束(D)。
    A. 18               B. 26            C. 31          D. 43
    84、活动3->5的最早开始时间和最迟开始时间是(C)。
    A. 15,19       B. 19,27        C. 15,27    D. 19,37

    每个点的最早开始时间是源点到它的最长路,最迟开始时间是 汇点的最早开始时间 - 它到汇点的最长路,可以用dp求
    每条边(每个活动)的最早开始时间是它的起点的最早开始时间,最早结束时间是最早开始时间+活动所用时间;最晚结束时间是它的终点的最迟开始时间,最晚开始时间是最晚结束时间-活动所用时间


    排序:https://www.cnblogs.com/onepixel/articles/7674659.html

    原地排序:https://baike.baidu.com/item/%E5%8E%9F%E5%9C%B0%E6%8E%92%E5%BA%8F


    主定理:

    https://en.wikipedia.org/wiki/Master_theorem_(analysis_of_algorithms)

    设$T(n)=aT(frac{n}{b})+f(n)$,设$c_{crit}=log_ba$

    1.当$f(n)=O(n^c)$,且$c<c_{crit}$时$T(n)=Θ(n^{c_{crit}})$

    3.当$f(n)=Ω(n^c)$且$c>c_{crit}$时$T(n)=Θ(f(n))$(实际上还有一个要求才成立,不管了,具体见wiki)

    2.若存在一个k>=0,使得$f(n)=Θ(n^{c_{crit}}log^kn)$,那么$T(n)=Θ(n^{c_{crit}}log^{k+1}n)$
    2a.当$f(n)=n^{c_{crit}}log^kn$,k>-1时,$T(n)=Θ(n^{c_{crit}}log^{k+1}n)$
    2b.当$f(n)=n^{c_{crit}}log^kn$,k=-1时,$T(n)=Θ(n^{c_{crit}}log{logn})$
    2c.当$f(n)=n^{c_{crit}}log^kn$,k<-1时,$T(n)=Θ(n^{c_{crit}})$



    结点的度:结点拥有的子树的数目。
    叶子:度为零的结点。
    树的度:树中结点的最大的度。

    性质1:二叉树第i层上的结点数目最多为 2{i-1} (i≥1)。
    性质2:深度为k的二叉树至多有2{k}-1个结点(k≥1)。
    性质3:包含n个结点的二叉树的高度至少为log2 (n+1)。
    性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1。

    性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1
    证明:
    因为二叉树中所有结点的度数均不大于2,所以结点总数(记为n)="0度结点数(n0)"+"1度结点数(n1)"+"2度结点数(n2)"。得到n=n0+n1+n2
    另一方面,0度结点没有孩子,1度结点有一个孩子,2度结点有两个孩子,故二叉树中孩子结点总数是:n1+2n2。此外,只有根不是任何结点的孩子。故二叉树中的结点总数又可表示为n=n1+2n2+1
    相减得n0=n2+1

    若完全二叉树有n个结点,当n为奇数时,n1 = 0,n2 = int_DOWN(n/2),n0 = n2 + 1;
    当n为偶数时,n1 = 1, n0 = n/2;n2 = n0 - 1。


    由数字1,1,2,4,8,8所组成的不同的四位数的个数是___。
    答案:102
    容易算错


    答案:B
    查找第一个节点的代价是1...

    运算符优先级:https://zh.cppreference.com/w/cpp/language/operator_precedence

    在前的先运算
    a++,a--,.,->
    ++a,--a,+a(正号),-a(负号),!,~,*(解引用),&(取地址),
    *(乘),/,%
    +,-
    <<,>>
    <,<=,>,>=
    ==,!=
    &(按位与)
    ^
    |
    &&
    ||
    a?b:c,=,+=,-=,*=,/=,%=,>>=,<<=,&=,^=,|=

    12、一个无法靠自身的控制终止的循环称为“死循环”,例如,在C语言程序中,语句“while(1) printf(“*”);”就是一个死循环,运行时它将无休止地打印*号。下面关于死循环的说法中,只有()是正确的。
    A、不存在一种算法,对任何一个程序及相应的输入数据,都可以判断是否会出现死循环,因而,任何编译系统都不做死循环检验。  
    B、有些编译系统可以检测出死循环。  
    C、死循环属于语法错误,既然编译系统能检查各种语法错误,当然也应该能检查出死循环。  
    D、死循环与多进程中出现的“死锁”差不多,而死锁是可以检测的,因而,死循环也可以检测的。
    答案:A(见停机问题,未看)

    rmdir命令

    三叉链表:表示树,指比二叉链表多记一个父节点指针

    有向图顶点的度就是其出度和入度之和

    关节点=割点,重连通图=点双联通图

    有n (n≥1) 个顶点的有向强连通图最少有n条边。(错,1个点则只要0条)

    具有欧拉回路的图称为欧拉图(Euler Graph),具有欧拉通路而无欧拉回路的图称为半欧拉图。

    一张不连通的图一定不存在欧拉路径。对于这句话:错,可能是一个有欧拉路径的图外加一个孤立点

    二分查找中,成功时的平均查找长度为二叉查找树中各个节点深度的平均值(根节点深度为1)(对于一个序列[l,r],其二叉查找树的根节点位置为(l+r)/2(下取整))。
    查找失败时平均查找长度即为查找每个外结点(指某个节点的空的儿子)的比较次数之和除以外结点的个数。
    (实现有很多种,但是如果这么问就这么答)

    74、目前以比较为基础的内部排序方法中,其比较次数与待排序的记录的初始排列状态无关的是(二分插入排序)

    希尔排序的最后一趟就是冒泡排序(对?)

    如果输入序列已经排好序,则快速排序算法无需移动任何数据对象就可以完成排序。(错)

    54、采用任何基于排序码比较的算法,对5个互异的整数进行排序,至少需要( C )次比较。
    A. 5            B. 6            C. 7            D. 8
    实际上的操作不清楚,但是如果这么问的话,排序n个数,答案应该是log2(n!)(上取整)(就是令n=n!,做操作n=(n%2==1)?(n/2+1):(n/2)使得n变成1的最少次数)(原因不清楚,大概是一开始有n!种方案,每一次比较最优能够使得方案数除以2(上取整))(正确性还不是很确定)

    有时候说“一趟归并”,指用非递归实现归并排序,类似于倍增的后缀排序,每一趟把两个相邻且内部有序的长度为2^i的序列合并为一个长度为2^(i+1)的序列

    34.下列排序算法中,()算法会出现下面情况:在最后一趟结束之前,所有元素不在其最终的位置上。
        A.堆排序            B.冒泡排序
        C.快速排序       D.插入排序
    答案:D(只要最后一次插入的是最小元素(要求最小元素不重复出现)即可)

    O(n)建堆:(例子为大根堆)首先有一个数组,把它当成一个完全二叉树(左右儿子下标的取法按照堆的方法),可以用dfs建堆(可以很容易改成自底向上)。dfs(i):先建左右子树,然后调整(i)。调整(i):如果当前节点权值大于等于两个子节点权值,那么已经完成,否则找出两个子节点中较大的,与当前节点权值交换,并且调整(交换的那个子节点)。
    堆排序时,一般正序排序就建大根堆,这样堆中弹出的元素可以直接放在数组最后,就不需要辅助空间

    链地址法就是拉链法。
    装填因子:填入表中的元素个数/哈希表的长度
    聚集效应:开放地址法,且探查的方法不够好(线性探查,当然也可能要看具体数据的分布)时,容易有聚集效应
    具有相同哈希函数值的关键字对该散列函数来说称做同义词
    直接定址法:比如h(k)=k或h(a,b)=(a-1)*m+b(1<=a<=n,1<=b<=m),完美哈希
    数字分析法:只适合于所有关键字值已知的情况,取数据元素关键字中某些取值较均匀的数字位(指所有数据的该位的值没有集中在几个数字上)作为哈希地址
    平方取中法:取关键字平方的中间几位
    线性探查法到尾部也没找到空位可以回到头部

    索引存储:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。索引表由若干索引项组成。如果每个节点在索引表中都有一个索引项,则该索引表就被称为稠密索引。若一组节点在索引表中只对应于一个索引项,则该索引表就成为稀疏索引。索引项的一般形式一般是关键字、地址。

    内部排序:待排序记录存放在内存中。
    外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需要对外存进行访问。

    二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
    (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
    (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
    (注意的确只有小于/大于)
    (3)左、右子树也分别为二叉排序树;
    (4)没有键值相等的节点。

    https://blog.csdn.net/flt_ustc/article/details/52761816
    所有的顶点和边都属于图G的图称为G的子图。
    含有G的所有顶点的子图称为G的生成子图。
    设V1是V的一个非空子集,以V1为顶点集,以两端点均在V1中的边的全体为边集的子图称为G的导出子图,记作G[V1]。
    导出子图G[V-V1]记为G-V1,它是从G中删去V1中的顶点以及与这些顶点相关的边所得到的子图。若V1={v},则把G-{v}简记为G-v, 称为主子图。

    所有哈密顿图都是点双连通的
    欧拉图不一定是哈密顿图,哈密顿图不一定是欧拉图

    对于无向图:
    线图:每个点代表原图的一条边,两个点之间有边当且仅当它们表示的(原图中的)边有一个端点相同
    每个欧拉图的线图都是哈密顿图
    每个哈密顿图的线图都是哈密顿图

    对于一个有n个点(n>=3)的简单无向图,当每一对不相邻节点的度数之和都>=n-1时,它有哈密顿通路
    对于一个有n个点(n>=3)的简单无向图,当每一对不相邻节点的度数之和都>=n时,它是一个哈密顿图
    证明:https://wenku.baidu.com/view/5d3ed22dccbff121dd3683a4.html

     

    对于一个有n个点的强连通的简单有向图,当每一对不相邻的节点的度数和>=2*n-1时,它是哈密顿图(证法应该类似?暂时不研究)(来自wikipedia)

    一个竞赛图存在哈密顿回路的充要条件是该图强连通
    任意一个竞赛图存在一条哈密顿路径
    证明:https://blog.csdn.net/di4CoveRy/article/details/70230029

    60、在一个带权连通图G中,权值最小的边一定包含在G的(      )生成树中。
    A. 某个最小        B. 任何最小        C. 广度优先        D.深度优先
    (答案:A;并不是B,反例是边长全部一样的图,不能脑抽)
    (最小生成树的结论是:一个无向图所有的最小生成树中某种权值的边的数目均相同)

    P,NP,NPC问题:http://www.matrix67.com/blog/archives/105
    P问题指能在多项式时间内解决的问题;NP问题指能在多项式时间内验证一个解的问题;NPC问题首先是一个NP问题,其次所有的NP问题都可以归约到它;NP-Hard问题要求所有的NP问题都可以归约到它(不一定要是NP问题)

    用直线/折线/Z形线划分平面:https://blog.csdn.net/destiny1507/article/details/81228610

    基环树,基环内向树,基环外向树
    https://blog.csdn.net/Q1410136042/article/details/81152191

    组合公式
    https://blog.csdn.net/litble/article/details/75913032
    https://blog.csdn.net/acdreamers/article/details/31032763

    11、T(n)为某个算法输入为n时的运算次数。如果T(i)(i<=1)为常数,且T(n)=3T(sqrt(n))+log2n,那么以下比T(n)复杂度低有(AC)
    A、O(log(n)*sqrt(log(n))  B、O(sqrt(n))
    C、O(log(n))                    D、O(log^2(n))
    $T(n)=log_2n^{log_2​3}$。

  • 相关阅读:
    JVM 垃圾回收 Minor gc vs Major gc vs Full gc
    CMS垃圾回收与G1垃圾回收
    使用Mat分析大堆信息
    Java线程池--ThreadPoolExecutor
    IOC容器初始化过程
    linux 下查mac
    logstash之multiline插件,匹配多行日志
    logstash json和rubydebug 第次重启logstash都会把所有的日志读完 而不是只读入新输入的内容
    快速定位关键字所在日志的行号 查看特定行以下的内容
    redis 常用命令
  • 原文地址:https://www.cnblogs.com/hehe54321/p/9678084.html
Copyright © 2011-2022 走看看