【问题标题】:Algorithm to find the 100 longest slopes on earth that are steeper than 30 degrees throughout?找到地球上 100 个最长的坡度大于 30 度的斜坡的算法?
【发布时间】:2019-02-05 03:05:06
【问题描述】:

这个问题更具概念性,因为我目前没有任何代码可以显示。但是,我想知道是否可以帮助我编写这样的代码,而不需要花费数年时间来计算程序。

基本上,想象一下翼装跳伞运动员需要至少 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/

我的解决方案会奏效吗?计算是否可行?对其他解决方案的想法?

【问题讨论】:

    标签: algorithm google-maps maps gis


    【解决方案1】:

    按高程对点进行排序。

    为每个点的最长路径创建一个数组,并用零初始化它——这就是开始该点的路径。

    按高程降序处理点。对于每个点,查找到它的最长路径的长度,并使用它来调整到其较低邻居的最长路径。

    当您处理它时,到每个点的最长路径将是正确的,因为它只能取决于已经处理过的更高海拔点。

    记住您看到的最大数字,这将是最长路径的长度。如果你记得它在哪里,那么你可以通过向后工作来重建路径,反复寻找到它的路径最长的更高邻居。

    总时间为 O(N log N),以初始排序为主。

    【讨论】:

    • 仍在尝试了解您的解决方案。这些路径是否会遵循点之间至少有 3-1 滑翔角的限制?该检查在哪里发挥作用?
    • 是的。 “调整到其较低邻居的最长路径”意味着您查看相邻点,找到足够低的点(3-1 滑翔角),然后查看通过当前点到它们的路径是否比最长的已记录的点的路径。
    • 好的,我的近 20 亿个点按海拔排序。 “为每个点的最长路径制作一个数组”是什么意思?这是否意味着每个点对象都有自己的数组来存储它与其他点的距离?看起来像一个 n^2 解决方案?
    • 不,这必须意味着您要将一个数字与每个点相关联,该数字最终将成为到该点的最长路径的长度。一组 20 亿个数字。这可能对你的记忆来说太大了,所以你可能不得不将世界划分为多个区域……但这是一个正交的考虑。
    • 我们如何知道点是否相邻?您是否使用我建议的图表?老实说,我在这里把自己弄糊涂了哈哈抱歉。基本上我知道该数组将代表我们在地图上可以找到的最长路径。所以这可能看起来像 [100,104,109,110],其中这些数字是点 ID。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多