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实现过程

常见的两种解空间 全排列与幂集相关推荐

  1. 遍历集合常见的两种方式

    package sun;import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.u ...

  2. PCBA加工中常见的两种焊接方式详解

    PCBA加工中常见的两种焊接方式详解 PCBA加工,两种常见的焊接方式就是回流焊和波峰焊,与手动焊接技术相比,自动焊接技术具有减少人为因素的影响.提高效率.降低成本.提高质量等优势,在PCBA加工中, ...

  3. Eclipse设置jsp的编码格式最简单常见的两种方式

    Eclipse设置jsp的编码格式最简单常见的两种方式 为什么要改变编码方式,原因不外是为了程序运行时的方便,不会出现乱码,最初的jsp的编码并不是utf-8,而是其他iso-8859-1等等,但这样 ...

  4. 常见的两种注意力机制

    为什么需要注意力机制 seq2seq模型已经在机器翻译.自然语言处理领域取得了很大的进步,基于贝叶斯条件概率公式,seq2seq由一个编码器和一个解码器构成,编码器将源序列A编码成一个固定长度的特征向 ...

  5. U盘常见的两种故障解决方案,朋友们快来码住

    U盘被我们用来储存文件资料,因为它可以随身携带,所以我们常会用到.用得多了它就容易出一些故障,今天我带来U盘数据损坏和无法读取这两种常见故障的解决方法,需要的朋友就码住吧. 故障一:U盘无法打开 如果 ...

  6. 物联网智能家居需要服务器吗,智能家居设备常见的两种配网/联网方式

    你是否用过智能家居?你知道智能家居是怎么连上你家WIFI热点吗?你是否好奇APP是怎么和智能家居通话的?今天的这篇文章为你揭晓智能家居配网原理. 绝大多数智能家居都要求用户安装一个APP,通过APP完 ...

  7. 常见的两种python编译器的安装

    常用的python语言编译器有两种,一种是python本身自带的编译器,一种是anaconda编译器(包含了各种机器学习裤,极大方便了使用).下面我分别介绍以下两个编译器安装方法. python安装 ...

  8. apa引用要在文中吗_SCI论文:常见的两种参考文献引用方式

    参考文献的引用,不外乎两种方式,直接引用原文献的内容,并做好引注;间接引用,转述原文献的意思.那么,当你在引用文献的时候,你是选择直接引用还是间接引用呢?回答这个问题之前,不妨先来了解这两种引用方式. ...

  9. 股票数据常见的两种获取方法是什么?

    股票数据的获取目前有如下两种方法可以获取: 1.http/javascript接口取数据 2.web-service接口 1.http/javascript接口取数据 1.1Sina股票数据接口 以大 ...

  10. macOS系统病毒常见的两种传播途径

    相信在多数用户的印象里,macOS系统几乎不会受到病毒的影响.一方面,由于Windows市场占有率大,吸引了绝大部分的黑客和病毒攻击,从而显得针对macOS系统的攻击较少:另一方面,得益于苹果商店对软 ...

最新文章

  1. Android layer-list 使用
  2. (详细讲解)配置Pycharm连接服务器跑本地代码
  3. Libgdx New 3D API 教程之 -- 使用Libgdx加载模型
  4. WP8中 ListBox x下拉刷新 以及 ScrollViewer/ListBox 的ManipulationCompleted 失效的解决方案
  5. SSM实现根据后台控制禁用select
  6. VTK:小部件之ImageTracerWidgetNonPlanar
  7. linux服务器文件名称乱码,linux中文文件名乱码怎么解决?
  8. 第一章节 ASP.NET Web应用程序基础(一)
  9. c语言对字符串逆序,【C语言】 字符串逆序
  10. Android BufferQueue生产消费原理(八)
  11. 计算机软件的初始密码,怎么设置电脑软件密码
  12. c语言求最长单调子序列,设计一个O(n2)时间算法,找出由n个数组成的序列的最长单调递增子序列...
  13. Django之Form表单验证组件Tyrion
  14. 视频剪辑完成,应该如何给视频配音?三种配音方法快来学
  15. 0x800700c1添加语言,Win10更新失败出现”0x800700C1“错误的解决方法
  16. java获得对象类名_获取Java中各种对象的类名
  17. android英文文献翻译,安卓 英文 外文 文献翻译 android api级别.doc
  18. Greenplum数据库数据分片策略Hash分布——GUC gp_use_legacy_hashops
  19. Air724UG之串口通信
  20. qq android平板电脑,QQ(Pad版)

热门文章

  1. photoshop实用技巧
  2. SQL考点之存储过程、存储函数、游标
  3. HDU1071微积分公式求曲线面积
  4. 对话乔会君丨两年服务1700家企业,洪泰智造如何锻造下一个独角兽?
  5. 心灵鸡汤——人生哲理
  6. 集合论中关系矩阵的布尔乘法运算与优化
  7. 织梦dedecms蓝色大学院校学校网站模板(自适应手机移动端)
  8. 解决IE11兼容HTML5 设置
  9. sqlserver 2017 windows版本下载
  10. 通过爬虫获取免费IP代理,搭建自己的IP池(https)