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

Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之貪心算法

 更新時(shí)間:2022年02月17日 17:11:41   作者:我是小白呀  
我們可能在好多地方都會(huì)聽到貪心算法這一概念,并且它的算法思想也比較簡單就是說算法只保證局部最優(yōu),進(jìn)而達(dá)到全局最優(yōu)。但我們實(shí)際編程的過程中用的并不是很多,究其原因可能是貪心算法使用的條件比較苛刻,所要解決的問題必須滿足貪心選擇性質(zhì)

概述

從今天開始, 小白我將帶大家開啟 Java 數(shù)據(jù)結(jié)構(gòu) & 算法的新篇章.

貪心算法

貪心算法 (Greedy Algorithm) 指的是在每一步選擇中都采取在當(dāng)前狀態(tài)下最好或最優(yōu)的選擇, 從而希望導(dǎo)致結(jié)果是最好或最優(yōu)的算法. 貪心算法鎖得到的結(jié)果不一定是最優(yōu)的結(jié)果, 但是都是相對(duì)近似最優(yōu)的結(jié)果.

貪心算法的優(yōu)缺點(diǎn):

  • 優(yōu)點(diǎn): 貪心算法的代碼十分簡單
  • 缺點(diǎn): 很難確定一個(gè)問題是否可以用貪心算法解決

電臺(tái)覆蓋問題

假設(shè)存在以下的廣播臺(tái), 以及廣播臺(tái)可以覆蓋的地區(qū):

廣播臺(tái)覆蓋地區(qū)
K1北京, 上海, 天津
K2北京, 廣州, 深圳
K3上海, 杭州, 成都
K4上海, 天津
K5杭州, 大連

貪心算法的核心思想:

  • 把所有需要覆蓋的地區(qū)取集合
  • 從電臺(tái)中取覆蓋集合中地區(qū)最多的一個(gè)
  • 集合中去除已覆蓋地區(qū), 繼續(xù)匹配

代碼實(shí)現(xiàn)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;

public class 貪心算法 {

    // 集合, 存放廣播臺(tái)
    static HashMap<String, HashSet<String>> broadcasts = new HashMap<>();

    // 集合, 存放地區(qū)
    static HashSet<String> areas = new HashSet<String>();

    // 貪心算法
    public static ArrayList<String> Greedy() {

        // 創(chuàng)建數(shù)組存放結(jié)果
        ArrayList<String> selects = new ArrayList<>();

        // 循環(huán)直至地區(qū)都覆蓋
        while (areas.size() != 0) {

            // 存放交集最大的廣播臺(tái)
            String maxKey = null;

            // 存放交集最大的值
            int maxKeySize = 0;

            // 遍歷每個(gè)剩余電臺(tái)
            for (String key : broadcasts.keySet()) {

                // 取出交集個(gè)數(shù)
                int currSize = getRetainSize(key);

                // 替換當(dāng)前最大
                if (currSize > 0 && currSize > maxKeySize) {
                    maxKey = key;
                    maxKeySize = currSize;
                }
            }


            // 添加廣播臺(tái)到結(jié)果
            selects.add(maxKey);

            // 移除廣播臺(tái)
            areas.removeAll(broadcasts.get(maxKey));
        }

        return selects;
    }

    // 剩余數(shù)量
    public static int getRetainSize(String key) {

        // 如果為空返回0
        if (key == null) return 0;

        // 存放key對(duì)應(yīng)的地區(qū)集合
        HashSet<String> tempSet = new HashSet<>();

        // 取key對(duì)應(yīng)的地區(qū)
        tempSet.addAll(broadcasts.get(key));

        // 取交集
        tempSet.retainAll(areas);

        return tempSet.size();
    }

    public static void main(String[] args) {

//        | K1 | 北京, 上海, 天津 |
//        | K2 | 北京, 廣州, 深圳 |
//        | K3 | 上海, 杭州, 成都 |
//        | K4 | 上海, 天津 |
//        | K5 | 杭州, 大連 |


        // 創(chuàng)建廣播臺(tái)
        HashSet<String> K1 = new HashSet<>(Arrays.asList("北京", "上海", "天津"));
        HashSet<String> K2 = new HashSet<>(Arrays.asList("北京", "廣州", "深圳"));
        HashSet<String> K3 = new HashSet<>(Arrays.asList("上海", "杭州", "成都"));
        HashSet<String> K4 = new HashSet<>(Arrays.asList("上海", "天津"));
        HashSet<String> K5 = new HashSet<>(Arrays.asList("杭州", "大連"));

        // 加入map
        broadcasts.put("K1", K1);
        broadcasts.put("K2", K2);
        broadcasts.put("K3", K3);
        broadcasts.put("K4", K4);
        broadcasts.put("K5", K5);

        areas.addAll(K1);
        areas.addAll(K2);
        areas.addAll(K3);
        areas.addAll(K4);
        areas.addAll(K5);

        // 調(diào)試輸出
        System.out.println(broadcasts);
        System.out.println(areas);

        ArrayList<String> result = Greedy();
        System.out.println(result);
    }
}

