zoukankan      html  css  js  c++  java
  • 贪心算法并不贪婪(五)

    一、贪心算法的思想

      贪心算法也称贪婪算法,此算法思想不从整体最优上考虑问题,仅是在某种意义上的局部最优求解。由此可见贪心算法只是追求某范围内的最优,可以将其称之为“温柔的贪婪”。

      贪心算法存在的问题:

      (1)不能保证最后的解是最优的;(2)不能用来求最大或最小解的问题;(3)只能求满足某些约束条件的可行解的范围;

      贪心算法的基本思路如下所示:

      (1)建立数学模型来描述问题;(2)对每一个子问题分成若干子问题;(3)对每一个子问题求解,得到子问题的局部是最优解;(4)把子问题的局部最优解合并成原来问题的一个解。

      实现该算法的基本过程如下所示:

      (1)从问题的某一初始解触发;(2)while能向给定总目标前进一步;(3)求出可行解的一个解元素;(4)由所有解元素组合成问题的一个可行解。

    二、实例演练

      “”找零钱”方案问题

      算法思想:人民币有100、50、10、5、2、1、0.5、0.2、0.1等多种面额(单位为元)。在找零钱时有多种方案,例如零钱68.9元,至少有以下3种方案:

      (1)1张20、4张10、1张5、3张1、1张0.5、4张0.1;(2)2张20、2张10、1张5、3张1、1张0.5、4张0.1;(3)6张10、1张5、3张1、1张0.5、4张0.1。

      代码实现:

    #include "stdio.h"
    #define MAXN 9
    int parvalue[MAXN] = { 10000, 5000, 2000, 1000, 500, 100, 50, 10 };
    int num[MAXN] = { 0 };
    int exchange(int n);
    int main()
    {
        int i;
        float m;
        printf("输入需要找零金额:");
        scanf("%f", &m);
        exchange((int)100 * m);
        printf("
    %.2f元零钱的组成:
    ", m);
        for (i = 0; i < MAXN;i++)
        {
            if (num[i]>0)
            {
                printf("%6.2f:%d张
    ", (float)parvalue[i] / 100.0, num[i]);
            }
        }
        system("pause");
        return 0;
    }
    int exchange(int n)
    {
        int i, j;
        for (i = 0; i < MAXN;i++)
        {
            if (n>parvalue[i])
            {
                break;//找到比n小的最大面额
            }
        }
        while (n>0&&i<MAXN)
        {
            if (n>=parvalue[i])
            {
                n -= parvalue[i];
                num[i]++;
            }
            else if (n < 10&&n>=5)
            {
                num[MAXN - 1]++;
                break;
            }
            else
            {
                i++;
            }
        }
        return 0;
    }

      实现结果:

  • 相关阅读:
    perl练习——FASTA格式文件中序列GC含量计算&perl数组排序如何获得下标或者键
    短序列组装Sequence Assembly(转载)
    MEGA软件——系统发育树构建方法(图文讲解) 转载
    R语言中的read.table()
    网络七层模型OSI(Open System Interconnection)
    MySQL报错“The server time zone value '�й���׼ʱ��' is unrecognized”
    JDK环境变量配置
    netstat命令
    敏捷方法论(Agile Methodologies)
    0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded解决方法
  • 原文地址:https://www.cnblogs.com/hxf175336/p/9852367.html
Copyright © 2011-2022 走看看