贪心与拟阵

本文介绍了贪心算法的概念、局限性,通过实例说明其在最少硬币问题中的应用,并将其与动态规划进行对比。同时,讨论了拟阵理论,包括其定义、与贪心算法的关系以及在求解优化问题中的角色。
摘要由CSDN通过智能技术生成

目录

1.贪心法

1.1.贪心算法概念

1.2.贪心局限

最少硬币问题

1.3.贪心与动态规划对比

2.拟阵

2.1.什么是拟阵

2.2.拟阵与贪心


1.贪心法

1.1.贪心算法概念

        贪心算法(Greedy algorithm)是一种基于贪心策略的算法设计方法。在贪心算法中,每一步都选择当前状态下最优的选择,而不考虑全局的最优解。贪心算法通常用于解决优化问题,特别是组合优化问题。
        贪心算法的基本思想是通过局部最优选择来达到全局最优。在每一步中,贪心算法选择当前状态下的最优解,并将其添加到解集中。然后,它更新问题的输入,并继续进行下一步。这个过程一直重复,直到达到问题的解。
        贪心算法的优点是简单、高效,并且通常易于实现。然而,它并不适用于所有问题,因为贪心策略可能导致得到的解不是全局最优解。在一些情况下,贪心算法可能会得到次优解或根本无法找到解。
        要设计一个有效的贪心算法,需要满足贪心选择性质和最优子结构性质。贪心选择性质意味着通过选择局部最优解,可以得到全局最优解。最优子结构性质意味着问题的最优解可以通过子问题的最优解来构造。
        贪心算法的应用广泛,例如在图论中的最小生成树问题(如Prim算法和Kruskal算法),在调度问题中的任务调度(如最短作业优先调度算法),以及在背包问题中的分数背包问题等。
        需要注意的是,贪心算法并不是解决所有问题的万能方法,有些问题需要使用其他算法来得到最优解。因此,在使用贪心算法时,需要仔细分析问题的特点,并评估算法的适用性和正确性。

1.2.贪心局限

最少硬币问题

硬币面值1、2、5。支付13元,要求硬币数量最少。
贪心用最大面值5往下找到刚好13元
贪心:(1)5元硬币,2个;(2)2元硬币,1个;(3)1元硬币,1个。
硬币面值1、2、4、5、6。支付9元,要求硬币数量最少。
贪心:(1)6元硬币,1个;(2)2元硬币,1个;(3)1元硬币,1个;
错误,正确答案:5元硬币,1个+4元硬币,1个。

正确做法需用到动态规划

1.3.贪心与动态规划对比

贪心法求解的问题需要满足以下特征:

1.最优子结构性质:当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质,也称此问题满足最优性原理。从局部最优能扩展到全局最优。
2.贪心选择性质:问题的整体最优解可以通过一系列局部最优的选择来得到。

动态规划求解的问题需要满足以下特征:

1.重叠子问题:子问题是原大问题的小版本;计算大问题时需要多次重复计算小问题。
2.最优子结构:大问题的最优解包含小问题的最优解;可以通过小问题的最优解推导出大问题的最优解。

2.拟阵

        拟阵理论(Matroid Theory)是一门抽象的数学理论,研究的对象是拟阵。拟阵是一种广义的独立性结构,它推广了向量空间中的线性独立性概念,它是一种组合优化理论。拟阵理论起源于20世纪30年代,由哈西姆·德布斯(Hassler Whitney)和欧根·斯泰费尔(Eugene Steinitz)等人提出和发展。拟阵理论在组合优化、图论、算法设计等领域有广泛的应用。如果问题满足拟阵结构,那么贪心能得到最优解,但一个问题能用贪心解决,这个问题不一定满足拟阵结构。

2.1.什么是拟阵

拟阵由两个基本组成部分构成:基础集合(ground set)和独立集合(independent set)。基础集合是拟阵的元素集合,而独立集合是基础集合的子集,满足一定的性质。在拟阵中,独立集合被认为是不包含冗余元素的集合,类似于线性代数中的线性无关集合。

一个拟阵是满足以下条件的序对M=(S,L):

1.S是一个有穷集合;(例如:S={1,2,3,4})
2.L是S的一个非空子集族,L中的元素称为拟阵的独立集;(例如:上面的S的一个子集为{1,2,3},L={{1},{2},{3},{1,2},{1,3},{2,3}},L中有6个独立集)
3.M满足遗传性:对于独立集B,若B∈L,对于任意A\subseteqB,有A∈L;(例如:B={2,3},A={2},那么A∈L)
4.M满足交换性:对于任意A∈L,B∈L,且\left | A \right |< \left | B \right |,有某个元素x∈B-A,使得A∪{x}∈L。(例如:A={2},B={2,3},x=5,那么A∪{x}={2,3}∈L)

2.2.拟阵与贪心

把贪心问题转化为求权值最大的独立集

Gready(S,L,w)//拟阵M=(S,L)与权值函数w
    A={}//A初始化为空集
    sort S//将S内的元素x按权值w(x)从大到小降序排序
    for x in S://按从大到小的顺序遍历每一个x∈S
        if(A∪{x}∈L)
            A=A∪{x}
    return A//返回权值最大的独立集
  • 27
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lin..6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值