貪心策略取得最優解的條件_什么是貪心算法?

一、什么是貪心算法

貪心算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。(局部最優解,而不是整體最優解)

貪心算法沒有固定的算法框架,算法設計的關鍵是貪心策略的選擇。必須注意的是,貪心算法不是對所有問題都能得到整體最優解,選擇的貪心策略必須具備無后效性(即某個狀態以后的過程不會影響以前的狀態,只與當前狀態有關。)所以,對所采用的貪心策略一定要仔細分析其是否滿足無后效性。

二、貪心算法基本思路

把求解的問題分成若干個子問題

對每個子問題求解,得到子問題的局部最優解(不能保證求得的最后解是最佳的)

把子問題的解局部最優解合成原來問題的一個解

可以看出貪心算法和動態規劃非常相似,但是兩者存在部分區別

1)貪心算法每一步的最優解一定包含上一步的最優解,上一步之前的最優解則不作保留。而動態規劃全局最優解中一定包含某個局部最優解,但不一定包含前一個局部最優解,因此需要記錄之前的所有的局部最優解。

2)貪心算法只能求滿足某些約束條件的可行解的范圍。

3)貪心不能保證求得的最后解是最佳的,一般復雜度低。而動態規劃本質是窮舉法,可以保證結果是最佳的,復雜度高。

三、經典例題

1)指定幣值和相應的數量,用最少的數量湊齊某金額

思路:優先選擇面值大的錢幣,以此類推,直到湊齊總金額

public int[] getCoinNum(int sum, int[] values, int[] counts) {    int[] result = new int[values.length];    int add = 0;    for (int i = values.length - 1; i >= 0; i--) {        int num = (sum - add) / values[i];        if (num > counts[i]) {            num = counts[i];        }        add = add + num * values[i];        result[i] = num;    }        return result;}

2)部分背包問題,物品可以不完全放入包中,求價值最大的方案

思路:選擇單位重量價值最高的物品,將盡可能多的該物品裝入背包,直到背包裝滿為止。

public float getNum(float M, float[] w, float[] v) {    float max = 0;    float weight = 0;        for (int i = 0; i < w.length; i++) {        if (v[i] / w[i] > max) {            max = v[i] / w[i];            weight = w[i];        }    }    float num = M / weight;    return num;}
140372843f6613e9b47ea9da890ece53.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373858.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373858.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373858.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Devoxx第1天

參加Devoxx給我帶來了足夠的動力來發布我的第一篇博客文章。 我是第一次來這里&#xff0c;它的組織方式給我留下了深刻的印象。 目前有記錄的最高發言人。 對我來說&#xff0c;選擇演示文稿來參加是一個問題。 但是感謝組織者&#xff0c;所有活動都將在12月下旬在parleys.co…

Oracle 事務的開始與結束

事務是用來分割數據庫活動的邏輯工作單元&#xff0c;事務即有起點&#xff0c;也有終點&#xff1b; 事物的處理就是保證數據操作的完整性&#xff0c;所有的操作要么成功要么同時失敗。當下列事件之一發生時&#xff0c;事務就開始了&#xff1a;連接到數據庫上&#xff0c;并…

http tcp聯系區別

術語TCP/IP代表傳輸控制協議/網際協議&#xff0c;指的是一系列協議。“IP”代表網際協議&#xff0c;TCP和UDP使用該協議從一個網絡傳送數據包到另一個網絡。把IP想像成一種高速公路&#xff0c;它允許其它協議在上面行駛并找到到其它電腦的出口。TCP和UDP是高速公路上的“卡車…

python控件隨窗口變化而適配_Tkinter窗口/控件比例調整

我目前正在為一個編程類開發一個pythongui版本的Reversi。我已經對游戲邏輯進行了編程&#xff0c;目前我正在嘗試使用Tkinter實現GUI。我有一些問題&#xff0c;調整游戲板(根窗口)和它的一切(畫布和形狀)成比例。這款游戲目前還不錯&#xff0c;但我試圖讓棋盤正確調整大小的…

Java遞歸基礎

對于那些不知道遞歸是什么的人&#xff08;并且像個笑聲一樣&#xff09;&#xff0c;請單擊以下鏈接&#xff1a;Google搜索&#xff1a;遞歸&#xff0c;然后單擊“您的意思是……”項。 希望您終于弄清楚了遞歸是指其自身的任何內容&#xff08;如果不是&#xff0c;那么您可…

我是最棒的,我一定會成功!

有人曾經做過這樣一個實驗&#xff1a;他往一個玻璃杯里放進一只跳蚤&#xff0c;發現跳蚤立即輕易地跳了出來。再重復幾遍&#xff0c;結果還是一樣。根據測試&#xff0c;跳蚤跳的高度一般可達它身體的400倍左右&#xff0c;所以說跳蚤可以稱得上是動物界的跳高冠軍。     …

頭部ct能檢查出什么_【安全用藥】做CT檢查時應注意什么?

點擊藍字 關注我們安安徽徽&#xff0c;你知道做CT檢查時應注意什么&#xff1f;上腹部CT檢查前患者至少禁食6小時、檢查前15分鐘喝溫開水充盈胃部、CT檢查時&#xff0c;患者會受到一定量X射線輻射&#xff0c;應避免過度掃描......本期安全用藥&#xff0c;大家一起來了解了解…

