0-1背包问题-回溯&贪心算法-C#Demo

本文介绍了回溯算法的基本思想和特点,通过0-1背包问题展示了如何使用C#实现回溯算法。回溯算法是一种穷举策略,通过深度优先搜索并剪枝提高效率。文章提供了C#代码示例,帮助读者深入理解回溯算法。
摘要由CSDN通过智能技术生成

概述

     回溯算法的效率不是很高,就起本质而言,属于穷举,不同的是提供了一个穷举的思路:回溯。回溯算法也称试探法,基本思想是:从一条路往前走,能进则进。

what

     回溯法采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。回溯法通常用最简单的递归方法来实现,在反复重复上述的步骤后可能出现两种情况:
    1.找到一个可能存在的正确的答案
    2.在尝试了所有可能的分步方法后宣告该问题没有答案

特点

     深度搜索,确定了解空间的组织结构后,回溯法就从开始结点(根结点)出发,以深度优先的方式搜索整个解空间。这个开始结点就成为一个活结点,同时也成为当前的扩展结点。在当前的扩展结点处,搜索向纵深方向移至一个新结点。这个新结点就成为一个新的活结点,并成为当前扩展结点。如果在当前的扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。此时,应往回移动(回溯)至最近的一个活结点处,并使这个活结点成为当前的扩展结点。

     剪枝,回溯法是一个即带有系统性又带有跳跃性的搜索算法,当节点肯定不包含,则跳过对以该结点为根的子树的系统搜索,逐层向其祖先结点回溯,剪枝使得回溯算法效率提高了。

     有去有回,去按照深度遍历,回体现了回溯的思想。


C# Demo

     对于回溯的理解,是在代码的基础上不断加深的,分享一下自己写的代码,希望大家可以拍砖斧正~

 #region 回溯+贪心--刘雅雯--2017年9月26日21:36:29

        /// <summary>
        /// 从K节点扩展下去,计算得到的最大价值
        /// </summary>
        /// <param name="values"></param>
        /// <param name="weight"></param>
        /// <param name="VM"></param>
        /// <param name="n"></param>
        /// <param name="W"></param>
        
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值