week5互评作业java,算法学习week5

这篇博客记录了Coursera算法课程第五周的内容,主要介绍了平衡二叉树的概念,包括2-3搜索树和红黑树。通过2-3树理解红黑树的插入操作,以及红黑树保持平衡的特性。作者提到,红黑树在插入时的旋转和颜色调整与2-3树类似,但细节复杂。此外,作业涉及使用2D树解决最近点对问题,虽然实现上存在问题,但整体加深了对这些数据结构的理解。
摘要由CSDN通过智能技术生成

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.

29c4b3ca02f7

image.png

平衡有序的维护

插入 需要生成新的2-node,找到插入节点的位置,是单key的子节点位置,为了保持平衡性,将父节点变成双key节点

29c4b3ca02f7

image.png

插入 插入到原2-key,3-node节点 生成临时的3-key,4-node节点,然后拆分成1-key 2-node

29c4b3ca02f7

image.png

在上面的变化情形下,可能会遇到上一层是存在父节点的,可能是1-key / 2-key,这时要继续在新的父节点上面两种情形类似的变换处理,如此递归至到仍旧保持2-3node tree的平衡有序性

下面是书中可能情形的实例

29c4b3ca02f7

image.png

29c4b3ca02f7

image.png

29c4b3ca02f7

image.png

2. Red-Black Tree 红黑树

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

29c4b3ca02f7

image.png

29c4b3ca02f7

image.png

29c4b3ca02f7

image.png

插入操作时的左旋右旋变换以及节点颜色反转的情景类似于2-3 Tree插入时的变换情景,并保持红黑树的红链接始终在左侧(红色子节点在左侧,且红色节点的子节点都是黑色节点)

个人也没有很熟悉透彻理解,细节相对复杂,说明暂略,建议看原书章节或者参考其他人博客讲解

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

29c4b3ca02f7

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%]

29c4b3ca02f7

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值