常见的两种解空间 全排列与幂集
1.全排列
全排列解空间是常见的一种解空间.
下面介绍一下它的基本遍历方法
定义Full(a) 为 a 数组的全排列
插入法
a = {1}
//插入 元素2 有两种方式
a = {2,1} , a = {1,2}
//同理再插入 3
a = {3,2,1}, a = {2,3,1} ,a= {2,1,3}
a = {3,1,2}, a = {1,3,2} ,a= {1,2,3}
...
//依此类推即可
队首法
a = {1,2,...,n}//轮流将元素放在队首
for(i){将 i 放在队首a = {i, Full(p)}//p为剩下元素//p只有一个元素即为出口
}
java代码
public static void full(int a[], int n) {if (n == a.length) {{//do something}return;}for (int i = n; i < a.length; i++) {//这是队首法//for (int i = 0; i <= n; i++) {//这是插入法swap(a, i, n);full(a, n + 1);swap(a, i, n);}}
总结
实际上两种方法只是一个对称的关系
插入法是 自底向上 的方法
队首法是 自顶向下 的方法
(ps:方法命名为博主命名,并不权威)
2.幂集
幂集解空间是常见的一种解空间(例如01背包).
下面介绍一下它的基本遍历方法
java代码
这个分析起来并不复杂,每个元素有typeNum中状态
递归+回溯 即可
public static void mi(int a[], int n) {if (n == a.length) {{// do something}return;}for (int i = 0; i < typeNum; i++) {//遍历所有装态数a[n] = i;mi(a, n + 1);a[n] = 0;}}
总结
幂集的暴力遍历是简单的,但是时间复杂度是极高的 O(power(m,n))
所以有很多时候并不选它解决问题,而是使用其他的方法
如 贪心法, 动态规划等
参考文章
(算法)全排列的递归算法Java实现过程
常见的两种解空间 全排列与幂集相关推荐
- 遍历集合常见的两种方式
package sun;import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.u ...
- PCBA加工中常见的两种焊接方式详解
PCBA加工中常见的两种焊接方式详解 PCBA加工,两种常见的焊接方式就是回流焊和波峰焊,与手动焊接技术相比,自动焊接技术具有减少人为因素的影响.提高效率.降低成本.提高质量等优势,在PCBA加工中, ...
- Eclipse设置jsp的编码格式最简单常见的两种方式
Eclipse设置jsp的编码格式最简单常见的两种方式 为什么要改变编码方式,原因不外是为了程序运行时的方便,不会出现乱码,最初的jsp的编码并不是utf-8,而是其他iso-8859-1等等,但这样 ...
- 常见的两种注意力机制
为什么需要注意力机制 seq2seq模型已经在机器翻译.自然语言处理领域取得了很大的进步,基于贝叶斯条件概率公式,seq2seq由一个编码器和一个解码器构成,编码器将源序列A编码成一个固定长度的特征向 ...
- U盘常见的两种故障解决方案,朋友们快来码住
U盘被我们用来储存文件资料,因为它可以随身携带,所以我们常会用到.用得多了它就容易出一些故障,今天我带来U盘数据损坏和无法读取这两种常见故障的解决方法,需要的朋友就码住吧. 故障一:U盘无法打开 如果 ...
- 物联网智能家居需要服务器吗,智能家居设备常见的两种配网/联网方式
你是否用过智能家居?你知道智能家居是怎么连上你家WIFI热点吗?你是否好奇APP是怎么和智能家居通话的?今天的这篇文章为你揭晓智能家居配网原理. 绝大多数智能家居都要求用户安装一个APP,通过APP完 ...
- 常见的两种python编译器的安装
常用的python语言编译器有两种,一种是python本身自带的编译器,一种是anaconda编译器(包含了各种机器学习裤,极大方便了使用).下面我分别介绍以下两个编译器安装方法. python安装 ...
- apa引用要在文中吗_SCI论文:常见的两种参考文献引用方式
参考文献的引用,不外乎两种方式,直接引用原文献的内容,并做好引注;间接引用,转述原文献的意思.那么,当你在引用文献的时候,你是选择直接引用还是间接引用呢?回答这个问题之前,不妨先来了解这两种引用方式. ...
- 股票数据常见的两种获取方法是什么?
股票数据的获取目前有如下两种方法可以获取: 1.http/javascript接口取数据 2.web-service接口 1.http/javascript接口取数据 1.1Sina股票数据接口 以大 ...
- macOS系统病毒常见的两种传播途径
相信在多数用户的印象里,macOS系统几乎不会受到病毒的影响.一方面,由于Windows市场占有率大,吸引了绝大部分的黑客和病毒攻击,从而显得针对macOS系统的攻击较少:另一方面,得益于苹果商店对软 ...
最新文章
- Android layer-list 使用
- (详细讲解)配置Pycharm连接服务器跑本地代码
- Libgdx New 3D API 教程之 -- 使用Libgdx加载模型
- WP8中 ListBox x下拉刷新 以及 ScrollViewer/ListBox 的ManipulationCompleted 失效的解决方案
- SSM实现根据后台控制禁用select
- VTK:小部件之ImageTracerWidgetNonPlanar
- linux服务器文件名称乱码,linux中文文件名乱码怎么解决?
- 第一章节 ASP.NET Web应用程序基础(一)
- c语言对字符串逆序,【C语言】 字符串逆序
- Android BufferQueue生产消费原理(八)
- 计算机软件的初始密码,怎么设置电脑软件密码
- c语言求最长单调子序列,设计一个O(n2)时间算法,找出由n个数组成的序列的最长单调递增子序列...
- Django之Form表单验证组件Tyrion
- 视频剪辑完成,应该如何给视频配音?三种配音方法快来学
- 0x800700c1添加语言,Win10更新失败出现”0x800700C1“错误的解决方法
- java获得对象类名_获取Java中各种对象的类名
- android英文文献翻译,安卓 英文 外文 文献翻译 android api级别.doc
- Greenplum数据库数据分片策略Hash分布——GUC gp_use_legacy_hashops
- Air724UG之串口通信
- qq android平板电脑,QQ(Pad版)