• # 20162308 2017-2018-2 《程序设计与数据结构》第九周学习总结


    20162308 2017-2018-2 《程序设计与数据结构》第九周学习总结

    教材学习内容总结

    学习目标

    • 理解堆和优先队列
    • 理解堆和优先队列的关系
    • 掌握堆的实现
    • 掌握堆排序的实现
    • 分析Java Collections API中堆和相关的类

    学习内容

    ** 堆 ** 是具有以下性质的二叉树:

    (1)它是一棵完全二叉树(即树上所有节点都是满的,除了最后一层的节点外,且最后一层的叶子节点都是尽可能靠左的);

    (2)父节点的键值总是和任何一个子节点的键值保持固定的大小关系,且每个节点的左子树和右子树都是一个二叉堆。

    当父节点的键值总是大于或等于任何一个子节点的键值时为最大堆;当父节点的键值总是小于等于任何一个子节点的键值时为最小堆。二叉堆可应用于堆排序、优先级队列、图算法等。

    二叉堆通常用数组来表示,如果树根节点为 arr[0],那么有以下性质:
    (1)arr[i/2] 为第 i 个节点的父节点;
    (2)arr[2i + 1] 为第 i 个节点的左孩子节点;
    (3)arr[2
    i + 2] 为第 i 个节点的右孩子节点。

    优先队列

    在多任务环境中,操作系统必须决定在若干进程中运行哪个进程。我们知道,有一些任务应当具有优先权,对这些特殊的应用似乎需要一类特殊的队列,称之为优先队列(priority queue)。

    优先队列的实现如下:

    • 链表,插入队头O(1), 删除最小的元素则需要遍历链表O(n) 另一个方法是让链表保持在排序的状态,这使得插入代价O(n),而deleteMin只需要O(1)

    • BST:二叉查找树 对于两种操作平均时间都是O(logN),但可能导致树的不平衡,用平衡树又显得过于麻烦

    故优先队列使用二叉堆(binary heap)来实现。

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

    代码托管

    • 代码提交过程 & 代码量截图:
    • 2017-04-30.png

    结对及互评

    点评模板:

    • 博客中值得学习的或问题:

    其他

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 - 1 10
    第二周 - 2 20
    第三周 - 3 30
    第四周 - 4 40
    第五周 - 5 50
    • 计划学习时间:20小时

    • 实际学习时间:10小时

    • 改进情况:

    参考资料

  • 相关阅读:
    MySQL难点语法——连接
    MySQL难点语法——子查询
    MySQL查询——select
    python高级编程——入门语法(二)
    python高级编程——入门语法(一)
    MySQL语言分类——DML
    python高级编程——锁
    浮点数的秘密
    有符号和无符号数
    基本数据类型
  • 原文地址:https://www.cnblogs.com/pingch/p/7789551.html
Copyright © 2020-2023  润新知