国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【趣學(xué)算法】Day3 貪心算法——背包問題

這篇具有很好參考價值的文章主要介紹了【趣學(xué)算法】Day3 貪心算法——背包問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

14天閱讀挑戰(zhàn)賽
努力是為了不平庸~
算法學(xué)習(xí)有些時候是枯燥的,這一次,讓我們先人一步,趣學(xué)算法!

【趣學(xué)算法】Day3 貪心算法——背包問題

???一名熱愛Java的大一學(xué)生,希望與各位大佬共同學(xué)習(xí)進(jìn)步??

??個人主頁:@周小末天天開心

各位大佬的點贊?? 收藏? 關(guān)注?,是本人學(xué)習(xí)的最大動力

感謝!

??該篇文章收錄專欄—趣學(xué)算法

目錄

題目描述

問題分析

算法設(shè)計?

完美圖解

算法詳解

(1)確定合適的數(shù)據(jù)結(jié)構(gòu)。

(2)對物體按單位重量價值進(jìn)行排序。

(3)使用貪心算法求解問題

算法分析


題目描述

????????有n種物品,每種物品只有一個,第i種物品的重量為 wi,價值為 vi,背包的容量為 w,物品可以分割。如何放置物品,使裝入背包的物品價值之和最大?

問題分析

(1)每次選擇價值最大的物品裝入背包。

(2)每次選擇重量最小的物品裝入背包。

(3)每次選擇單位重量價值最大的物品轉(zhuǎn)入背包。

??????? 思考一下,如果選價值最大的物品,但重量非常大,則可能一個也裝不下,分割一部分裝入,價值未必是最高的;如果選重量最小的物品裝入,則其價值不一定高,所以在總重量受到限制的情況下無法保證價值最大;而如果每次選單位重量價值最大的物品,則裝滿背包后一定能得到最大價值。

??????? 因此,我們應(yīng)采用第三種貪心策略——每次從剩下的物品中選單位重量價值最大的物品。

算法設(shè)計?

(1)確定合適的數(shù)據(jù)結(jié)構(gòu)并初始化。首先將物品的重量、價值和單位重量價值定位為一種結(jié)構(gòu)體類型,然后對物品按單位重量價值從大到小進(jìn)行排序。

(2)根據(jù)貪心策略,按照單位重量價值從大到小選取物品,直到達(dá)到背包容量。如果在裝入第 i 個物品時超出背包容量,則取該物品的一部分裝入背包。

完美圖解

??????? 物品的價值和重量如表2-3所示。如果背包容量 w = 30,怎么才能裝入最大價值的物品?

??????????????????????????????????????????????????????????????? 物品清單

物品 i3 1 2 3 4 5 6 7 8 9 10
重量 w[i] 4 2 9 5 5 8 5 4 5 5
價值 v[i] 3 8 18 6 8 20 5 6 7 15

(1)貪心策略是每次選單位重量價值(價值/重量)大的物品,因此可以按單位重量價值對物品進(jìn)行降序排列,排序后的物品清單如下所示:

???????????????????????????????????????????????????????? 排序后的物品清單

物品 i 2 10 6 3 5 8 9 4 7 1
重量 w[i] 2 5 8 9 5 4 5 5 5 4
價值 v[i] 8 15 20 18 8 6 7 6 5 3
單位重量價值 4 3 2.5 2 1.6 1.5 1.4 1.2 1 0.75

?(2)按照貪心策略,每次選擇單位重量價值大的物品裝入背包。

(3)構(gòu)造最優(yōu)解

算法詳解

(1)確定合適的數(shù)據(jù)結(jié)構(gòu)。

struct node {
    double w; //每種物品的重量
    double v; //每種物品的價值
    double p; //每種物品的單位重量價值(價值/重量)
}

(2)對物體按單位重量價值進(jìn)行排序。

bool cmp(node a, node b) { //自定義比較函數(shù)cmp
    return a.p > b.p; // 指定按照物品的單位重量價值進(jìn)行降序排列
}
sort(s, s + n, cmp); //前兩個參數(shù)分別為待排序數(shù)組的首地址和尾地址,cmp為比較函數(shù)

(3)使用貪心算法求解問題

double solve (int n, double w) {
    double sum = 0.0;    //sum表示已經(jīng)裝入物品的價值之和
    double cleft = w;    //背包的剩余容量
    for(int i = 0; i < n; i++) {    //是用貪心算法求解問題
        if(s[i].w < cleft) {    //如果物品的重量小于或等于剩余容量
            cleft -= s[i].w;
            sum += s[i].v;
        }
        else {    //如果物品的重量大于剩余容量
            sum += cleft * s[i].p;    //部分裝入
            break;
        }
    }
    return sum;
}

算法分析

(1)時間復(fù)雜度:時間主要耗費在對物品按單位重量價值進(jìn)行排序上,一般采用快速排序法,時間復(fù)雜度為O(nlogn)。

(2)空間復(fù)雜度:空間主要消耗在存儲物品的單位重量價值上,空間復(fù)雜度為O(n)。 ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 【趣學(xué)算法】Day3 貪心算法——背包問題??????文章來源地址http://www.zghlxwxcb.cn/news/detail-430790.html

