06 2013 档案

回溯法(非递归实现)
摘要:问题:给出一些数目,可以用加减乘除计算结果,求一些满足条件的结果。例如算24点。简化:生成+-*/的所有可能计算方式。(貌似不是数学中的排列,也不是数学中的组合)求解:(非递归)回溯法。#include using namespace std;// 0=>+, 1=>-, 2=>*, 3=>/int op[100];int count = 0;void output(int n){ for(int i = 0; i -1) { if (i == n) { count++; output(n); ... 阅读全文

posted @ 2013-06-24 14:29 caigen 阅读(3302) 评论(0) 推荐(0)

回溯法
摘要:http://en.wikipedia.org/wiki/Backtracking回溯法:基于记忆。在某个点(回溯点),前进试探一种的方案,然后再回退到这个点,前进试探下一种方案。其与递归,状态树的树枝扩展,深度优先有着某些本质联系。需要显式或隐式的记忆:哪些被前进尝试过,哪些未被前进尝试过。在回溯点回溯时需要:清理上一个方案的扩展状态,使用下一个方案的新扩展状态。问题:给出一些数目,可以用加减乘除计算结果,求一些满足条件的结果。例如算24点。简化:生成+-*/的所有可能计算方式。(貌似不是数学中的排列,也不是数学中的组合)求解:(递归实现的)回溯法。#include using namesp 阅读全文

posted @ 2013-06-24 13:57 caigen 阅读(570) 评论(0) 推荐(0)

暴力搜索
摘要:http://en.wikipedia.org/wiki/Brute_force_search暴力搜索的算法步骤:1)第一个解作为当前解。2)处理当前解(如果满足条件则输出,否则忽略)。3)生成下一个解作为当前解,继续2下去。所以也将称其为穷举或者生成-测试。尤其是名字生成-测试更能反映其算法结构。即:first(); do { } while (next());问题:给出一些数目,可以用加减乘除计算结果,求一些满足条件的结果。例如算24点。简化:生成+-*/的所有可能计算方式。(貌似不是数学中的排列,也不是数学中的组合)求解:暴力搜索法。// 0=>+, 1=>-, 2=> 阅读全文

posted @ 2013-06-23 23:18 caigen 阅读(1911) 评论(0) 推荐(1)