电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

貪心算法原理及在Java中的使用

瀏覽:3日期:2022-08-11 15:58:13
目錄貪心算法區間調度問題好了,說了這么多,那針對該問題正確的貪心策略到底是哪個?應用總結貪心算法

由于貪心算法本身的特殊性,我們在使用貪心算法之前必須要進行證明,保證算法滿足貪心選擇性質。具體的證明方法無外乎就是通過數學歸納法來進行證明。但大部分人可能并不喜歡枯燥的公式,因而我這里提供一個使用貪心算法的小技巧。由于貪心算法某種程度上算是動態規劃算法的特例,使用條件比較苛刻,因而能夠用動態規劃解決的問題盡量都是用動態規劃來進行先解決,如果在用完動態規劃之后,提交時發現問題超時,并且進行狀態壓縮之后仍然超時,此時我們就可以**考慮使用貪心算法來進行解決。**最后強調一下,我們在使用貪心算法之前,如果要保證解法的絕對正確,一定要對問題進行證明,切記,切記?。?/p>

下邊我們以區間調度問題為例,來講一下貪心算法到底該如何取用。

區間調度問題

問題描述:

給你很多形如 [start, end] 的閉區間,請你設計一個算法,算出這些區間中最多有幾個互不相交的區間。

舉個例子,intvs = [[1,3], [2,4], [3,6]],這些區間最多有 2 個區間互不相交,即 [[1,3], [3,6]],你的算法應該返回 2。注意邊界相同并不算相交。

這個問題大眼一看好像有很多貪心策略可供選擇,比如我們可以選擇區間最短的?或者選擇開始最早的?。。。

但是上面幾種策略,我們都可以比較容易的舉出反例來排除,同時這也是貪心算法的另一個小技巧--雖然好多時候直接證明貪心策略的正確性很難,但是我們可以從反證法入手,對貪心策略進行證偽,排除許多錯誤的貪心策略。😄😄

好了,說了這么多,那針對該問題正確的貪心策略到底是哪個?

其實正確的思路也比較簡單,可以分成下面三步:

