貪心演算法 附貪心相關習題

2021-10-03 19:47:32 字數 1053 閱讀 8962

定義:

貪心演算法是一種求解最優解的方法。它是按照某種最優策略,將複雜問題層層分解成子問題(每次一般只有乙個),並求子問題的最優解得到整個問題的最優解。

貪心演算法並不是從整體上考慮問題,它所做出的選擇只是在某種意義上的區域性最優解。在每個子問題的選擇中只選擇區域性最優解,從而達到全域性最優解的一種演算法。

利用貪心演算法求解是應注意:

1.該題目是否能用貪心策略進行求解(正確性,即某個狀態以後的過程不會影響當前狀態,只與當前狀態有關)

2.如何選擇貪心標準,已得到全域性的最優解

貪心演算法應該說是一種比較難的演算法了,因為它並沒有乙個大體的框架,只是給出了一種做題的思想。有很多貪心問題都是很難想的,如果是第一次見,很難把這個問題做出來。因此,要學好貪心演算法,主要是是多做題、多歸納。下面通過題目來介紹一些經典的貪心模型:

一.區間問題:

區間問題是一大類問題,也是很經典的一類貪心題目。

主要的做法是:

1.將各個區間按照一定規則進行排序(一般是按照區間的左端點或者右端點進行排序)

2.然後根據問題的具體要求進行求解

例題:整數區間

integer intervals(整數區間的公升級版)

區間分組

二.合併問題

將一些東西兩兩合併,最後合併成乙個,要怎麼合併才能使改物體最小(或最大)

主要做法:

根據題目要求以及合併方法決定每次合併挑最大的合併還是最小的合併。

這類問題一般用堆來解決

例題:stripies

三.小船過河

一群人划船過河,給出每個人的划船速度,和船的容量,怎麼分配才能讓划船時間最短。

例題:crossing river

四.推公式

這種題的排序準則需要我們通過一定的計算推理出了,但一旦找出了排序準則,題目就很容易做出來了。

例題:protecting the flowers

五.多排序準則題

這種題目有多個排序的準則,以此來達成不同的要求。

例如:students』 revenge

(現在題還很少,以後會慢慢加題的)

經典貪心演算法 貪心演算法概述

貪心演算法具有最優子問題結構,它的特點是 短視 每次選擇對當前局面最有利的決策,來一步步獲得最優解。我個人認為,貪心不是乙個具體的方法,而是一類方法,貪心演算法的關鍵不在於想到,而在於正確性的證明。要證明乙個貪心演算法是正確的,需要證明我們可以把乙個最優解逐步轉化為我們用貪心演算法所得到的解,而解不...

貪心演算法(1) 雙指標貪心演算法

leetcode例題 給定乙個字串 s 和乙個字元模式 p 實現乙個支援 和 的萬用字元匹配。可以匹配任何單個字元。可以匹配任意字串 包括空字串 兩個字串完全匹配才算匹配成功。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例 1 輸...

總結 貪心演算法 貪心演算法入門總結

英語 greedy algorithm,又稱貪婪演算法,是一種在每一步選擇中都採取在當前狀態下最好或最優 即最有利 的選擇,從而希望導致結果是最好或最優的演算法。比如在旅行推銷員問題中,如果旅行員每次都選擇最近的城市,那這就是一種貪心演算法。貪心演算法在有最優子結構的問題中尤為有效。最優子結構的意思...