常用算法之贪心

本文介绍了贪心算法的应用前提、基本步骤及其实现框架,并通过找零钱问题为例进行了详细解析。

            一、背景

          在软考的准备中,遇到了算法,听过来人收,算法研究好了就很简单,研究不好就觉得很难,于是想着对算法做个总结,因为算法不仅仅在大题中占有15分,而且在选择题中同样也会出现,尤其是考复杂度和各种算法的适用情况,

          贪心(目光短浅):就像找男女朋友一样,不求最好,只求合适(可行解)  

          二、如何知道在某种情况下用贪心是合适的呢?

             

        贪心策略适用的前提是:局部最优策略能导致产生全局最优解。
          实际上,贪心算法适用的情况很少。一般,对一个问题分析是否适用于贪心算法,可以先选择该问题下的几个实际数据进行分析,就可做出判断。
         三、贪心算法实现的基本步骤:         
     

            1、候选集合(C)

    通过一个候选集合C作为问题的可能解。(最终解均取自于候选集合C)

    例如,在找零钱问题中,各种面值的货币构成候选集合。

         2、解集合(S)

    每完成一次贪心选择,将一个解放入S,最终获得一个完整解S

         3、解决函数(solution)

    检查解集合S是否构成问题的完整解。

    例如,在找零钱问题中,解决函数是已付出的货币金额恰好等于应付款。

         4、选择函数(select)

    即贪心策略,这是贪心法的关键,选择出最有希望构成问题的解的对象。(这个选择函数通常和目标函数有关)

          例如,在找零钱问题中,贪心策略就是在候选集合中选择面值最大的货币。

      5、可行函数(feasible)

    检查解集合中加入一个候选对象是否可行。(加入下一个对象后是不是满足约束条件)

    例如,在找零钱问题中,可行函数是每一步选择的货币和已付出的货币相加不超过应付款。  

            四、贪心算法的实现框架
    
           从问题的某一初始解出发;
          while (能朝给定总目标前进一步)
         { 
             利用可行的决策,求出可行解的一个解元素;
        }
        
            由所有解元素组合成问题的一个可行解;

        用C解释如下:
             
<span style="font-size:14px;">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;  
  
}  
</span>

  

内容概要:本文围绕可变桨叶四旋翼无人机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力学模型,并设计了多种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无人机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无人机飞控系统的设计与优化提供了理论依据和技术支持。; 适合人群:具备一定自动控制理论基础和Matlab编程能力,从事无人机控制、飞行器动力学或机器人系统研究的科研人员及研究生。; 使用场景及目标:① 实现四旋翼无人机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无人机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力学建模、控制律设计与推力分配模块。在学习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无人机控制机理的理解。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值