给定具有最大é‡é‡çš„电梯和具有x_ié‡é‡çš„n个人,找出所需的最å°ä¹˜å次数

时间:2017-08-08 16:37:21

标签: algorithm dynamic-programming backtracking knapsack-problem coin-change

input:
max_weight = 550
n = 4
x_i = [120, 175, 250, 150]

output:
2  
// [[250, 175, 120], [150]]

我的åˆæ­¥å°è±¡æ˜¯ï¼Œè¿™çœ‹èµ·æ¥éžå¸¸ç±»ä¼¼äºŽåŠ¨æ€ç¼–程硬å¸æ›´æ¢/背包问题,但它ä¸æ˜¯ç¡¬å¸æ›´æ¢ï¼ˆè¿™å°†è¦æ±‚最少数é‡çš„é‡é‡æ¥åˆ¶ä½œç²¾ç¡®æ•°é‡ï¼‰ï¼Œè€Œä¸”它ä¸æ˜¯èƒŒåŒ…(é‡é‡æ²¡æœ‰å€¼ï¼Œå°±åƒæˆ‘å¯ä»¥æœ‰è¶…过1个背包)。

此问题是å¦æœ‰é€šç”¨å称/解决方案?

3 个答案:

答案 0 :(得分:2)

这实际上是(1D) Bin Packing problem:

  

在装箱问题中,必须将ä¸åŒå·çš„对象打包到有é™æ•°é‡çš„容器或容器中,æ¯ä¸ªå®¹å™¨ V 最å°åŒ–使用的垃圾箱数é‡çš„æ–¹å¼ã€‚在计算å¤æ‚性ç†è®ºä¸­ï¼Œå®ƒæ˜¯ä¸€ä¸ªç»„åˆçš„NP难问题。

在这里,人们将物体映射到游ä¹è®¾æ–½ä¸Šçš„ç®±å­ä¸Šã€‚åƒåžƒåœ¾ç®±åŒ…装问题一样,我们希望最大é™åº¦åœ°å‡å°‘“使用â€çš„游ä¹è®¾æ–½æ•°é‡ï¼Œå¹¶ä¸”æ¯ä¸ªäººéƒ½å æ®ä¸€å®šçš„“音é‡â€ï¼ˆè¯¥äººçš„体é‡ï¼‰ã€‚

垃圾箱包装问题 - 正如文章中所述 - NP-hard。我们å¯ä»¥ä½¿ç”¨åŠ¨æ€ç¼–程(但它ä»ç„¶å…·æœ‰ - 最å情况 - 指数时间)。

Richard E. Korf 撰写的论文A New Algorithm for Optimal Bin Packing讨论了一ç§ç²¾ç¡®è§£å†³æ­¤é—®é¢˜çš„算法。它首先使用å¯å‘å¼æ–¹æ³•å¹¶è®¡ç®—下é™ï¼Œç„¶åŽä½¿ç”¨åˆ†æ”¯å’Œç»‘定迭代地推导出比å¯å‘å¼è§£å†³æ–¹æ¡ˆæ›´å¥½çš„解决方案,直到达到下é™ï¼Œæˆ–者ä¸å†èƒ½æ‰¾åˆ°è§£å†³æ–¹æ¡ˆã€‚

答案 1 :(得分:0)

如果我错了(ä¸æ˜¯æœ€æœ‰æ•ˆçš„),请纠正我,但我认为您å¯ä»¥å°†æ‰€æœ‰æƒé‡æ”¾å…¥max heap,然åŽä½¿ç”¨greedy algorithmæ¥æŒ‘选集åˆã€‚< / p>

答案 2 :(得分:0)

你走在正确的轨é“上。通过改进的硬å¸å˜åŒ–算法解决了这个问题:您ä¸éœ€è¦ç²¾ç¡®çš„解决方案,而是找到在ä¸è¶…过目标金é¢çš„情况下获得最高总é¢çš„算法。当然,如果您找到的差é¢å°äºŽä»»ä½•å‰©ä½™è®¾ç½®å…ƒç´ çš„解决方案,则åœæ­¢å¹¶æŠ¥å‘Šè¯¥è§£å†³æ–¹æ¡ˆã€‚

当您找到解决方案时,请删除“已使用â€çš„æƒé‡å¹¶è¿›è¡Œè¿­ä»£ï¼Œç›´åˆ°æ‚¨å°†å…¶å…¨éƒ¨åˆ†é…为止。迭代次数是您需è¦çš„电梯数é‡ã€‚

如果按é™åºå¯¹å…ƒç´ è¿›è¡ŒæŽ’åºï¼Œè¿™ä¼šè®©æ‚¨ä»Žå›žæº¯å¼€å§‹â€œè´ªå©ªâ€ã€‚我怀疑在很多情况下这是åˆç†æŽ¥è¿‘最优的,特别是如果你记ä½ç»“果,这样你就ä¸ä¼šåœ¨ä¸‹ä¸€æ¬¡è¿­ä»£ä¸­é‡å¤é”™è¯¯ã€‚

您å¯ä»¥å°è¯•ä¸€äº›ç—…æ€æ¡ˆä¾‹ï¼Œä¾‹å¦‚é™åˆ¶ä¸º100,以åŠæžç«¯æƒé‡ï¼Œä¾‹å¦‚

[93, 91, ..., 5, 4, 4]

“贪婪â€ç®—法首先达到93 + 5,但åŽæ¥è¾¾åˆ°91 + 4 + 4(更接近解决方案)。这就是备忘录派上用场的地方。

这会让你走å‘解决方案å—?