首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找最优项目集

查找最优项目集
EN

Stack Overflow用户
提问于 2018-06-11 02:42:26
回答 2查看 146关注 0票数 2

请帮助解决以下编码任务(不需要确切的代码,只需要一个如何解决问题的提示)。

你有一辆卡车,你需要用这辆卡车运送货物。每件货物都有重量(以公斤为单位)、将货物装入卡车所需的时间(以分钟为单位)和价值。每件货物只能装在卡车上一次。有一个可用商品的示例(ID、重量、时间、价值)

代码语言:javascript
复制
0,82,10,300
1,99,22,400
2,2,34,650
3,22,5,92
4,33,31,13
5,99,49,59

诸若此类。这辆卡车的最大载重是1000公斤。你只有60分钟的时间把货物装上卡车,你需要装上最大值的东西。不计算货物的空间。你需要找到应该装到卡车上的货物的ID。

我应该使用什么方法?

EN

回答 2

Stack Overflow用户

发布于 2018-06-11 23:34:43

警告:在您继续阅读之前,我不能百分之百确定这将始终返回正确的结果。但至少在我运行的3个测试中,它似乎工作正常。这更接近于最优结果,而不是可反驳的实际算法。

我将我的数据存储在excel中,因为我发现显示我正在处理的数据/步骤是最容易的,也因为excel已经有一些内置的函数,如AVERAGERANK,所以万岁,为我编写的代码更少!(一般来说,excel可以很好地完成这类任务)

  1. 我首先开始使用您的原始data range

然后我们计算Worth / Time & Worth / Weight系数。

  • 之后,我们计算正在运输的东西的“可能性”,这是计算系数^

之前的两个系数的AVERAGE

  1. 之后,我们在这3个类别中RANK每一项。其中1是最高排名(列中的最高值),6是最低排名(列中的最低值)-这相当于编程中的排序算法,例如,如果您没有rank excel函数,则可以使用quicksort()

  1. 我们对我们做过的所有个人排名再做一次AVERAGE (所以时间排名,权重排名和似然排名的平均值)
  2. 我们RANK (或者在编程术语中是quicksort())我们最后一次创建的总平均值

我们可以从实际的算法开始...我们将排序的项目列表array.push()到一个数组中(根据他们的总排名从最佳(1)到最差(6)进行索引。

  • 我们遍历array.length -将类似于for (i=0; i <= array.length; i++)

  • 我们将单个排名的项目添加到我们的列表中。我们有两个IF语句,在这两个语句中,我们循环(跳过项目)如果我们选择exceed 100kg OR exceeds 60min

  • if it's Continue ( if条件不触发),将项目添加到

  • 循环的已保存项目堆栈中(直到我们循环遍历数组中的所有项目)。

现在,我明白了。这是很多步骤,当你像这样读它的时候,它听起来真的很混乱。在这里它是可视化的,其中标记为红色的项是触发if条件的地方。我觉得它对可视化有很大的帮助。

因此,使用我们的原始数据表:

我们一步一步地做以下工作

我测试的其他数据范围:

可能还有其他更简单的方法来实现这一点,但至少我想不到一个,这似乎是有效的。希望这对你有用!

票数 0
EN

Stack Overflow用户

发布于 2018-06-11 02:48:12

考虑到您想要将最大的价值装载到卡车中,我将根据它们的( while /( time * weigth ))因子对向量中的项目进行排序,并根据上面提到的因子从向量的顶部挑选元素,同时还试图在给定的时间内满足卡车的最大容量。

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

https://stackoverflow.com/questions/50786953

复制
相关文章

相似问题

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