黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java背包問題實現

Java背包問題實現

更新時間:2022-04-25 10:36:38 來源:動力節點 瀏覽1292次

1. 簡介

背包問題是一個有很多應用的組合優化問題。在本Java教程中,動力節點小編將用 Java 解決這個問題。

2. 背包問題

在背包問題中,我們有一組物品。每個項目都有一個重量和一個價值:

我們想把這些物品裝進背包。但是,它有一個重量限制:

因此,我們需要選擇總重量不超過重量限制的物品,并且它們的總價值盡可能高。 例如,上面例子的最佳解決方案是選擇 5kg 的物品和 6kg 的物品,在重量限制內,最大值為 40 美元。

背包問題有幾種變化。在本教程中,我們將關注0-1 背包問題。在 0-1 背包問題中,每個項目要么被選中,要么被拋在后面。我們不能拿走一個項目的部分金額。此外,我們不能多次拿走一個項目。

3. 數學定義

現在讓我們用數學符號形式化 0-1 背包問題。給定一組n 個項目和權重限制W,我們可以將優化問題定義為:

這個問題是 NP 難的。因此,目前還沒有多項式時間算法來解決它。然而,有一個偽多項式時間算法使用動態規劃來解決這個問題。

4. 遞歸解決方案

我們可以使用遞歸公式來解決這個問題:

在這個公式中,M(n,w)是重量限制為w的n 個項目的最優解。它是以下兩個值中的最大值:

重量限制為w的(n-1)個項目的最優解(不包括第n個項目)

第n項的值加上(n-1)項的最優解和w減去第n項(包括第n項)的權重

如果第n個項目的重量超過當前重量限制,我們不包括它。因此,屬于上述兩種情況的第一類。

我們可以在 Java 中實現這個遞歸公式:

int knapsackRec(int[] w, int[] v, int n, int W) {
    if (n <= 0) { 
        return 0; 
    } else if (w[n - 1] > W) {
        return knapsackRec(w, v, n - 1, W);
    } else {
        return Math.max(knapsackRec(w, v, n - 1, W), v[n - 1] 
          + knapsackRec(w, v, n - 1, W - w[n - 1]));
    }
}

在每個遞歸步驟中,我們需要評估兩個次優解決方案。因此,此遞歸解的運行時間為O(2 n )。

5. 動態規劃方案

動態規劃是一種將其他呈指數級困難的規劃問題線性化的策略。這個想法是存儲子問題的結果,以便我們以后不必重新計算它們。

我們也可以用動態規劃解決0-1背包問題。為了使用動態規劃,我們首先創建一個維度從 0 到n和 0 到W的二維表。然后,我們使用自下而上的方法,用這張表計算最優解:

int knapsackDP(int[] w, int[] v, int n, int W) {
    if (n <= 0 || W <= 0) {
        return 0;
    }
    int[][] m = new int[n + 1][W + 1];
    for (int j = 0; j <= W; j++) {
        m[0][j] = 0;
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= W; j++) { 
            if (w[i - 1] > j) {
                m[i][j] = m[i - 1][j];
            } else {
                m[i][j] = Math.max(
                  m[i - 1][j], 
                  m[i - 1][j - w[i - 1]] + v[i - 1]);
            }
        }
    }
    return m[n][W];
}

在這個解決方案中,我們對項目編號n和重量限制W有一個嵌套循環。因此,它的運行時間是O(nW)。

6. 結論

在本教程中,我們展示了 0-1 背包問題的數學定義。然后我們通過 Java 實現為這個問題提供了一個遞歸算法解決方案。最后,我們使用動態規劃來解決這個問題。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 日韩精品首页 | 高清色黄毛片一级毛片 | 成人免费一区二区三区在线观看 | 欧美成人免费一区在线播放 | 亚洲成人午夜影院 | 午夜视频在线免费播放 | 亚洲一成人毛片 | 欧美a一片xxxx片 | 黄色网址免费在线观看 | 亚洲欧美日韩综合二区三区 | 日本一道dvd在线中文字幕 | 亚洲国产二区三区久久 | 亚洲伦理精品久久 | 久久久午夜影院 | 日韩欧美国产中文字幕 | 亚洲欧美综合 | 天天色天天操天天 | 91导航在线| 日韩午夜在线视频不卡片 | 亚洲午夜免费视频 | 免费成年网 | 波多野结衣gvg-238 | 亚洲男人天堂网站 | 免费又黄又猛又爽的大片 | 免费h网站在线观看 | 成人免费体验区福利云点播 | 国产成人黄色 | 日韩三级观看 | 亚洲欧美第一页 | 国产碰碰 | 天天摸日日碰天天看免费 | 欧美日韩精品一区二区三区视频 | 成人欧美精品大91在线 | 殴美黄色片 | 日韩专区亚洲精品欧美专区 | 日本亚洲国产精品久久 | 亚洲色图 欧美 | 国产一区中文字幕在线观看 | 国产精品天天在线 | 亚洲一区 中文字幕 久久 | 黄色网址在线看 |