從區間集合中選擇一個區間 x,這個 x 是所有區間中結束最早的(end 最?。? 把所有與 x 區間相交的區間從區間集合中刪除掉。 重復 1 和 2,直到區間集合為空。之前選出的那些 x 的集合就是最大的不想交子集。

這個思路實現成算法的話,可以按照每個區間的 end 數值進行升序排序,因為這樣處理以后實現步驟 1 和步驟 2 就會容易很多。

我們通過下面這個動圖來輔助理解其整個過程。

貪心算法原理及在Java中的使用

由于我們在計數之前進行了排序,所以所有與 x 相交的區間必然會和 x 的 end 相交;如果一個區間不想與 x 的 end 相交,它的 start 必須要大于或者等于 x 的 end。

具體實現的代碼如下:

public int eraseOverlapIntervals(int[][] intervals) { if (intervals.length == 0) { return 0; } Arrays.sort(intervals,new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { return o1[1] - o2[1]; }});//排序后的第一個必然可用 int count = 1; int x_end = intervals[0][1]; for (int[] interval : intervals) { if (interval[0] >= x_end) {count++;x_end = interval[1]; } } return count; }應用

如果學會了上面的區間調度問題的話,leetCode 上邊有兩個題目,我們便都可以拿下了。

貪心算法原理及在Java中的使用

這個問題大眼一看好像和我們之前講的那個區間調度問題毫不相關,但仔細分析一下,好像是一模一樣的問題,如果最多有 n 個不重疊的區間,那么就至少需要 n 個箭頭穿透所有區間。

貪心算法原理及在Java中的使用

因而問題也就轉化成了,尋找不重疊區間的個數,但我們要注意的一點是,在 intervalSchedule 算法中,如果兩個區間的邊界觸碰,不算重疊;而按照這道題目的描述,箭頭如果碰到氣球的邊界氣球也會爆炸,所以說相當于區間的邊界觸碰也算重疊。

貪心算法原理及在Java中的使用

代碼實現如下:

public int findMinArrowShots(int[][] points) { if (points.length <= 0) { return 0; } // 在排序的過程中要考慮溢出情況的發生 Arrays.sort(points, (a, b) -> Integer.compare(a[1], b[1])); int count = 1; int x_end = points[0][1]; for (int[] point : points) { if (point[0] > x_end) {count++;x_end = point[1]; } } return count; }總結

本文主要結合一個例子,講了貪心算法的使用方式。

貪心算法實現起來容易,但難在證明。因而文中提供了兩個小竅門輔助判斷是否使用貪心算法:

在使用考慮貪心算法之前,先考慮使用動態規劃(考慮狀態壓縮)解決該問題,如果問題依然超時,則考慮使用貪心算法。 在確定貪心策略之前,先用一些特殊的例子驗證貪心策略的正確性。對于正確的貪心策略,為了保證算法的絕對正確,要通過數學歸納法進行驗證。

以上就是貪心算法原理及在Java中的使用的詳細內容,更多關于Java 貪心算法的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 模型公司_模型制作_沙盘模型报价-中国模型网 | 高低温老化试验机-步入式/低温恒温恒湿试验机-百科 | 铝镁锰板_铝镁锰合金板_铝镁锰板厂家_铝镁锰金属屋面板_安徽建科 | 干洗店加盟_洗衣店加盟_干洗店设备-伊蔻干洗「武汉总部」 | 广州中央空调回收,二手中央空调回收,旧空调回收,制冷设备回收,冷气机组回收公司-广州益夫制冷设备回收公司 | 首页-恒温恒湿试验箱_恒温恒湿箱_高低温试验箱_高低温交变湿热试验箱_苏州正合 | 撕碎机,撕破机,双轴破碎机-大件垃圾破碎机厂家 | 轻型地埋电缆故障测试仪,频响法绕组变形测试仪,静荷式卧式拉力试验机-扬州苏电 | 浇钢砖,流钢砖_厂家价低-淄博恒森耐火材料有限公司 | 视频直播 -摄影摄像-视频拍摄-直播分发 | 地磅-电子地磅维修-电子吊秤-汽车衡-无人值守系统-公路治超-鹰牌衡器 | 医用酒精_84消毒液_碘伏消毒液等医用消毒液-漓峰消毒官网 | 防火阀、排烟防火阀、电动防火阀产品生产销售商-德州凯亿空调设备有限公司 | 一航网络-软件测评官网| 呼末二氧化碳|ETCO2模块采样管_气体干燥管_气体过滤器-湖南纳雄医疗器械有限公司 | 没斑啦-专业的祛斑美白嫩肤知识网站-去斑经验分享 | 深圳彩钢板_彩钢瓦_岩棉板_夹芯板_防火复合彩钢板_长鑫 | 土壤养分检测仪_肥料养分检测仪_土壤水分检测仪-山东莱恩德仪器 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 不锈钢轴流风机,不锈钢电机-许昌光维防爆电机有限公司(原许昌光维特种电机技术有限公司) | 质构仪_鱼糜弹性仪-上海腾拔仪器科技有限公司 | 家庭教育吧-在线家庭教育平台,专注青少年家庭教育 | 烟台螺纹,烟台H型钢,烟台钢材,烟台角钢-烟台市正丰金属材料有限公司 | 湖南成人高考报名-湖南成考网 | 中央空调温控器_风机盘管温控器_智能_液晶_三速开关面板-中央空调温控器厂家 | 书信之家_书信标准模板范文大全| 广东泵阀展|阀门展-广东国际泵管阀展览会| 焊缝跟踪系统_激光位移传感器_激光焊缝跟踪传感器-创想智控 | 雄松华章(广州华章MBA)官网-专注MBA/MPA/MPAcc/MEM辅导培训 | 液压油缸-液压站生产厂家-洛阳泰诺液压科技有限公司 | uv固化机-丝印uv机-工业烤箱-五金蚀刻机-分拣输送机 - 保定市丰辉机械设备制造有限公司 | 挤出熔体泵_高温熔体泵_熔体出料泵_郑州海科熔体泵有限公司 | 郑州爱婴幼师学校_专业幼师培训_托育师培训_幼儿教育培训学校 | 上海新光明泵业制造有限公司-电动隔膜泵,气动隔膜泵,卧式|立式离心泵厂家 | 南京泽朗生物科技有限公司-液体饮料代加工_果汁饮料代加工_固体饮料代加工 | 北京开业庆典策划-年会活动策划公司-舞龙舞狮团大鼓表演-北京盛乾龙狮鼓乐礼仪庆典策划公司 | 代理记账_免费注册公司_营业执照代办_资质代办-【乐财汇】 | 高压无油空压机_无油水润滑空压机_水润滑无油螺杆空压机_无油空压机厂家-科普柯超滤(广东)节能科技有限公司 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 六维力传感器_六分量力传感器_模腔压力传感器-南京数智微传感科技有限公司 | 光伏支架成型设备-光伏钢边框设备-光伏设备厂家 | 众品地板网-地板品牌招商_地板装修设计_地板门户的首选网络媒体。 |