JAXB,SAX,DOM性能

這篇文章探討了使用多種不同方法將XML文檔編組為Java對象的性能。 XML文檔非常簡單。 它包含一個Person實體的集合。 <?xml version"1.0" encoding"UTF-8" standalone"yes"?> <persons><person><id>person0</id>…

虛擬機Linux圖形界面配置NAT-橋接

點開“虛擬機->設置->橋接模式&#xff08;勾選復制物理網絡連接狀態&#xff09;->確認” 點擊“右上角扇形網絡圖標->Edit Connections->Wired->選中->Delete->Add->IPv4 Settings->Method(Manual)->Add->輸入IP&#xff0c;子網掩碼&am…

年輕人應該謹記的十點

有個朋友的孩子今年大學畢業&#xff0c;托我幫他找個“好工作”&#xff0c;而且再三強調&#xff0c;這關系到孩子的前途命運&#xff0c;要我一定要全力以赴。他&#xff0c;一個非名牌大學的計算機網絡專業應屆畢業生&#xff0c;沒有工作經驗&#xff0c;他能找一個什么樣…

python自動化構建工具_Python自動化構建工具scons使用入門筆記

這段時間用到了scons&#xff0c;這里總結下&#xff0c;也方便我以后查閱。一、安裝sconsLinux環境(以CentOS為例)1、yum安裝yum install scons2、源碼安裝下載scons&#xff1a;http://http://jaist.dl.sourceforge.net/project/scons/scons/2.3.0/scons-2.3.0.zip安裝scons&…

Java 8狀態更新

即將到來的Java SE 8發行版的兩大新語言功能是Lambda Expressions和Modularity。 對于這兩者&#xff0c;這些天的狀態更新已經發布。 我會與您共享鏈接&#xff0c;因此您可能會在假期中通讀它們 Oracle計劃在2013年中期發布Java SE 8。 Lambda項目 Lambda項目以及JSR-335希望…

java 18 - 6 TreeMap嵌套使用

HashMap嵌套HashMap   動物     犬類         哈士奇   2         薩摩耶   1     貓類        波斯貓   2        加菲貓   3 先存儲元素&#xff0c;然后遍歷元素 1 package map_son;2 3 import java.util.HashMap;4 import…

程序設計語言

程序設計語言使用于書寫計算機程序的語言。程序設計語言有3個方面的因素&#xff0c;即語法&#xff0c;語義和語用。語法標識程序的結構或形式。語義表示程序的含義。語用表示程序與使用者的關系。 程序設計語言的發展史 程序的復雜性度量 1&#xff0c;代碼行度量法 出錯率&a…

python集合類型是一種具體的數據類型_Python3基礎語法之集合類型

set也是一種組合數據類型&#xff0c;支持成員關系操作(in)、對象大小計算操作符(len())&#xff0c;并且是iterable。集合數據類型至少提供一個set.isdisjoin()方法&#xff0c;支持比較&#xff0c;也支持為邏輯操作(在集合用于聯合、交叉等上下文中使用)。只有可哈希運算的對…

Linux 安裝之U盤引導

說到裝系統最簡單的方法無非就是找個系統安裝光盤來然后就一步一步慢慢的安裝。簡單是簡單但好似大多數人好像都木有Linux的安裝光盤。因此只能用U盤來模擬光盤的功能來裝系統咯。 電腦上裝有Windows 7現要裝Linux變雙系統。 安裝Linux前的準備&#xff1a; 1、電腦上分出空閑的…

OSGi:簡介

為基于Java的系統創建的OSGi提供了模塊化系統的框架。 OSGi使得可以定義每個單獨模塊與其他模塊的依賴關系&#xff0c;并使用戶可以控制生命周期并動態更改系統的每個組件。 OSGi是一個規范&#xff0c;最常見的實現可以算作Equinox &#xff0c; Apache Felix和Knoplerfish 。…

一起動手打造個人娛樂級linux

我們使用電腦&#xff0c;一直以來用的都是windows&#xff0c;但是對于像我這種愛折騰的人來說&#xff0c;嘗試使用linux系統應該是一種不錯的體驗。說到linux&#xff0c;許多人可能都沒聽過&#xff0c;或者知道的人對它印象是這樣的&#xff1a; 然而&#xff0c;linux發展…

PostgreSQL數據類型

http://blog.csdn.net/neo_liu0000/article/details/6254086 第六章 數據類型 6.1概述 PostgreSQL 提供了豐富的數據類型。用戶可以使用 CREATE TYPE 命令在數據庫中創建新的數據類型。PostgreSQL 的數據類型被分為四種&#xff0c;分別是基本數據類型、復合數據類型、域和偽類…

centos 卸載ffmpeg_CentOS Linux 操作系統安裝 FFmpeg 教程

FFmpeg 是一個非常熱門的開源項目&#xff0c;用來編解碼音頻視頻流&#xff0c;被廣泛用于各種流服務中。本教程在 CentOS 6、7、8 上面都可以使用&#xff0c;用來安裝 FFmpeg 軟件。一、安裝前需求一個 sudo 賬戶&#xff0c;一般都是默認 root 賬戶即可。1、CentOS 8安裝所…