zoukankan      html  css  js  c++  java
  • 算法分析与设计——回溯法实验报告

     

       算法导论  课程设计

     

     

    题    目:    回 溯 法    

     

     

     

     

     

     

    学院班级:        1613013        

    学    号:      16130130216      

    姓    名:        库 妍          

    主讲教师        张立勇         

    日    期:       2019.5.30        

     

     

     

     

     

     

     

    一、0/1 Knapsack Problem

    1、实验题目

    运用回溯法实现实验3中的0/1背包问题

    2、使用的算法

    回溯法

    3、算法分析与设计

    利用回溯法试设计一个算法求出0-1背包问题的解,也就是求出一个解向量xi (即对n个物品放或不放的一种的方案) 其中, (xi = 0 或1,xi = 0表示物体i不放入背包,xi =1表示把物体i放入背包)。在递归函数Backtrack中:

    i>n时,算法搜索至叶子结点,得到一个新的物品装包方案。此时算法适时更新当前的最优价值。    

    i<n时,当前扩展结点位于排列树的第(i-1)层,此时算法选择下一个要安排的物品,以深度优先方式递归的对相应的子树进行搜索,对不满足上界约束的结点,则剪去相应的子树。

    4、项目测试(功能与性能)

    因为物品只有选与不选2个决策,而总共有n个物品,所以时间复杂度为O(2^n)。因为递归栈最多达到n层,而且存储所有物品的信息也只需要常数个一维数组,所以最终的空间复杂度为O(n)。

     

    5、实验总结

    0/1背包属于找最优解问题,用回溯法需要构造解的子集树。对于每一个物品i,对于该物品只有选与不选2个决策,总共有n个物品,可以顺序依次考虑每个物品,这样就形成了一棵解空间树:基本思想就是遍历这棵树,以枚举所有情况,最后进行判断,如果重量不超过背包容量,且价值最大的话,该方案就是最后的答案。

    二、8-Queen problem

    1、实验题目

    用回溯法实现8-queen问题。

    2、使用的算法

    回溯法

    3、算法分析与设计

    1)使用一个一维数组表示皇后的位置,其中数组的下标表示皇后所在的行,数组元素的值表示皇后所在的列。

    2)假设前n-1行的皇后已经按照规则排列好,那么可以使用回溯法逐个试出第n行皇后的合法位置, 所有皇后的初始位置都是第0列, 那么逐个尝试就是从0试到N-1,如果达到N,仍未找到合法位置, 那么就置当前行的皇后的位置为初始位置0,然后回退一行,且该行的皇后的位置加1,继续尝试, 如果目前处于第0行,还要再回退,说明此问题已再无解。

    3)如果当前行的皇后的位置还是在0到N-1的合法范围内,那么首先要判断该行的皇后是否与前几行的皇后互相冲突,如果冲突,该行的皇后的位置加1,继续尝试,如果不冲突,判断下一行的皇后, 如果已经是最后一行,说明已经找到一个解,输出这个解,然后最后一行的皇后的位置加1,继续尝试下一个解。

    4、项目测试(功能与性能)

     

    5、实验总结

    理解回溯法解题思路:

    1)针对所给问题,定义问题的解空间;   
    2)确定易于搜索的解空间结构;   
    3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

     

     

  • 相关阅读:
    刷题总结——蚯蚓(NOIP2016DAY2T2)
    刷题总结——愤怒的小鸟(NOIPDAY2T3)
    算法复习——高斯消元(ssoi)
    算法复习——高精度集合
    刷题总结——系列维护(ssoi)
    刷题总结——传送带(四川省选)
    算法复习——数位dp(不要62HUD2089)
    算法复习——单调队列(sliding windows,ssoi)
    刷题总结——road(ssoi)
    linux命令学习笔记(61):tree 命令
  • 原文地址:https://www.cnblogs.com/ku1274755259/p/11108486.html
Copyright © 2011-2022 走看看