美文网首页
Princeton Alogorithm COS226 Week

Princeton Alogorithm COS226 Week

作者: 西部小笼包 | 来源:发表于2019-09-28 20:02 被阅读0次

Overview

this lecture is the most interesting lecture in the part i, because it taught data structure and algorithm, many other place not cover.
in this lecture, we will learn 1d range search,


image.png

1d range search

in ordered symbol table, we need to add two more operation

  1. range search : find all keys between k1 and k2
  2. range count: find number of keys between k1 and k2.

in geometric interpretation, the problem is like keys are point on a line, we need to find/count points in a given 1d interval


image.png

if we use balanced binary search tree, we can use rank to solve the range count problem


image.png
image.png

added extra credit for this implementation in my github

line segment intersection

image.png
added extra credit for this implementation in my github

KD Tree

how about 2-d orthogonal range search?
now we need to extend ordered symbol-table to 2d keys
insert 2d key, search for 2d key, range search and range count

we can solve this problem by grid


image.png image.png

but when points are clustering, the problem will exists.


image.png

now we can use 2d tree to solve problem.


image.png
image.png
image.png

to find all points in a query axis-aligned rectangle

the basic plan is
check if point in node lies in given rectangle
if any in, then recursively search left/ bottom
if any in, recursively search right/ top

assuming tree is balanced, typical case to range search is R + logN, the worst case is R + SQRT(N)

nearest neighbor search in a 2d tree demo

check distance from point in node to query point
recursively search left/ bottom (if it could contain a closer point)
recursively search right/ top(if it could contain a closer point)
organize method so that it begins by searching for query point

image.png
poject cover this implementation

interval search tree

image.png

interval search tree is like a BST, but in each node we save an interval (lo, hi)
use left end point as BST key.
and we need store additional field which called max endpoint in subtree rooted at node.


image.png

insert

insert (lo, hi) into BST, using lo as the key
update max in each node on search path

search tree

to search for any one interval that intersect query interval
if interval in node intersects query interval, return it
else if left subtree is null, go right
else if max end point in left subtree is less than lo, go right
else go left


image.png

Case 1. if search goes right, then no intersection in left.

Case 2. if search goes left, then there is either an intersection in left subtree or no intersections in either.

image.png
added extra credit for this implementation in my github

Orthogonal rectangle intersection

image.png image.png

added extra credit for this implementation in my github

Project KD-TREE

image.png image.png

first implement kd-tree node, we use left, right pointer to is children and in node, will save it is vertical or horizontal, and save it is back rectangle
the root back rectangle is (0,0,1,1)

then we could implement insert, it just compare the node should be left subtree or right subtree, when compare we need diff vertical and horizontal use x or y to compare.

after build the kd-tree
we can implement the nearest and range

range

  1. add node.point in result if it is in query rectangle
  2. the diving line in kd-tree is intersect the query rectangle
  3. if yes, search both node
  4. if no, go the child which is closer to query rectangle

nearest

  1. if cur point is nearest than the curerent nearest ,update it.
  2. compare the node should be left subtree or right subtree
  3. search that tree
  4. check other tree when the target node distanceto the other node's background rectangle is smaller than the current min distance.

bonus

we can calculate recthv in recursive function of range search and nearest.
so we can discard recthv in node to save memory

course quiz and project : https://github.com/yixuaz/algorithm4-princeton-cos226

相关文章

网友评论

      本文标题:Princeton Alogorithm COS226 Week

      本文链接:https://www.haomeiwen.com/subject/erlwyctx.html