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

    一、面向的问题

    问题

    在问题的解空间中,搜索满足约束方程并使用目标函数达极值的解向量(集合中寻找最优子集)。

    这类问题具有以下特点:

    • 由初始输入构成的解空间;
    • 约束方程,确定可行解;
    • 目标函数(优化目标),确定最优解;

    算法设计

    适用贪心算法的问题有两个主要性质

    • 贪心选择性:全局最优解,可以由一系列局部最优选择来达到;每次选择得到一个局部最优解,并把问题转化为一个规模更小的类似子问题。
    • 最优子结构:指一个问题的最优解中包含其子问题的最优解。

    使用贪心算法第一步,是证明问题具有“最优子结构性质”,从而贪心算法收敛;

    二、问题的解决

    算法伪代码

    greedy(A, n)
    {
        solution = Q;
        for (i=1;i<n;i++){
                x = select(A);
                if (feasible(solution, x))
                      solution = union(solution, x);
         }
          return solution;      
    }  

    包含了三种行为:

    • select
    • feasible
    • union

    三、典型例子

    背包问题等

     Dijkstra最短路径

  • 相关阅读:
    浏览器渲染原理
    React Router
    链式 add 函数
    函数防抖和函数节流
    242. 有效的字母异位词
    faker 生成模拟数据
    A 第五课 二叉树与图
    使用递归解决问题
    A 第四课 递归_回溯_分治
    A 第三课 贪心算法
  • 原文地址:https://www.cnblogs.com/eniac1946/p/8716147.html
Copyright © 2011-2022 走看看