算法第5章作业

1.你对回溯算法的理解

  回溯算法是以深度优先为策略的有选择性的穷举法。每作出一次选择之后回溯,然后作另外的选择,在不同选择当中选取最优解。约束函数可以减少选择,更快找到最优解。

 

2.请说明“子集和”问题的解空间结构和约束函数

  解空间 { (0, 0, 0, 0, 0), (0, 0, 0, 0, 1), (0, 0, 0, 1, 0), (0, 0, 0, 1, 1), (0, 0, 1, 0, 0), (0, 0, 1, 0, 1), (0, 0, 1, 1, 0), (0, 0, 1, 1, 1), (0, 1, 0, 0, 0), (0, 1, 0, 0, 1), (0, 1, 0, 1, 0), (0, 1, 0, 1,   

  1), (0, 1, 1, 0, 0), (0, 1, 1, 0, 1), (0, 1, 1, 1, 0), (0, 1, 1, 1, 1), (1, 0, 0, 0, 0), (1, 0, 0, 0, 1), (1, 0, 0, 1, 0), (1, 0, 0, 1, 1), (1, 0, 1, 0, 0), (1, 0, 1, 0, 1), (1, 0, 1, 1, 0), (1, 0, 1, 1, 1), (1,   

  1, 0, 0, 0), (1, 1, 0, 0, 1), (1, 1, 0, 1, 0), (1, 1, 0, 1, 1), (1, 1, 1, 0, 0), (1, 1, 1, 0, 1), (1, 1, 1, 1, 0), (1, 1, 1, 1, 1) }

  0表示不选择,1表示选择

  

  约束函数

  if(sum + a[t] <= c) {
    x[t] = 1 ;
    sum = sum+a[t] ;
    if (backtrack(t+1))
     return true;
    sum -= a[t];
   }
    if(sum + rest >= c) {
    x[t] = 0 ;
    if (backtrack(t+1))
     return true;
   }

  现在的子集和 + 下一个数字a[t] <= 目标值 选择a[t],回溯

  现在的子集和 + 剩余数字之和rest >= 目标值 不选择a[t], 对下一个数字做选择

 

3.请说明在本章学习过程中遇到的问题及结对编程的情况

  对排列树的用法不太熟悉,回溯过程有点难理解,结对编程的时候一起学习排列树的回溯

 

  

你可能感兴趣的:(算法第5章作业)