最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java貪心算法初學(xué)感悟圖解及示例分享

 更新時間:2021年11月24日 11:47:55   作者:威斯布魯克.猩猩  
這篇文章主要為大家介紹了本人在初學(xué)java貪心算法的感悟,并通過圖解及示例代碼的方式分享給大家,有需要的朋友可以借鑒參考下,希望能夠有所幫助

算法簡介

1)貪心算法是指在對問題進(jìn)行求解時,在每一步選擇中都采取最好或者最優(yōu)(即最有利)的選擇,從而希望能夠?qū)е率亲詈没蛘咦顑?yōu)的算法

2)貪心算法所得到的結(jié)果不一定是最優(yōu)的結(jié)果(有時候會是最優(yōu)解),但是都是相對近似(接近)最優(yōu)解的結(jié)果。

應(yīng)用場景 --> 集合覆蓋

public class GreedyAlgorithm {
	public static void main(String[] args) {
		// 創(chuàng)建廣播電臺,放入到Map
		HashMap<String, HashSet<String>> broadcasts = new HashMap<String, HashSet<String>>();
		// 將各個電臺放入到broadcasts
		HashSet<String> hashSet1 = new HashSet<String>();
		hashSet1.add("北京");
		hashSet1.add("上海");
		hashSet1.add("天津"); 
		HashSet<String> hashSet2 = new HashSet<String>();
		hashSet2.add("廣州");
		hashSet2.add("上海");
		hashSet2.add("天津"); 
		HashSet<String> hashSet3 = new HashSet<String>();
		hashSet3.add("成都");
		hashSet3.add("上海");
		hashSet3.add("杭州");
 		HashSet<String> hashSet4 = new HashSet<String>();
		hashSet4.add("上海");
		hashSet4.add("天津");
		HashSet<String> hashSet5 = new HashSet<String>();
		hashSet5.add("杭州");
		hashSet5.add("大連");
 		// 加入到map
		broadcasts.put("K1", hashSet1);
		broadcasts.put("K2", hashSet2);
		broadcasts.put("K3", hashSet3);
		broadcasts.put("K4", hashSet4);
		broadcasts.put("K5", hashSet5);
 		// allAreas,存放所有的地區(qū)
		HashSet<String> allAreas = new HashSet<String>();
		allAreas.add("北京");
		allAreas.add("上海");
		allAreas.add("天津");
		allAreas.add("廣州");
		allAreas.add("深圳");
		allAreas.add("成都");
		allAreas.add("杭州");
		allAreas.add("大連");
		// 創(chuàng)建ArrayList,存放選擇的電臺集合
		ArrayList<String> selects = new ArrayList<String>();
		// 定義一個臨時的集合,在遍歷的過程中,存放遍歷過程中的電臺覆蓋的地區(qū)和當(dāng)前還沒有覆蓋的地區(qū)的交集
		HashSet<String> tempSet = new HashSet<String>();
		// 定義一個maxKey,保存在一次遍歷過程中,能夠覆蓋最多未覆蓋的地區(qū)對應(yīng)的電臺的key
		// 如果maxKey不為null,則會加入到selects
		String maxKey = null;
		while (allAreas.size() != 0) {// 如果allAreas不為0,則表示還沒有覆蓋到所有的地區(qū)
			// 每進(jìn)行一次while,需要將maxKey置空
			maxKey = null; 
			// 遍歷broadcasts,取出對應(yīng)key
			for (String key : broadcasts.keySet()) {
				// 每進(jìn)行一次for
				tempSet.clear();
				// 當(dāng)前這個key能夠覆蓋的地區(qū)
				HashSet<String> areas = broadcasts.get(key);
				tempSet.addAll(areas);
				// 求出tempSet 和 allAreas集合的交集,交集會賦給tempSet
				tempSet.retainAll(allAreas);// retainAll方法的作用就是求交集
				// 如果當(dāng)前這個集合包含的未覆蓋地區(qū)的數(shù)量,比maxKey指向的集合地區(qū)還多
				// 就需要重置maxKey
				// tempSet.size() > broadcasts.get(maxKey).size()) 體現(xiàn)出貪心算法的特點(diǎn),每次都選擇最優(yōu)的
				if (tempSet.size() > 0 && (maxKey == null || tempSet.size() > broadcasts.get(maxKey).size())) {
					maxKey = key;
				}
			}
			// maxKey != null,就應(yīng)該將maxKey加入selects
			if (maxKey != null) {
				selects.add(maxKey);
				// 將maxKey指向的廣播電臺覆蓋的地區(qū),從allAreas去掉
				allAreas.removeAll(broadcasts.get(maxKey));
			}
		}
		System.out.println("得到的選擇結(jié)果是" + selects);
	}
}

