数据结构习题订正MARK

 查漏补缺、引以为戒

    虽然MOOC提交的试卷因为断网出现了超时数据多数未传上去,SO所得分数是应得分数的颠倒的悲剧……唔,捂脸哭会……

                    不过聚焦在错误之处,发现它们还是错的很【对】的……当当当当当~ 贴上来共勉


1、设一段文本中包含字符{a, b, c, d, e},其出现次数相应为{3, 2, 5, 1, 1};那么经过哈夫曼编码后,该文本存储中所占总位数为多少?


  • A.

    25

  • B.

    36

  • C.

    12

  • D.

    40

               手动解答冒充老师版
            此题涉及
哈夫曼编码。 哈夫曼编码的优越性在于它的最优二叉树性能。即它形成的二叉树是WPL(带权路径长度)是最小的。根据题意得a,b,c,d,e这五种字符的权值分别是3,2,5,1,1。构造出如下的哈夫曼树。
           数据结构习题订正MARK_第1张图片图略丑( ̄ε(# ̄)☆╰╮o( ̄皿 ̄///) 但是纯手画哟~
    
        所以,对这棵哈夫曼树,WPL=3*2+5*1+1*4+1*4+2*3=25
   选A。想岔了,哎~


2、 判断:将N个数据按照从小到大顺序组织存放在一个单向链表中。如果采用二分查找,那么查找的平均时间复杂性是O(logN).
  
     手动解答冒充老师版:
       
          此题真是相当的狡猾啊摔!这句话是错的。为什么?
          二分查找的平均复杂度是O(logN)没有错,一看到这个就跳坑了= =然后知道陷阱来了!按顺序存放在【单项链表】中。二分查找是不可以用链表存储的。至于为什么。贴上网友贡献的解释吧

   这是由链表的特性决定的。链表是很典型的顺序存取结构,
   数据在链表中的位置只能通过从头到尾的顺序检索得到,即使是有序的,要操作其中的某个数据也必须从头开始。
   这和数组有本质的不同。数组中的元素是通过下标来确定的,只要你知道了下标,就可以直接存储整个元素,
   比如a[5],是直接的。链表没有这个,所以,折半查找只能在数组上进行。
 
3.由于懒得在WORD里改公式就直接贴上来了……捂脸(*/ω\*)


数据结构习题订正MARK_第2张图片

       别!激!动!,高亮的A君,是我做错的证据……-_-#

   手动解答冒充老师版:
          此题应选B。时间复杂度么……让我研究研究先
 每次都递归差n/2所以递归深度不就是logn吗
         这题的问题就是2T(n/2)理解错了
         调用的时候是递归两次T(n/2)。不是2*T(n/2)
    举个栗子:
      T(8)->T(4)+T(4)->T(2)+T(2)+T(2)+T(2)->T(1)*8
       递归深度为logn每层执行n次

       所以要n*log(n)。
      = =这么解释看起来不那么严谨 但是道理还是蛮科学的
      改天研究好点的解释再贴上来哈:)

4、

    在并查集问题中,已知集合元素0~8所以对应的parent值分别是  { 1, –4, 1, 1, -3, 4, 4, 8, -2 }(注:-n表示树根且对应集合大小为n),那么将元素6和8所在的集合合并(将小集合并到大集合)后,该集合对应的树根和parent值分别是多少?

  • A.   8和-6
  • B.   4和-5
  • C.   8和-5
  • D.   1和-6

  这题这题……呃……没法装老师了。不会o(>﹏<)o~ 求指导~ 以及答案为什么是B呢?这是为什么呢?~~~~

         来日方长,待我继续研究研究O(∩_∩)O~

                                            

                                   总结就到这里。大家晚安 ~


   




                    

你可能感兴趣的:(数据结构习题反思)