这个问题更具概念性,因为到目前为止我没有任何代码可显示。但是,我想知道是否可以在不花费大量时间计算程序的情况下就如何进行类似的编码获得帮助。
基本上,想象一下机翼服的基础跳线至少需要倾斜30度才能将安全线飞到他的着陆点。我们如何才能找到他可以在地球上走过的最长的飞行路线?
|----
| ----
| ---- A slope with a 3-1 glide angle
100m | ----
| ----
|_________________________
300m
我们的星球表面积约为5.1亿平方公里。假设我们要每200m取一个数据点,即每平方公里25个数据点。显然,这里的n ^ 2解决方案还不够好。
以下是我对潜在解决方案的看法: 遍历所有(510 * 25)百万个可能的起点。将这些点以图形的形式连接到它们的相邻点邻居。由于我们现在有了一个互连点的网格作为图形,因此我们可以删除所有不满足30度斜率要求的边。接下来,我们使用一种算法在有向无环图中找到最长的路径。
https://www.geeksforgeeks.org/find-longest-path-directed-acyclic-graph/
我的解决方案可以工作吗?计算可行吗?对其他解决方案有何想法?
答案 0 :(得分:2)
按海拔高度对点进行排序。
为到达每个点的最长路径制作一个数组,并用零初始化-这是从该点开始的路径。
按高程降序处理点。对于每个点,查找到它的最长路径的长度,并使用该长度来调整到其下邻点的最长路径。
处理每个点的最长路径将是正确的,因为它只能取决于已经处理过的高海拔点。
记住您看到的最高数字,这将是最长路径的长度。如果您记得它在哪里,则可以通过向后工作来重建路径,反复查找路径最长的较高邻居。
总时间为O(N log N),由初始排序决定。