Algorithm to Compute the Shortest Distance between Points on Two
- 时间:2020-09-27 14:36:16
- 分类:网络文摘
- 阅读:124 次
Let U = [(xu0, yu0), (xu1, yu1), …, (xun, yun)] represent a increasing series of points; xu0 < xu1 && yu0 < yu1, etc.
Let D = [(xd0, yd0), (xd1, yd1), …, (xdn, ydn)] represent a decreasing series of points; xd0 < xd1 && yd0 > yd1, etc.
U and D are lists/vectors/arrays of a custom “Point” structure; define your “Point” structure.
Write a function that returns the distance between the one point in series U and the one point in series D that are closest to each other in 2D space.
Try to find a solution that minimizes the TIME complexity.
What is the time complexity of your solution? Use big-O notation.
Bruteforce with O(UD) complexity
The following C++ code implements a bruteforce algorithm that runs at O(UD) time complexity – check every pair of points between two lines.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | struct Point { double x; double y; }; inline double sqr(double x) { return x * x; } double distance(const Point &p1, const Point &p2) { return sqrt(sqr(p1.x - p2.x) + sqr(p1.y - p2.y)); } // O(UD) where U and D are lengths of the vector respectively. double shortestDistance(const vector<Point> &U, const vector<Point> &D) { auto dis = DOUBLE_MAX; for (const auto &p1: U) { for (const auto &p2: D) { auto d = distance(p1, p2); dis = min(d, dis); } } return dis; } |
struct Point {
double x;
double y;
};
inline double sqr(double x) {
return x * x;
}
double distance(const Point &p1, const Point &p2) {
return sqrt(sqr(p1.x - p2.x) + sqr(p1.y - p2.y));
}
// O(UD) where U and D are lengths of the vector respectively.
double shortestDistance(const vector<Point> &U, const vector<Point> &D) {
auto dis = DOUBLE_MAX;
for (const auto &p1: U) {
for (const auto &p2: D) {
auto d = distance(p1, p2);
dis = min(d, dis);
}
}
return dis;
}Do you have a better algorithm that run less time complexity? Let us know by commenting below.
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:奥数题:在离山顶600m处两人相遇 数学题:至少要到什么时候才能再次同时发车 数学题:一个筐里有桃子若干个 数学题:把一根5米长的长方体沿横截面截成3段 细微之处不细微作文 关于节日的作文400字 第一次做蛋炒饭作文100字 赏春作文初中 安全演习心得 属于我一个人的约定
- 评论列表
-
- 添加评论