簡體   English   中英

“作為小偷偷走最少數量的物品”問題

[英]'Steal minimum number of items as a thief' problem

我的一位教授問過這個問題;

Imagine a thief entering a house. In the house, there are infinitely many items
that can have only one of three different weights: 1 kg, 3 kgs, and 5 kgs. All of the items are 
discrete. The thief has a bag capacity of n kgs and strangely, he wants to steal the “smallest 
number of items”.

他希望我們: Show that the greedy choice of taking the largest weight items into the bag first fails to lead to an optimal solution 但我聲稱貪婪並不是失敗。 在任何情況下,攜帶多達 5 公斤的物品都會導致物品數量最少,這是最佳的。 他錯了嗎? 我認為貪心是最優的。 有貪心失敗的情況嗎?

順便說一句,我的解決方案:

public int stealRecursive(int bagCapacity) {
        return stealRecursive(bagCapacity, 0);
    }

private int stealRecursive(int bagCapacity, int numberOfItemsStolen) {

    boolean canSteal5kg = bagCapacity - 5 >= 0;
    boolean canSteal3kg = bagCapacity - 3 >= 0;
    boolean canSteal1kg = bagCapacity - 1 >= 0;

    if (canSteal5kg) {
        return stealRecursive(bagCapacity - 5, numberOfItemsStolen + 1);
    }

    if (canSteal3kg) {
        return stealRecursive(bagCapacity - 3, numberOfItemsStolen + 1);
    }

    if (canSteal1kg) {
        return stealRecursive(bagCapacity - 1, numberOfItemsStolen + 1);
    }

    return numberOfItemsStolen;
}

你們中的一些人說放代碼並沒有指向任何地方,你是對的,我只是把它放出來展示我的努力和思維方式。 因為每當我提出問題而不輸入代碼時,我都會被警告先展示我的努力,因為這不是家庭作業網站。 這就是為什么我把我的代碼。 抱歉混淆。

首先,假設你已經“拿走了”盡可能多的 5k 件物品,所以你最終得到

m = capacity mod 5

要偷的物品,你已經偷了 5n 公斤。

案例

米==0

5n

在這種情況下,你有 n 件物品,如果你偷了 1k 或 3k 件物品,那么情況會更糟(除了 n = 0,在這種情況下,無論你偷 0 件 5 公斤的物品,0 件物品都沒有關系3 公斤或 0 件 1 公斤)

米 == 1

5n + 1

在這種情況下,你偷了 n 件 5 公斤的物品,你還偷了一件 1 公斤的物品。

在capacity=6的情況下,可以偷5+1公斤或者3+3公斤,結果是一樣的,但是n越大,貪心法的優勢越大。

米 == 2

我們有 5n + 1 + 1

在 capacity = 7 的情況下,我們有 5 + 1 + 1 vs 3 + 3 + 1,但一般來說,貪婪在這里也更好。

米 == 3

5n + 3

這比 5n + 1 + 1 + 1 好得多

米==4

5n + 3 + 1

在 9 的情況下,我們有 5 + 3 + 1 vs 3 + 3 + 3,但一般來說,貪心更好

結論

一般來說,貪婪更好,但在某些情況下會出現平局。 原因是有無數的物品可以被盜。 如果分別有 5 公斤、3 公斤和 1 公斤的有限物品,那么我們可以想象這樣的場景

5k 項:1 3k 項:3 1k 項:0

容量:9

現在,如果你拿走 5k 物品,那么你最終會得到 8 的戰利品,而不是 9 的戰利品。但是我們有無限的 5k、3k 和 1k 物品,所以這不是真實的場景。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM