子集树与排列树
来源:互联网 发布:淘宝企业店铺开店装修 编辑:程序博客网 时间:2024/06/01 20:14
在前面的利用回溯法求解01背包问题的时候,我们提到了这个问题的解空间树是子集树,那么什么是子集树呢?与子集树对应的还有一个排列树!它们又有什么区别呢?
概念说明
为了说明这两个概念的区别,我们首先假定有一个集合
当我们求解的结果是集合
当我们求解的结果是集合
解空间为排列树的典型问题就是旅行售货员问题。
简要说明啥是旅行售货员问题,用图论的术语来说就是:
在一个正权的完全图中寻找一个具有最小权的哈密顿回路(由指定的起点前往指定的终点,途中经过所有其他节点且只经过一次。)。
这样就很明确了,我们要寻找的就是所有点集的一个排列(所有点都需要经过且只经过一次)。
算法描述
子集树:
void Backtrack(int t) { //t 表示当前是树的第t层,即对集合 S 中的第 t 个元素进行判断 if (t > n) output(x); //大于S中总的元素个数 ,遍历完成 else for (int i = 0; i < = l; i++) { // 两种可能 加入或者不加入到解集合 x[t] = i; if (Constraint(t) && Bound(t)){ //满足约数条件 Backtrack(t + 1); //对 t+1 层进行判断 } }}
排列树:
void Backtrack(int t) { //t 表示集合 S 的第 t 个元素 if (t > n) output(x); else for (int i = t; i <= n; i++) { //第t 个元素与其后面的所有元素进行交换位置 swap(x[t], x[i]); if (constraint(t) && bound(t)){ backtrack(t + 1); } swap(x[t], x[i]); }}
阅读全文
1 0
- 子集树与排列树
- 子集树与排列树
- 子集树与排列树
- 子集树与排列树
- 回溯法:子集树与排列树
- 回溯法:子集树与排列树
- 子集树和排列树
- 子集树和排列树
- 子集树与排列树的伪代码
- [算法之回溯法] 子集树与排列树
- 回溯法之子集树与排列树
- 回溯法中子集树与排列树
- 回溯算法:子集树和排列树
- 回溯之子集树和排列树
- 全排列与子集生成
- Recursive backtrack & Non-recursive backtrack & Subset Tree & Permutation Tree 递归回溯与非递归回溯 排列树与子集树
- 回溯法——关于子集树和排列树
- 集合元素的排列与子集
- ubuntu装机必备+主题美化
- 部署Maven项目到tomcat报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderLi
- 关于微信公众号授权机制
- Java的基本循环结构
- 不用‘+’的Add函数
- 子集树与排列树
- Picasso框架的基本使用
- java方法 method
- 565. Array Nesting
- Android Studio 2.2 在已有项目中添加NDK
- Java:使用3层for循环遍历输出三维数组内容。
- hdu1010Tempter of the Bone
- 推荐系统评测指标—准确率(Precision)、召回率(Recall)、F值(F-Measure)
- 7/11:泛型接口