找到最佳的项目集

时间:2018-06-10 18:42:26

标签: algorithm

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

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

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。

我应该使用什么方法?

2 个答案:

答案 0 :(得分:0)

  

警告:在继续阅读之前,我并非100%确定这将永远返回   正确的结果。但至少在我试过的3次测试中它似乎有效   对。这更像是对最优结果的近似,而不是可以改变的实际算法。

我将数据存储在excel中,因为我发现它最容易显示我正在使用的数据/步骤,并且因为excel已经有一些内置函数,例如AVERAGE和{{1}所以欢呼,少给我编码! (通常,excel已经为这些任务做好了准备)

  1. 我首先开始使用原始数据范围
  2. enter image description here

    1. 然后我们计算RANK&系数Worth / Time

    2. 然后我们计算出来的东西的“可能性”,这是计算系数之前的两个Worth / Weight ^

      enter image description here

    3. 之后,我们AVERAGE这3个类别中的每个项目。其中1是最高等级(列中最高值),6是最低等级(列中最低值) - 这相当于编程中的排序算法,例如RANK是可以使用的,如果你没有排名优秀的功能,你可以使用。

      enter image description here

    4. 我们再做了quicksort()我们所做的所有个人排名(所以平均时间等级,重量等级和可能性排名)

    5. 我们AVERAGE(或编程术语RANK)我们上次创建的总平均值

      enter image description here

    6. 现在我们可以从实际算法开始... 我们quicksort()将已排序的项目列表放入一个数组中(按其总排名从最佳(1)到最糟糕的(6)。

    7. 我们在整个array.push()中进行迭代 - 看起来像array.length

    8. 我们将个别排名的项目添加到我们的列表中。我们有两个for (i=0; i <= array.length; i++)语句,如果IF

    9. 我们Continue循环(跳过项目)
    10. 如果没问题(if条件不会触发),请将我们的项目添加到一堆已保存的项目中

    11. 循环(直到我们遍历数组中的所有项目。)

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

      所以使用原始数据表:

      enter image description here

      我们一步一步地执行以下操作

      enter image description here

      我测试过的其他数据范围:

      enter image description here

      enter image description here

      enter image description here

      enter image description here

        

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

答案 1 :(得分:-1)

考虑到你想要将最大值加载到卡车中,我会根据它们(值/(时间*重量))因子来判断矢量中的项目,然后从矢量顶部选择元素,判断为上述因素,同时也试图在给定时间内使卡车达到最大容量。