算法学习week5

Coursera算法part1课程学习记录和回顾。
第五周的课程介绍平衡二叉树,讲解了2-3搜索树,以及由其引入红黑树,和平衡二叉树的几何应用。
本周课程是算法I部分中最难的章节,建议多按照书中的2-3搜索树引入的过程,以及红黑树的引入过程来仔细理解。由2-3搜索树来引入红黑树,对红黑树的理解有极大帮助。

1. 2-3 Tree (2-3节点树)

  • 每一个节点可能包含1个key,对应2个子节点,或者2个key,对应3个子节点
    并且父子节点的键值保持相对有序(1个key,2个子节点时,左节点小于父节点,右节点大于父节点;2个key 3个子节点时,左节点小于父节点左key,右节点大于父节点右key,中间子节点在父节点两个key之间)
    Perfect balance. Every path from root to null link has same length.
    • 算法学习week5_第1张图片
      image.png
  • 平衡有序的维护
    • 插入 需要生成新的2-node,找到插入节点的位置,是单key的子节点位置,为了保持平衡性,将父节点变成双key节点
      算法学习week5_第2张图片
      image.png
    • 插入 插入到原2-key,3-node节点 生成临时的3-key,4-node节点,然后拆分成1-key 2-node
      算法学习week5_第3张图片
      image.png
    • 在上面的变化情形下,可能会遇到上一层是存在父节点的,可能是1-key / 2-key,这时要继续在新的父节点上面两种情形类似的变换处理,如此递归至到仍旧保持2-3node tree的平衡有序性
      下面是书中可能情形的实例


      算法学习week5_第4张图片
      image.png

      算法学习week5_第5张图片
      image.png

      算法学习week5_第6张图片
      image.png

2. Red-Black Tree 红黑树

在2-3 Tree的基础上,将2-key 3-node的父节点的两个key中间增加标记成红色的链接,其他node key之间的链接都标记成黑色,且红色链接始终在节点的左侧


算法学习week5_第7张图片
image.png
  • 算法学习week5_第8张图片
    image.png

    算法学习week5_第9张图片
    image.png

插入操作时的左旋右旋变换以及节点颜色反转的情景类似于2-3 Tree插入时的变换情景,并保持红黑树的红链接始终在左侧(红色子节点在左侧,且红色节点的子节点都是黑色节点)
个人也没有很熟悉透彻理解,细节相对复杂,说明暂略,建议看原书章节或者参考其他人博客讲解

这两种数据结构的优点是元素的增删改查的速度都非常快


算法学习week5_第10张图片
image.png

3. 本周的作业是从给定的一组点集合中,找出最近的点

要求用暴力解法和2d-Tree两种方式分别来解,2d-Tree是根据点坐标的x y值交替划线来分割二维平面,分割成小的矩形区域,判断点到矩形区域的距离来解。做的一般,花了很久的时间,实现还是有些问题存在。

Correctness:  31/35 tests passed
Memory:       16/16 tests passed
Timing:       34/42 tests passed

Aggregate score: 89.33%
[Compilation: 5%, API: 5%, SpotBugs: 0%, PMD: 0%, Checkstyle: 0%, Correctness: 60%, Memory: 10%, Timing: 20%]
  • 算法学习week5_第11张图片
    image.png

你可能感兴趣的:(算法学习week5)