普林斯顿算法课第五周作业_KdTree
作业地址:http://coursera.cs.princeton.edu/algs4/assignments/kdtree.html
作业难点:
1、如何构建KdTree,使用什么样的数据结构?
根据作业提示:
private static class KdNode {
private Point2D point;
private boolean direction;
private RectHV rect;
private KdNode lb, rt;
KdNode(Point2D p, boolean drct) {
if (p == null)
throw new NullPointerException();
direction = drct;
point = p;
rect = null;
lb = null;
rt = null;
}
}
2、draw()怎么实现感觉不会觉得很别扭?
建一个迭代器可以遍历整个KdTee,这里使用前序遍历。
private Iterable<KdNode> kdnodes()
{
Queue<KdNode> kNodes = new Queue<KdNode>();
preorder(kdt, kNodes);
return kNodes;
}
private void preorder(KdNode root, Queue<KdNode> q) {
if (root == null) return;
q.enqueue(root);
preorder(root.lb, q);
preorder(root.rt, q);
}
3、如何回溯最优解,是否需要parent指针?
递归深入,无需parent指针。
容易扣分点:
1、insert()重复建Rect;
2、nearest()空指针溢出。
部分代码参考:
nearest():
public Point2D nearest(Point2D p)
{
if (p == null)
throw new NullPointerException();
if (kdt != null)
return nearPoint(kdt, p, kdt).point;
return null;
}
private KdNode nearPoint(KdNode kd, Point2D p, KdNode q) {
if (kd == null) return q;
double nrDist = p.distanceSquaredTo(q.point);
double kdDist = p.distanceSquaredTo(kd.point);
if (nrDist >= kdDist ||
nrDist >= kd.rect.distanceSquaredTo(p))
{
if (nrDist > kdDist) q = kd;
if (kd.direction) {
double cmpX = p.x() - kd.point.x();
if (cmpX < 0.0) {
if (kd.lb != null) q = nearPoint(kd.lb, p, q);
if (kd.rt != null) q = nearPoint(kd.rt, p, q);
} else {
if (kd.rt != null) q = nearPoint(kd.rt, p, q);
if (kd.lb != null) q = nearPoint(kd.lb, p, q);
}
} else {
double cmpY = p.y() - kd.point.y();
if (cmpY < 0.0) {
if (kd.lb != null) q = nearPoint(kd.lb, p, q);
if (kd.rt != null) q = nearPoint(kd.rt, p, q);
} else {
if (kd.rt != null) q = nearPoint(kd.rt, p, q);
if (kd.lb != null) q = nearPoint(kd.lb, p, q);
}
}
}
return q;
}
普林斯顿算法课第五周作业_KdTree的更多相关文章
- coursera普林斯顿算法课part1里Programming Assignment 2最后的extra challenge
先附上challenge要求: 博主最近在刷coursera普林斯顿大学算法课part1部分的作业,Programming Assignment2最后的这个extra challenge当初想了一段时 ...
- 2018-2019-1 20189221《Linux内核原理与分析》第五周作业
2018-2019-1 20189221<Linux内核原理与分析>第五周作业 实验四 实验过程 当用户态进程调用一个系统调用时,cpu切换到内核态并开始执行一个内核函数. 在Linux中 ...
- 2017-2018-1 JaWorld 第四、五周作业
2017-2018-1 JaWorld 第四.五周作业 两周工作内容 小组讨论并确定最终的app雏形 合作完成需求说明书 工作分工 成员 分工 比例 陈是奇 1.引言 8% 马平川 2.1-2.5 产 ...
- 2017-2018-1 JAVA实验站 第四、五周作业
2017-2018-1 JAVA实验站 第四.五周作业 JAVA实验站小组成员 学号 名字 职务 20162318 张泰毓 组长 20162303 石亚鑫 组员 20162304 张浩林 组员 201 ...
- 2017-2018-1 20179205《Linux内核原理与设计》第五周作业
<Linux内核原理与设计>第五周作业 视频学习及操作分析 一.用户态.内核态和中断 内核态在CPU执行中对应高执行级别,执行级别为0级,具有特权指令,可以访问任意物理地址:用户态执行级别 ...
- 第五周作业:markdown语法小总结
第五周作业 markdown语法总结 早就想写这么一个文章了,关于markdown的语法,因为最近使用的比较多,所以特地总结一下 一,标题 首先要介绍的就是标题, 标题一共有六级 # h1 ## h2 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第五周作业
<Linux内核原理与分析>第五周作业 一.上周问题总结: 虚拟机将c文件汇编成汇编文件时忘记添加include<stdio.h> gdb跟踪汇编过程不熟练 二.本周学习内容: ...
- Java实现 蓝桥杯 算法训练 第五次作业:字符串排序
试题 算法训练 第五次作业:字符串排序 问题描述 输入一个小写字符串,按从小到大的顺序输出. 输入格式 bcaed 输出格式 abcde 顶格输出,中间没有空格 样例输入 一个满足题目要求的输入范例. ...
- 2019春第五周作业Compile Summarize
这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 在这里 我在这个课程的目标是 能够精通关于数组内部运作原理 这个作业在哪个具体方面帮助我实现目标 如何输出一行的连续字符 参考文献与网址 ...
随机推荐
- 第4月第2天 nsinvocation崩溃 mvc videotrack
1. __unsafe_unretained id result = nil; [invocation getReturnValue:&result]; return result; http ...
- 关于JavaScript设计模式(一)
以后都在简书写文章了,所以这个转载我在简书中写的.地址这里 http://www.jianshu.com/p/c7b3c2c148c5
- Thrift的TBinaryProtocol二进制协议分析
先上张图,说明一下thrift的二进制协议是什么东东. 报文格式编码: bool类型: 一个字节的类型,两个字节的字段编号,一个字节的值(true:1,false:0). Byte类型: 一个字节的类 ...
- Python爬虫利器三之Xpath语法与lxml库的用法
前面我们介绍了 BeautifulSoup 的用法,这个已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxml,使用的是 Xpath 语法,同样是效率比较高的解析方法.如果大家对 Beau ...
- 如何灵活运用Linux 进程资源监控和进程限制
导读 每个 Linux 系统管理员都应该知道如何验证硬件.资源和主要进程的完整性和可用性.另外,基于每个用户设置资源限制也是其中一项必备技能. 在这篇文章中,我们会介绍一些能够确保系统硬件和软件正常工 ...
- excel使用技巧
1,如何得到开口向下的大括号 1,插入左右方向的大括号. 2,点击绘制的大括号,旋转出现绿点,旋转90度,即可. 问题2:Excel如何截图 1,选中截图内容,选择复制->复制为图片->( ...
- 使用zxing生成二维码
public static Bitmap Create2DCode(String str) throws WriterException { // 生成二维矩阵,编码时 ...
- iOS版本更新在APP中直接访问AppStore
1.导入框架 #import <StoreKit/StoreKit.h> 2.添加代理 <SKStoreProductViewControllerDelegate> 3.设置跳 ...
- js数组的sort排序详解
<body> <div> sort()对数组排序,不开辟新的内存,对原有数组元素进行调换 </div> <div id="showBox" ...
- Yii 1开发日记 -- 搜索功能及Checkbox的实现
用yii 1实现后台的搜索功能,效果如下图: 1.模型中: public function search() { $criteria = new CDbCriteria; //独立高级搜索 if(is ...