到此這篇關(guān)于Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之貪心算法的文章就介紹到這了,更多相關(guān)Java 貪心算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于Selenium的UI自動(dòng)化測(cè)試屏幕截圖功能實(shí)例代碼

    關(guān)于Selenium的UI自動(dòng)化測(cè)試屏幕截圖功能實(shí)例代碼

    今天小編就為大家分享一篇關(guān)于Selenium的UI自動(dòng)化測(cè)試屏幕截圖功能實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Spring 5.0集成log4j2日志管理的示例代碼

    Spring 5.0集成log4j2日志管理的示例代碼

    本篇文章主要介紹了Spring 5.0集成log4j2日志管理的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • Java面試題沖刺第二十八天--數(shù)據(jù)庫(5)

    Java面試題沖刺第二十八天--數(shù)據(jù)庫(5)

    這篇文章主要為大家分享了最有價(jià)值的三道關(guān)于數(shù)據(jù)庫的面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-09-09
  • JDK8新特性之判空遍歷寫法

    JDK8新特性之判空遍歷寫法

    這篇文章主要介紹了JDK8新特性之判空遍歷寫法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Spring?Mvc中CommonsMultipartFile的特性實(shí)例詳解

    Spring?Mvc中CommonsMultipartFile的特性實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于Spring?Mvc中CommonsMultipartFile特性的相關(guān)資料,SpringMVC擁有強(qiáng)大的靈活性,非侵入性和可配置性,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • @Schedule?如何解決定時(shí)任務(wù)推遲執(zhí)行

    @Schedule?如何解決定時(shí)任務(wù)推遲執(zhí)行

    這篇文章主要介紹了@Schedule?如何解決定時(shí)任務(wù)推遲執(zhí)行問題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Java實(shí)現(xiàn)訂單超時(shí)未支付自動(dòng)取消的8種方法總結(jié)

    Java實(shí)現(xiàn)訂單超時(shí)未支付自動(dòng)取消的8種方法總結(jié)

    這篇文章主要為大家介紹了Java實(shí)現(xiàn)訂單超時(shí)未支付自動(dòng)取消功能的8種不同方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-08-08
  • java反射超詳細(xì)講解

    java反射超詳細(xì)講解

    本文非常詳細(xì)的講解了java反射具體的內(nèi)容以及使用,java反射在現(xiàn)今的使用中很頻繁,希望此文可以幫大家解答疑惑,可以幫助大家理解
    2021-08-08
  • Java中動(dòng)態(tài)地改變數(shù)組長度及數(shù)組轉(zhuǎn)Map的代碼實(shí)例分享

    Java中動(dòng)態(tài)地改變數(shù)組長度及數(shù)組轉(zhuǎn)Map的代碼實(shí)例分享

    這篇文章主要介紹了Java中動(dòng)態(tài)地改變數(shù)組長度及數(shù)組轉(zhuǎn)map的代碼分享,其中轉(zhuǎn)Map利用到了java.util.Map接口,需要的朋友可以參考下
    2016-03-03
  • SpringBoot自定義啟動(dòng)器Starter流程詳解

    SpringBoot自定義啟動(dòng)器Starter流程詳解

    SpringBoot中的starter是一種非常重要的機(jī)制,能夠拋棄以前繁雜的配置,將其統(tǒng)一集成進(jìn)starter,應(yīng)用者只需要在maven中引入starter依賴,SpringBoot就能自動(dòng)掃描到要加載的信息并啟動(dòng)相應(yīng)的默認(rèn)配置。starter讓我們擺脫了各種依賴庫的處理,需要配置各種信息的困擾
    2022-11-11

最新評(píng)論

团风县| SHOW| 商南县| 平塘县| 曲阳县| 连城县| 获嘉县| 易门县| 达日县| 乐清市| 仙游县| 莱阳市| 万安县| 如东县| 华安县| 卢龙县| 樟树市| 饶阳县| 鱼台县| 华宁县| 龙南县| 阳泉市| 黔西县| 夏津县| 湖北省| 通州区| 施秉县| 鹰潭市| 喀什市| 同德县| 蒙自县| 遂川县| 抚宁县| 鹰潭市| 蒲城县| 上杭县| 武胜县| 北辰区| 桑植县| 南木林县| 白玉县|