【发布时间】:2019-07-22 10:30:33
【问题描述】:
假设我有一个这样的对象:
let objs = { obj1: [ 0, 10 ], obj2: [ 3, 9 ], obj3: [ 5, 12, 14 ] }
每个obj有多个距离点,但只能选择一个与其他obj的距离点结合。
我可以根据上面的距离点以 12 种方式组合三个对象。
比如可以变成[0,3,5]; 在这种情况下,三个对象之间的总距离将是 5 - 0,即 5;
或者可以变成[10, 9, 5],距离为10 - 5 = 5;
组合也可以是[0, 3, 12],距离为12 - 0 = 12;
我打算实现的是找到最短的组合,在这种情况下应该是[10,9,12];距离为12-9 =3;
所以我想到了一个一个的组合;我可以做嵌套循环来做到这一点,但它会非常低效。 我可以用来实现这一目标的最有效方法是什么?
【问题讨论】:
-
两件小事:“最短”在这里不清楚(最短的运行时间?/最短的代码?/...)另外 - 你知道存在 O(n) 方法吗?如果没有,则可能没有,这将是一个无法实现的约束。
-
@schnaader,我已就您的问题对我的帖子进行了修改。如果您有问题,请告诉我:)
-
总是只有三个对象吗?你的对象平均有多少分?哪个数字可以变得更大?
-
@Bergi,对,所以对象的数量没有限制,每个对象的点数也可以是任意的。但是让我们假设这些数字现在是固定的。
-
解决方案不是:“foreach 框选择最大的一个,然后遍历其余的框,找到最低的一个,这比最初选择的要大;如果没有更大的,则忽略”,因此 - 算法会: 1. 10, 9, 退出; 2. 9, 10, 12 - 找到,3. 14, 10,退出。可能需要双向查看(即选择最低的,然后通过休息找到最大的)
标签: javascript algorithm