一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 淺析java貪心算法

淺析java貪心算法

2019-12-09 14:27hebedich JAVA教程

這篇文章簡單主要介紹了java貪心算法,包含貪心算法的基本思路,性質,以及實現示例,有需要的小伙伴參考下

貪心算法的基本思路

   1.建立數學模型來描述問題。 

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

 3.對每一子問題求解,得到子問題的局部最優解。 

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

 實現該算法的過程: 

 從問題的某一初始解出發; 

 while 能朝給定總目標前進一步 do 

 求出可行解的一個解元素;  

由所有解元素組合成問題的一個可行解。

貪心選擇性質

      所謂貪心選擇性質是指所求問題的整體最優解可以通過一系列局部最優的選擇,換句話說,當考慮做何種選擇的時候,我們只考慮對當前問題最佳的選擇而不考慮子問題的結果。這是貪心算法可行的第一個基本要素。
貪心算法以迭代的方式作出相繼的貪心選擇,每作一次貪心選擇就將所求問題簡化為規模更小的子問題。
      對于一個具體問題,要確定它是否具有貪心選擇性質,必須證明每一步所作的貪心選擇最終導致問題的整體最優解。

2.最優子結構性質
       當一個問題的最優解包含其子問題的最優解時,稱此問題具有最優子結構性質。問題的最優子結構性質是該問題可用貪心算法求解的關鍵特征。
貪心法的一般流程

 

復制代碼代碼如下:

Greedy(C)  //C是問題的輸入集合即候選集合
{
    S={ };  //初始解集合為空集
    while (not solution(S))  //集合S沒有構成問題的一個解
    {
       x=select(C);    //在候選集合C中做貪心選擇
       if feasible(S, x)  //判斷集合S中加入x后的解是否可行
          S=S+{x};
          C=C-{x};
    }
   return S;

 

問題描述:

當前有面值分別為2角5分,1角,5分,1分的硬幣,請給出找n分錢的最佳方案(要求找出的硬幣數目最少)

問題分析:

根據常識,我們到店里買東西找錢時,老板總是先給我們最大面值的,要是不夠再找面值小一點的,直到找滿為止。如果老板都給你找分數的或者幾角的,那你肯定不干,另外,他也可能沒有那么多零碎的錢給你找。其實這就是一個典型的貪心選擇問題。

問題的算法設計與實現

先舉個例子,假如老板要找給我99分錢,他有上面的面值分別為25,10,5,1的硬幣數,為了找給我最少的硬幣數,那么他是不是該這樣找呢,先看看該找多少個25分的,誒99/25=3,好像是3個,要是4個的話,我們還得再給老板一個1分的,我不干,那么老板只能給我3個25分的拉,由于還少給我24,所以還得給我2個10分的和4個1分。

 

復制代碼代碼如下:

//找零錢算法
//輸入:數組m,依次存放從大到小排列的面值數,n為需要找的錢數,單位全部為分
//輸出:數組num,對照數組m中的面值存放不同面值的硬幣的個數,就找錢方案
 public static int[] zhaoqian(int m[],int n)
 {
        int k=m.length;
        int[] num=new int[k];
        for(int i=0;i<k;i++)
        {
                num<i>=n/m<i>;
                n=n%m<i>;
        }
        return num;
 }

 

 

復制代碼代碼如下:

public class zhaoqian
{
 public static void main(String[] args)
 {
        int m[]={25,10,5,1};
        int n=99;
        int[] num=new int[m.length];
        num=zhaoqian(m,n);
        System.out.println(n+"的找錢方案:");
        for(int i=0;i<m.length;i++)
        System.out.println(num<i>+"枚"+m<i>+"面值");
 }
 public static int[] zhaoqian(int m[],int n)
 {
        int k=m.length;
        int[] num=new int[k];
        for(int i=0;i<k;i++)
        {
                num<i>=n/m<i>;
                n=n%m<i>;
        }
        return num;
 }
}

 

以上所述就是本文的所有內容了,希望小伙伴們能夠喜歡。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 俄罗斯年轻男同gay69 | 肥胖女性大bbbbbb视频女厕 | 好爽视频| voyeur多毛厕所 | 亚洲一级特黄 | 日本一片免费观看高清完整 | 久久精品黄AA片一区二区三区 | 久久国产视频网站 | 日本深夜影院 | h视频免费高清在线观看 | 吉泽明步高清无码中文 | 情侣奴伺候女王第2部分小说 | 四虎精品成人免费观看 | 久久爽狠狠添AV激情五月 | 天天快乐在线观看 | 97超pen个人视频公开视频视 | 精品无码久久久久久久动漫 | 双性np玩烂了np欲之国的太子 | 校花被老头夺去第一次动图 | 手机看片黄色 | 天天草天天 | xxxxxx日本处大片免费看 | 乌克兰13一14娇小 | h日本漫画全彩在线观看 | 小兰被扒开内裤露出p | 国产大片免费在线观看 | 国产日产韩产麻豆1区 | 国产精品毛片久久久久久久 | 国内精品福利丝袜视频_速 国内精品91久久久久 | 好吊色永久免费视频大全 | 无颜之月全集免费观看 | 男人网站视频 | 99在线在线视频免费视频观看 | 性一交一无一伦一精一品 | 毛片大全高清免费 | 色涩导航 | 成年人网站免费在线观看 | 日韩欧美三级视频 | 日本中文字幕在线精品 | 校花在公车上被内射好舒服 | 国产精品免费看久久久香蕉 |