到了這里,關(guān)于【趣學(xué)算法】Day3 貪心算法——背包問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • (C語言貪心算法)0/1背包問題

    (C語言貪心算法)0/1背包問題

    已知一個載重為M的背包和n件物品,物品編號從0到n-1。第i件物品的重量為?wi,若將第i種物品裝入背包將獲益pi,這里,wi0,pi0,0=in。所謂0/1背包問題是指在物品不能分割,只能整件裝入背包或不裝入的情況下,求一種最佳裝載方案使得總收益最大。 第?1?行中有?2?個正整

    2024年02月08日
    瀏覽(24)
  • 【程序設(shè)計競賽算法】背包問題——貪心法

    貪心算法是一種基于貪心策略的算法,它在每一步選擇中都采取當(dāng)前狀態(tài)下的最優(yōu)選擇,以期望最終達(dá)到全局最優(yōu)解。 背包問題是一個經(jīng)典的組合優(yōu)化問題,可以分為 0-1 背包問題和分?jǐn)?shù)背包問題。其中,0-1 背包問題要求物品只能選擇一次,而分?jǐn)?shù)背包問題允許物品被選擇多

    2024年02月03日
    瀏覽(20)
  • c++—0/1背包問題--貪心算法(詳解)

    c++—0/1背包問題--貪心算法(詳解)

    貪心算法的基本思想 ?貪心算法的特點是每個階段所作的選擇都是局部最優(yōu)的,它期望通過所作的局部最優(yōu)選擇產(chǎn)生出一個全局最優(yōu)解。 貪心與動態(tài)規(guī)劃: 與動態(tài)規(guī)劃不同的是,貪心是 鼠目寸光 ; 動態(tài)規(guī)劃是 統(tǒng)攬全局 。 貪心:每個階段產(chǎn)生的都是局部最優(yōu)解 貪心算法的

    2024年02月04日
    瀏覽(16)
  • java實現(xiàn)0-1背包問題方案(動態(tài)規(guī)劃-貪心算法-回溯-分支定界)

    動態(tài)規(guī)劃算法時間復(fù)雜度較低,能夠求解較大規(guī)模的問題,但空間復(fù)雜度較高,不適用于數(shù)據(jù)量較大的問題。 貪心算法時間復(fù)雜度較低,能夠求解較大規(guī)模的問題,但不能保證求得的解是最優(yōu)解。 回溯算法能夠求解較小規(guī)模的問題,但時間復(fù)雜度較高,不適用于數(shù)據(jù)量較大

    2024年02月01日
    瀏覽(25)
  • 【趣學(xué)算法】Day4 分治算法——二分搜索

    【趣學(xué)算法】Day4 分治算法——二分搜索

    14天閱讀挑戰(zhàn)賽 努力是為了不平庸~ 算法學(xué)習(xí)有些時候是枯燥的,這一次,讓我們先人一步,趣學(xué)算法! ??一名熱愛Java的大一學(xué)生,希望與各位大佬共同學(xué)習(xí)進(jìn)步?? ??個人主頁:@周小末天天開心 各位大佬的點贊?? 收藏? 關(guān)注?,是本人學(xué)習(xí)的最大動力 感謝! ??該

    2024年02月07日
    瀏覽(14)
  • 湘潭大學(xué) 算法設(shè)計與分析實驗 回溯 動態(tài)規(guī)劃 貪心 模擬退火解決背包問題

    https://download.csdn.net/download/SQ_ZengYX/88620871 測試用例

    2024年02月02日
    瀏覽(42)
  • 【算法日志】動態(tài)規(guī)劃刷題:01背包問題,多重背包問題(day37,day38)

    【算法日志】動態(tài)規(guī)劃刷題:01背包問題,多重背包問題(day37,day38)

    目錄 前言 目標(biāo)和(01背包) 一和零(01背包) 零錢兌換(多重背包) 排列總和(多重背包) 這兩天都是背包問題,其中的01背包的一些應(yīng)用問題需要一定的數(shù)學(xué)建模能力,需要i將實際問題簡化成我們熟悉的背包問題;而這兩天的多重背包問題還算比較基礎(chǔ),但也要我明白了

    2024年02月11日
    瀏覽(95)
  • 算法基礎(chǔ)復(fù)盤筆記Day09【動態(tài)規(guī)劃】—— 背包問題

    ? 作者主頁:歡迎來到我的技術(shù)博客?? ? 個人介紹:大家好,本人熱衷于 Java后端開發(fā) ,歡迎來交流學(xué)習(xí)哦!( ̄▽ ̄)~* ?? 如果文章對您有幫助,記得 關(guān)注 、 點贊 、 收藏 、 評論 ?????? ?? 您的支持將是我創(chuàng)作的動力,讓我們一起加油進(jìn)步吧!?。???? 1. 題目

    2023年04月22日
    瀏覽(21)
  • 【算法日志】貪心算法刷題:重疊區(qū)問題(day31)

    【算法日志】貪心算法刷題:重疊區(qū)問題(day31)

    目錄 前言 無重疊區(qū)間(篩選區(qū)間) 劃分字母區(qū)間(切割區(qū)間) ?合并區(qū)間 今日的重點是掌握重疊區(qū)問題。

    2024年02月12日
    瀏覽(28)
  • 力扣算法刷題Day42|動態(tài)規(guī)劃:01背包問題 分割等和子集

    力扣題目:01背包問題(二維數(shù)組) 刷題時長:參考題解 解題方法:動態(tài)規(guī)劃 +?二維dp數(shù)組 復(fù)雜度分析 時間 空間 問題總結(jié) 理解遞推公式困難 本題收獲 動規(guī)思路:兩層for循環(huán),第一層i遍歷物品,第二層j枚舉背包容量以內(nèi)所有值 確定dp數(shù)組及下標(biāo)的含義:dp[i][j] 表示從下標(biāo)

    2024年02月13日
    瀏覽(94)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包