日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言 · 贪心算法

發(fā)布時(shí)間:2025/4/16 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言 · 贪心算法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

發(fā)現(xiàn)藍(lán)橋杯上好多題目涉及到貪心,決定學(xué)一學(xué)。

貪心算法是指在對(duì)問題求解時(shí),總是做出在當(dāng)前看來是最好的選擇。也就是說:不從整體最優(yōu)上考慮,而是在某種意義上的局部最優(yōu)解。其關(guān)鍵是貪心策略的選擇,選擇的貪心策略必須具備無后效性,即某個(gè)狀態(tài)以前的過程不會(huì)影響以后的狀態(tài),只與當(dāng)前狀態(tài)有關(guān)。

貪心選擇

貪心選擇是指所求問題的整體最優(yōu)解可以通過一系列局部最優(yōu)的選擇,即貪心選擇來達(dá)到。這是貪心算法可行的第一個(gè)基本要素,也是貪心算法與動(dòng)態(tài)規(guī)劃算法的主要區(qū)別。貪心選擇是采用從頂向下、以迭代的方法做出相繼選擇,每做一次貪心選擇就將所求問題簡(jiǎn)化為一個(gè)規(guī)模更小的子問題。對(duì)于一個(gè)具體問題,要確定它是否具有貪心選擇的性質(zhì),我們必須證明每一步所作的貪心選擇最終能得到問題的最優(yōu)解。通??梢允紫茸C明問題的一個(gè)整體最優(yōu)解,是從貪心選擇開始的,而且作了貪心選擇后,原問題簡(jiǎn)化為一個(gè)規(guī)模更小的類似子問題。然后,用數(shù)學(xué)歸納法證明,通過每一步貪心選擇,最終可得到問題的一個(gè)整體最優(yōu)解。

最優(yōu)子結(jié)構(gòu)

當(dāng)一個(gè)問題的最優(yōu)解包含其子問題的最優(yōu)解時(shí),稱此問題具有最優(yōu)子結(jié)構(gòu)性質(zhì)。運(yùn)用貪心策略在每一次轉(zhuǎn)化時(shí)都取得了最優(yōu)解。問題的最優(yōu)子結(jié)構(gòu)性質(zhì)是該問題可用貪心算法或動(dòng)態(tài)規(guī)劃算法求解的關(guān)鍵特征。貪心算法的每一次操作都對(duì)結(jié)果產(chǎn)生直接影響,而動(dòng)態(tài)規(guī)劃則不是。貪心算法對(duì)每個(gè)子問題的解決方案都做出選擇,不能回退;動(dòng)態(tài)規(guī)劃則會(huì)根據(jù)以前的選擇結(jié)果對(duì)當(dāng)前進(jìn)行選擇,有回退功能。動(dòng)態(tài)規(guī)劃主要運(yùn)用于二維或三維問題,而貪心一般是一維問題?。

思想

貪心算法的基本思路是從問題的某一個(gè)初始解出發(fā)一步一步地進(jìn)行,根據(jù)某個(gè)優(yōu)化測(cè)度,每一步都要確保能獲得局部最優(yōu)解。每一步只考慮一個(gè)數(shù)據(jù),他的選取應(yīng)該滿足局部?jī)?yōu)化的條件。若下一個(gè)數(shù)據(jù)和部分最優(yōu)解連在一起不再是可行解時(shí),就不把該數(shù)據(jù)添加到部分解中,直到把所有數(shù)據(jù)枚舉完,或者不能再添加算法停止。

過程

  • 建立數(shù)學(xué)模型來描述問題;
  • 把求解的問題分成若干個(gè)子問題;
  • 對(duì)每一子問題求解,得到子問題的局部最優(yōu)解;
  • 把子問題的解局部最優(yōu)解合成原來解問題的一個(gè)解。
  • 貪婪算法可解決的問題通常大部分都有如下的特性:
    • 隨著算法的進(jìn)行,將積累起其它兩個(gè)集合:一個(gè)包含已經(jīng)被考慮過并被選出的候選對(duì)象,另一個(gè)包含已經(jīng)被考慮過但被丟棄的候選對(duì)象。
    • 有一個(gè)函數(shù)來檢查一個(gè)候選對(duì)象的集合是否提供了問題的解答。該函數(shù)不考慮此時(shí)的解決方法是否最優(yōu)。
    • 還有一個(gè)函數(shù)檢查是否一個(gè)候選對(duì)象的集合是可行的,也即是否可能往該集合上添加更多的候選對(duì)象以獲得一個(gè)解。和上一個(gè)函數(shù)一樣,此時(shí)不考慮解決方法的最優(yōu)性。
    • 選擇函數(shù)可以指出哪一個(gè)剩余的候選對(duì)象最有希望構(gòu)成問題的解。
    • 最后,目標(biāo)函數(shù)給出解的值。
    • 為了解決問題,需要尋找一個(gè)構(gòu)成解的候選對(duì)象集合,它可以優(yōu)化目標(biāo)函數(shù),貪婪算法一步一步的進(jìn)行。起初,算法選出的候選對(duì)象的集合為空。接下來的每一步中,根據(jù)選擇函數(shù),算法從剩余候選對(duì)象中選出最有希望構(gòu)成解的對(duì)象。如果集合中加上該對(duì)象后不可行,那么該對(duì)象就被丟棄并不再考慮;否則就加到集合里。每一次都擴(kuò)充集合,并檢查該集合是否構(gòu)成解。如果貪婪算法正確工作,那么找到的第一個(gè)解通常是最優(yōu)的。

    轉(zhuǎn)載于:https://www.cnblogs.com/panweiwei/p/6541159.html

    總結(jié)

    以上是生活随笔為你收集整理的C语言 · 贪心算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。