Algorithm to Compute the Shortest Distance between Points on Two
- 时间:2020-09-27 14:36:16
- 分类:网络文摘
- 阅读:105 次
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) —
推荐阅读:中医食疗:滋阴固肾的6款经典补粥 美味鸭肉的保健功效与养生食用方法 让枸杞中的营养成分吸收更好的吃法 多吃葱蒜少吃腌制食品防止胃病癌变 能够给肠道进行清洁排毒的常见食物 饮水养生:喝蜂蜜水的两个最佳时间 六类食物可以保护女性乳房不受伤 这两类人最好别吃枸杞 会产生副作用 夏季美味之毛豆的营养价值和食疗功效 食用小龙虾时需要注意的问题
- 评论列表
-
- 添加评论