zoukankan      html  css  js  c++  java
  • 高级算法:贪心算法

    一、定义

    什么是贪心算法呢?所谓贪心算法是指,在对问题求解时,总是做出在当前看来最好的选择。也就是说,不从整体最优解出发来考虑,它所做出的仅是在某种意义上的局部最优解。
    贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题都能产生整体最优解或整体最优解的近似解。

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

    1.建立数学模型来描述问题。

    2.把求解的问题分成若干个子问题。

    3.对每个子问题求解,得到每个子问题的局部最优解。

    4.把每个子问题的局部最优解合成为原来问题的一个解。

    实现该算法的过程:

    1. 从问题的某一初始状态出发;
    2. while 能朝给定总目标前进一步 do
    3. 求出可行解的一个解元素;
    4. 由所有解元素组合成问题的一个可行解;

    二、找零问题

    1、题目

    假设商店老板需要找零N元钱,钱币的面个有100元、50元、20元、5元、1元,如何找零使得所需钱币的数量最

    2、 实现代码

    money = [100,50,20,5,1]
    
    def change_money(x):
        change = [0,0,0,0,0]
        for i ,m in enumerate(money):
            change[i] = x // money[i]
            x = x % money[i]
        if x > 0:
            print("%s" % x)
        return change
    
    

    3、测试一

    1、输入98

    print(change_money(98))

    2、输出结果

    "C:Program FilesPython35python.exe" E:/工作目录/python/money_change.py
    [0, 1, 2, 1, 3]
    
    Process finished with exit code 0

    4、测试2

    1、输入0.5

    print(change_money(0.5))
    

    2、输出

    "C:Program FilesPython35python.exe" E:/工作目录/python/money_change.py
    还剩0.5
    [0.0, 0.0, 0.0, 0.0, 0.0]
    
    Process finished with exit code 0

    三、数字拼接游戏

    第一问:

     第二问

    四、贪心算法的其他应用

  • 相关阅读:
    java设计模式单例模式
    C++了解free和delete
    ExtJs开发教程_001_Ext.data.Store使用方法详解
    ExtJs开发教程_002_如何使用ExtJs中的Ext.data.TreeStore
    C++操作符重载
    【hibernate】学习期间总结与记录
    ExtJs常识性知识解答
    学习指针一些基本操作
    简记mysql在tomcat下和hibernate一起使用,No suitable driver found for的问题
    很高兴今天学了点新东西,关于Cache
  • 原文地址:https://www.cnblogs.com/luoahong/p/9722679.html
Copyright © 2011-2022 走看看