码迷,mamicode.com
首页 > 其他好文 > 详细

20172324 2018-2019-1 《程序设计与数据结构》第八周学习总结

时间:2018-11-10 23:51:15      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:排序   记录   obj   存在   public   附加   教材   说明   style   

20172324 2018-2019-1 《程序设计与数据结构》第八周学习总结

教材学习内容总结

  • 具有两个附加属性的二叉树:
    1. 是一颗完全树
    2. 对每一结点,它小于或等于其左孩子和右孩子(最小堆)
    3. 最大堆的结点大于或等于它的左右孩子
    4. 最小堆将其最小元素存储在该二叉树的根处,其根的两个孩子同样也是最小堆
操作 说明
addElement 将给定元素添加到该堆中
removeMin 删除堆的最小元素
findMin 返回一个指向堆中的最小元素的引用
  • addElement操作
    • 要求插入元素是可比较的
    • 维持该堆的完全性属性和有序属性,插入的元素位置只存在一个正确的位置,要不然在h层左边的下一个空位置,要不然在h+1层左边的第一个位置。
    • 添加之后进行排序(过程名叫筛选)
    • 在堆实现中,会对最末一片叶子进行跟踪记录。
  • removeMin操作
    • 对于最小堆来说,Min就是根的位置的元素
    • 维持该堆的完全性,能替换根的合法元素只有一个就是最末一片叶子上存储的元素。
    • 删除之后进行排序(过程名叫筛选)
  • findMin操作:
    • 最小堆中的最小元素存储在根中,所以只需要返回存储在根中的元素。

使用堆:优先级队列

  • 两个规则:
    • 具有更高优先级的项排在前面。(不是FIFO)
    • 具有相同优先级的项按先进先出的规则排列。(FIFO)
  • 解决方案:
    • 使用队列列表
    • 使用最小堆。
//要先解决对相同优先级的进行先进先出的排序 
//创建一个PriorityQueueNode对象,存储将被放置在队列中的元素,该元素的优先级,以及元素放进队列的顺序
public PrioritizedObject(T element, int priority)
  {
this.element = element;//元素
this.priority = priority;//优先级
arrivalOrder = nextOrder;//放入队列的顺序
nextOrder++;
  }
  //再解决优先级相同时的比较
  //为PriorityQueueNode类定义一个CompareTo方法,来完成优先级相同时的比较
  public int compareTo(PrioritizedObject obj)
  {
int result;

if (priority > obj.getPriority())
    result = 1;
else if (priority < obj.getPriority())
    result = -1;
else if (arrivalOrder > obj.getArrivalOrder())
    result = 1;
else
    result = -1;

return result;
  }

20172324 2018-2019-1 《程序设计与数据结构》第八周学习总结

标签:排序   记录   obj   存在   public   附加   教材   说明   style   

原文地址:https://www.cnblogs.com/amberR/p/9940967.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!