以上就是java貪心算法初學(xué)感悟圖解及示例分享的詳細(xì)內(nèi)容,更多關(guān)于java貪心算法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java對象的序列化與反序列化詳解

    Java對象的序列化與反序列化詳解

    這篇文章主要為大家詳細(xì)介紹了Java對象的序列化與反序列化的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • SSH框架網(wǎng)上商城項(xiàng)目第11戰(zhàn)之查詢和刪除商品功能實(shí)現(xiàn)

    SSH框架網(wǎng)上商城項(xiàng)目第11戰(zhàn)之查詢和刪除商品功能實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了SSH框架網(wǎng)上商城項(xiàng)目第11戰(zhàn)之查詢和刪除商品功能實(shí)現(xiàn)的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • java報(bào)錯:“錯誤:編碼GBK?的不可映射字符”解決辦法

    java報(bào)錯:“錯誤:編碼GBK?的不可映射字符”解決辦法

    當(dāng)Java源代碼中包含中文字符時,我們在用javac編譯時會出現(xiàn)“錯誤:編碼GBK的不可映射字符”,這篇文章主要給大家介紹了關(guān)于java報(bào)錯:“錯誤:編碼GBK?的不可映射字符”的解決辦法,需要的朋友可以參考下
    2024-08-08
  • Springboot?application.yml配置文件拆分方式

    Springboot?application.yml配置文件拆分方式

    這篇文章主要介紹了Springboot?application.yml配置文件拆分方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Maven工程搭建spring boot+spring mvc+JPA的示例

    Maven工程搭建spring boot+spring mvc+JPA的示例

    本篇文章主要介紹了Maven工程搭建spring boot+spring mvc+JPA的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 詳解kafka中的消息分區(qū)分配算法

    詳解kafka中的消息分區(qū)分配算法

    kafka有分區(qū)機(jī)制,一個主題topic在創(chuàng)建的時候,會設(shè)置分區(qū)。如果只有一個分區(qū),那所有的消費(fèi)者都訂閱的是這一個分區(qū)消息;如果有多個分區(qū)的話,那消費(fèi)者之間又是如何分配的呢?本文就來為大家詳細(xì)講解一下
    2022-04-04
  • 詳解Java中l(wèi)ist,set,map的遍歷與增強(qiáng)for循環(huán)

    詳解Java中l(wèi)ist,set,map的遍歷與增強(qiáng)for循環(huán)

    這篇文章主要介紹了詳解Java中l(wèi)ist,set,map的遍歷與增強(qiáng)for循環(huán)的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 一文帶你學(xué)會Java事件機(jī)制

    一文帶你學(xué)會Java事件機(jī)制

    今天小編就為大家分享一篇關(guān)于Java事件機(jī)制的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2021-10-10
  • IDEA如何解決properties文件亂碼問題

    IDEA如何解決properties文件亂碼問題

    IDEA編輯器中打開properties文件時出現(xiàn)中文亂碼,可以通過修改文件編碼格式來解決,具體步驟為:設(shè)置》Setting》Editor》FileEncodings,將編碼格式更改為UTF-8
    2025-01-01
  • JAVA用遞歸實(shí)現(xiàn)全排列算法的示例代碼

    JAVA用遞歸實(shí)現(xiàn)全排列算法的示例代碼

    這篇文章主要介紹了JAVA用遞歸實(shí)現(xiàn)全排列算法的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07

最新評論

南充市| 溆浦县| 安岳县| 陈巴尔虎旗| 望谟县| 宣化县| 巨鹿县| 龙井市| 宁海县| 通化县| 合江县| 蛟河市| 荔波县| 滦平县| 舞阳县| 西乌珠穆沁旗| 河南省| 惠东县| 社会| 清原| 治县。| 鸡西市| 浦东新区| 福泉市| 海南省| 海晏县| 定边县| 乡城县| 泰安市| 新干县| 胶南市| 岳西县| 舒城县| 敦化市| 滦南县| 台湾省| 濮阳县| 花垣县| 科尔| 四会市| 宁都县|