• 20182335 2019-2020-1 《数据结构与面向对象程序设计》第九周学习总结


    教材学习内容总结

    二叉查找树:二叉查找树是一个二叉树,对于每个结点n,n的左子树包含的元素都小于n中的元素,n的右子树中包含的元素都大于等于n中的元素。

    在二叉树中,新元素添加为树的叶节点。从根开始,沿着每个结点中的元素所确定的路径,直到相应的方向上没有子节点为止。

    删除元素:

    1、如果被删除结点是叶结点(无子结点),可以简单地删除。

    2、如果被删结点有一个子结点,则用它的子结点替代它。

    3、如果被删除结点有两个子结点,在树的更低层找到一个合适的结点替代它。被删除结点的子结点成为替代结点的子结点。

    树的遍历:

    (1)先序遍历:先访问根,再访问左右子树。

    (2)中序便利:先遍历左子树,再访问根节点,再访问右子树。

    (3)后序遍历:先便利左子树,再遍历右子树,最后遍历根节点。

    树的实现

    1.使用数组表示树:存储在数组中位置为 n 的元素,元素的左子结点存储在(2n + 1)的位置,右子结点存储在(2 x(n+1))的位置。

    2.链式结点:使用一个单独的类来定义树结点。

    教材学习中的问题和解决过程

    问题1:递归和迭代的区别在哪里?

    问题1解决方案:

    概念不同:

    程序调用自身的编程技巧称为递归,其实就是函数自己调用自己。迭代是指利用变量的原值推算出变量的一个新值,如果递归是自己调用自己的话,迭代就是A不停的调用B。

    使用的方法不同:

    迭代使用的是循环(for,while,do-while)或者迭代器,当循环条件不满足时退出。而递归一般是函数递归,可以是自身调用自身,也可以是非直接调用,即方法A调用方法B,而方法B反过来调用方法A,递归退出的条件为if-else语句,当条件符合基的时候退出。

    对比:

    递归的代码比较简单易懂,实现一个计算逻辑往往只需要很短的代码就能解决。但是由于它要不停地调用函数,就可能浪费大量的空间。递归中函数调用的局部状态是用栈来记录的,所以如果递归太深的话还有可能导致堆栈溢出。而对于迭代而言,能使用递归实现的都可以使用迭代来实现,并且效率会很高,在空间消耗上也很小,唯一的缺点就是代码比较难懂。

    问题2:对于红黑树存在的意义问题,为什么要单独设置一个红黑树呢?红黑树可以解决的问题AVL树也同样可以解决?

    问题2解决方案:

    最主要就是效率问题,红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。
    当然这也不是没有代价的,红黑树是牺牲了严格的高度平衡的优越条件为代价让红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。

    代码调试中的问题和解决过程

    问题1:教材中的代码在调试的过程中遇到了问题,其中的addElement和removeMin方法有问题。而且继承的LinkedMaxHeap中也有问题。

    问题1解决方案:
    addElement继承的是父类中的方法,在LinkedMaxHeap中,存在有add方法而没有addElement方法,将其改为add方法即可。
    而removeMin方法,根据removeNext方法的注释

    Removes the next highest priority element from this queue and returns a reference to it.

    我们可知它应该是需要得到一个最大的元素,所以这里应该使用removeMax方法,而这个方法也存在于父类中,这个问题得到解决.

    PriorityQueueNode类实现了Comparable接口,用到了泛型,把比较的类型设为PriorityQueueNode类型时,漏了一个,加上后问题就得到了解决。

    修改后:

    代码托管(https://gitee.com/li_jinquan/ljq/tree/master/ninthweek

    上周考试错题总结

    1.In a circular array-based implementation of a queue, the elements must all be shifted when the dequeue operation is called.

    A .true B .false

    正确答案: B

    你的答案: A

    解析:基于循环数组的队列实现无需移动元素。

    2.In removing an element from a binary search tree, another node must be ___________ to replace the node being removed.
    A .duplicated

    B .demoted

    C .promoted

    D .None of the above

    正确答案: C

    我的答案: B
    解析:当在二叉查找树上删除一个结点时,后面的结点需要向上移动来补全。当时,以为越靠近根结点说明深度越低,所以是降级了;

    点评过的同学博客和代码

    本周结对学习情况
    20182311

    感悟

    本周事情比较多,学习时间不足,需要及时调整,花更多时间和精力去调整。下周开始要刻意训练自己的动手能力,多敲代码多看书。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 200/200 2/2 20/20
    第二周 300/500 2/4 18/38
    第三周 500/1000 3/7 22/60
    第四周 325/500 2/4 18/38
    第五周 600/1000 3/7 22/60
    第六周 300/500 2/4 28/40
    第七周 300/500 2/4 18/40
    第八周 300/500 2/4 18/36
    第9周 330/500 2/4 30/60

    参考资料

    《Java程序设计与数据结构教程(第二版)》

    《Java程序设计与数据结构教程(第二版)》学习指导

  • 相关阅读:
    Fedora 12/Debian 以root登录图形界面
    贡献一个简单的日志类
    "没有 pthread_create 的手册页条目"解决办法
    OpenBSD 下架设vsftpd
    NetSnmp初步(一):让我们的程序提供snmp服务
    linux socket接收、发送小工具(支持tcp、udp包(组播)的发送接收)
    NetSnmp初步(二):发送Notification
    netbeans添加现有源文件时自动更新Makefile依赖关系
    Fedora Core12的防火墙会过滤掉部分IP数据包,在开发调试时建议关闭防火墙
    NetSnmp初步(三):接收控制命令:实现SNMP的SET命令
  • 原文地址:https://www.cnblogs.com/lijinquan/p/11891369.html
Copyright © 2020-2023  润新知