首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最优最大行程问题

最优最大行程问题
EN

Stack Overflow用户
提问于 2019-09-11 14:19:23
回答 1查看 1.6K关注 0票数 0

给定最大的旅行距离(向前和向后的道路),返回使用最大旅行距离的路线,如果多条相同的路线使用最大的旅行距离,则返回多条路线。

示例1

  • 前进路线:[[1,3000],[2,5000],[3,4000],[4,10000],[5,8000]]
  • 后向路由:[[1,1000],[2,3000],[3,4000]]
  • 最大行程11000

结果必须是:[4,1][5,2],因为总行程是小于或等于最大距离的11000

示例2

  • 前进路线:[[1,3000],[2,5000],[3,4000],[4,10000]]
  • 后向路由:[[1,2000],[2,3000],[3,4000]]
  • 最大行程11000

结果必须是:[2,3],因为总行程是小于或等于最大距离的9000

我能够在O(forLength * backLength)中解决这个问题,如下所示:

代码语言:javascript
复制
static void Main(string[] args) {
    int[][] f = new int[5][];
    int[][] b = new int[3][];

    f[0] = new int[] { 1, 3000 };
    f[1] = new int[] { 2, 5000 };
    f[2] = new int[] { 3, 4000 };
    f[3] = new int[] { 4, 10000 };
    f[4] = new int[] { 5, 8000 };

    b[0] = new int[] { 1, 1000 };
    b[1] = new int[] { 2, 3000 };
    b[2] = new int[] { 3, 4000 };

    var result = sol(f, b, 11000);
}

public static List<List<int>> sol(int[][] f, int[][] b,int max) {
    List<List<int>> li = new List<List<int>>();
    int m = 0;
    for (int i = 0; i < f.Length; i++) {
        for (int j = 0; j < b.Length; j++) {
            if (f[i][1] + b[j][1] <= max) {
                li.Add(new List<int>() { f[i][0], b[j][0], f[i][1] + b[j][1] });
                if (m < f[i][1] + b[j][1]) {
                    m = f[i][1] + b[j][1];
                }
            }
        }
    }

    return li.Where(i => i[2] == m).ToList();
}

有人能帮我在时间复杂度方面提高效率吗?

EN

回答 1

Stack Overflow用户

发布于 2019-09-11 14:44:57

也许我可以给你一个解决方案草案:

  • 让我们将“前进”列表命名为fwList,命名为“向后”列表bwList。每个元素按顺序包含一个和一个
  • 在元素的部分(O(N.ln(N))时间复杂性)上使用合并排序或堆排序按升序对两个列表进行排序。
  • 对于bwList的每个元素(我们称之为bwElem),在fwList中查找索引(我们称之为ID),其中和变得太长(bwElem + fwList[ID] > 11000)。那么[bwElem.key, fwList[ID - 1].key]是解决方案的一部分。
  • bwList的每个元素的结果连在一起应该会列出您的列表,如果在我的脑海中一切都很清楚的话,您应该有一个O(bwLength * (fwLength)^a)时间复杂度,其中a < 1 (我甚至押注于O(bwLength * ln(fwLength)))。

我认为在此基础上可以对算法进行优化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57891229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档