状态空间树

article/2025/9/13 0:04:13

状态空间树:

就是问题的解空间树,分为子集树和排列树

子集树

当所给的问题是从n个元素组成的集合set中找到满足某一条件的一个子集时,相应的解空间树称为子集。
要注意,这个解空间树是一个虚拟的树,并不是构建出来的,如下面这颗树:
有三个物品n = 3,(类似于0-1背包问题)
xi = {0、1}表示第 i 个物品 ni 是否选中,
xi = 0 表示未选中,xi = 1表示选中

树有三层,第 i 层表示物品 ni,数字1、0表示 xi 的值
解空间树的所有可能,叶子上的个节点到A的路线代表了一个子集树——一种可能的解法
叶子上的个节点到A的路线代表了一个子集树——一种可能的解法,如 H 代表了111,表示n1、n2、n3都被选中,I表示110,n1、n2被选中,n3未被选中。
以下用两个例子来解释解空间树

0-1背包中使用穷举法

本文先从简单的穷举法开始介绍子集树
穷举法得到每一个子集树

  • 若当前为非叶节点
    将1压栈
    递归访问左子树
    (递归访问左子树递归到最后时,例如访问到 H 时,就要pop了)
    将0压栈
    递归访问右子树
    (递归访问右子树递归到最后时,例如访问到 I 时,就要pop了)
  • 若当前为叶节点
    顺序打印栈中内容
import java.util.Stack;public class BruteForce {static Stack<Integer> stack = new Stack<>();static void subSetTree(int n) {if (n > 0) {stack.push(0);subSetTree(n - 1);stack.pop();stack.push(1);subSetTree(n - 1);stack.pop();} else {for (Integer integer : stack) {System.out.print(integer);}System.out.println();}}public static void main(String[] args) {subSetTree(3);}}

排列树

TSP(Travelling Saleman Problem,货郎担、邮递员)问题、或者求全排列的问题。
以全排列为例:
定义:
设Set{S1, S2, S3,…, Sn}有 n 个元素,Seti = Set - {Si}
子集合 X 中元素的全排列记为 arrange(X),
(Si)arrange(Seti)表示在全排列arrange(Seti)的每一个排列前加上前缀Si得到的排列。
Seti表示Set中没有Si元素

Set的全排列可归纳如下
当n=1时,arrange(Set)=(S1),其中S1是集合Set中唯一的元素;
当n>1时,arrange(Set)由(S1)arrange(Set1),…, (Sn)arrange(Setn)构成。
实现思想
将整组数中的所有的数分别与第一个数交换,这样就总是在处理后n-1个数的全排列。

有ABC三个字母,求其全排列:
当n = 3,并且Set = {a,b,c},则:
arrange(Set)=a.arrange({b,c}) + b.arrange({a,c}) + c.arrange({a,b})
arrange({b,c})=b.arrange© + c.arrange(b)
a.arrange({b,c})=ab.arrange© + ac.arrange(b)
=ab.c + ac.b=(abc, acb)
全排列的状态空间树

全排列

public class Tsp {static int[] s;static void arrangeTree(int i, int n) {// 为什么是 i < n -1。因为最后一个不用交换了if (i < n - 1) {for (int j = i; j < n; j++) {// swap(s[i], s[j]);int k = s[j];s[j] = s[i];s[i] = k;arrangeTree(i + 1, n);// 这里swap,是因为arrangeTree(i + 1, n);前的swap影响了数组 s 的顺序。// swap(s[i], s[j]);k = s[j];s[j] = s[i];s[i] = k;}} else {for (int j : s) {System.out.print(j);}System.out.println();}}public static void main(String[] args) {int n = 3;s = new int[n];for (int i = 0; i < n; i++) {s[i] = i + 1;}arrangeTree(0, n);}}

在这里插入图片描述

emmmm,全排列这个其实挺迷的

总结

  • 递归简单,但如何将问题分解成递归就不容易了
  • 递归的判出界限让人很迷

http://chatgpt.dhexx.cn/article/HgwIlsmr.shtml

相关文章

matlab状态空间程序,将状态空间表示形式转换为传递函数

理想的一维振荡系统由位于两面墙壁间的两个单位质点 m1 和 m2 组成。每个质点通过一根单位弹性常量弹簧连接到最近的墙壁。另外一根弹簧连接这两个质点。传感器以 Fs=16 Hz 的频率对 a1 和 a2(质点的加速度)采样。 将总测量时间指定为 16 秒。定义采样间隔 Δt=1/Fs。 Fs = 16;…

状态空间表示

前言 本文隶属于专栏《人工智能》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见人工智能 引子 人工智能的多个研究领域从求解现实问题的过程来看&#xf…

现控笔记(二):状态空间表达式

控制系统状态空间表达式 系统动态过程的两类数学描述&#xff1a; 外部描述&#xff1a;&#xff08;输入——输出描述&#xff09; 内部描述&#xff1a;状态空间描述 两个方程描述&#xff1a;状态方程&#xff08;动态&#xff09;&#xff0c;输出方程&#xff08;静态&am…

【现控】系统状态空间表达式

【现控】1 系统状态空间表达式 一、基本概念 状态&#xff1a;状态是变化的&#xff0c;是时域里的一系列变量。它可以数字、曲线或者其他什么更为抽象的东西描述。 状态变量&#xff1a;能够完全描述系统的最小一组变量。可抽象可具体。 状态空间&#xff1a;以状态变量构成…

现代控制理论——状态、状态空间、状态空间描述

一、状态&#xff1a; 动态系统的状态粗略地说就是指系统的过去、现在和将来的运动状况。精确地说&#xff0c;状态需要一组必要而充分的数据说明。 对于运动的小车&#xff0c;系统的状态可以为位置和速度&#xff0c;对于电机可以为转速。 二、系统变量 1、状态变量 系统…

现代控制理论(1)——状态空间表达式

文章目录 一、状态变量及状态空间表达式二、状态空间表达式模拟结构图三、状态空间表达式的建立1.由系统框图建立2.由系统的机理建立3.由微分方程或传递函数建立3.1能控标准型3.2能观标准型 四、状态矢量的线性变换1.状态空间表达式变换为约当标准型2.当A为友矩阵时3.系统的并联…

matlab数据类型 —— 逻辑型

matlab系列文章&#xff1a;&#x1f449; 目录 &#x1f448; 文章目录 〇、概述一、逻辑型二、逻辑型创建1. 直接赋值2. 根据表达式创建3. 使用 logical 函数转换 三、逻辑型矩阵1. 创建逻辑型矩阵2. 转化逻辑型矩阵 〇、概述 逻辑型&#xff1a;也就是其它语言中的布尔型&…

matlab数据类型 —— 浮点型

matlab系列文章&#xff1a;&#x1f449; 目录 &#x1f448; 文章目录 〇、概述一、单精度浮点型二、双精度浮点型三、浮点型的最小值与最小值例1. 查看双精度浮点型以及单精度浮点型的最大正值和最小正值 四、浮点型创建例2. 将数据转换成浮点型 四、浮点型参与的运算1. 运…

MATLAB基础—数据类型

一、数据类型 1、整形数据 &#xff08;1&#xff09;有符号整数&#xff08;int&#xff09; ①、int8 —— 8位有符号整数&#xff08;只能取到 -128 — 127&#xff0c;大于127的数&#xff0c;输出结果为127&#xff1b;小于 -128 的数&#xff0c;输出为-128&#xff0…

Matlab里的数据类型

在Matlab里一共有四大类数据类型&#xff1a; 1、数值类型 2、逻辑类型 3、字符和字符串类型 4、结构体类型 这四大类数据类型的存储都是用矩阵来存储的 1、数值类型 数值类型即存储不同种类变量的类型&#xff0c;数值类型有五种&#xff1a;浮点数、整数、复数、Inf、NaN. …

MATLAB数据类型——整数

整数 MATLAB 支持以 1 字节、2 字节、4 字节和 8 字节几种形式存储整数数据。有意识地去使用可容纳您的数据的最小整数类型来存储数据&#xff0c;可以达到节省内存和程序执行时间的目的。 MATLAB具有四个有符号整数类和四个无符号整数类。 有符号类型能够处理负整数以及正整数…

MATLAB数据类型——浮点数

浮点数 MATLAB 以双精度或单精度来表示浮点数&#xff0c;默认数值类型为双精度 双精度浮点&#xff08;double&#xff09;&#xff1a;以 double 形式存储的任何值都需要 64 位 单精度浮点&#xff08;single&#xff09;&#xff1a;以 single 形式存储的任何值都需要 32 位…

MATLAB 数据类型中的结构体类型,及其构造方法

Matlab中的数据类型一共有四大类分别为&#xff1a; 1、数值类型 2、逻辑类型 3、字符和字符串类型 4、结构体类型 关于数据类型&#xff0c;尤其是前三种类型具体可见Matlab里的数据类型已经对其进行了详细的介绍。 而结构体类型中的每个属性&#xff0c;都可以是以上四大类中…

matlab数据类型 —— 整型

matlab系列文章&#xff1a;&#x1f449; 目录 &#x1f448; 文章目录 〇、概述一、有符号整型二、无符号整型三、整型创建例1. 将数据转换成整型 四、整数参与的运算1. 运算中的注意事项例2. 整型参与的数值运算 〇、概述 整型&#xff1a;是指没有小数点及以后数据部分的…

matlab如何改变数据类型,matlab数据类型转换实用案例

之前群友在群里发了一张有关数据类型转换的图片 数据类型转换对于经常使用Matlab的人来说真的是很基础且实用的知识点&#xff0c;but! 相互之间转换关系很复杂不容易记&#xff0c;每次使用的时候都要百度&#xff0c;为了方便大家记住数据类型转换关系&#xff0c;转换图便应…

Matlab 数据类型

数值类型--整数类型 Matlab中的整数类型&#xff0c;不同的整数类型占据的位数不同&#xff0c;实际应用中&#xff0c;应根据实际需求合理选择合适的整数类型。 Matlab中数值默认是以双精度浮点类型存储&#xff0c;在不超出数值范围的情况下&#xff0c;任意两个整数之间可以…

MATLAB数据类型及转换

MATLAB数据类型及转换 MATLAB的主要数据类型有&#xff1a;整型&#xff0c;浮点型&#xff0c;逻辑&#xff0c;字符&#xff0c;日期和时间&#xff0c;结构数组&#xff0c;细胞数组及函数句柄等&#xff0c;其中函数句柄是MATLAB所特有的一种数据类型。 一&#xff1a;整…

MATLAB-数据类型

默认情况下&#xff0c;MATLAB 存储所有数值变量为双精度浮点值。其他数据类型存储文本&#xff0c;整数或单精度值或单个变量中相关数据的组合。 MATLAB不需要任何类型声明或维度语句。当MATLAB遇到新的变量名称时&#xff0c;它将创建变量并分配适当的内存空间。 如果变量已…

MC20E资料

MC20E资料 U创论坛下载-Quectel_射频LAYOUT_应用指导_V2.2.pdf 文件到原文下载&#xff0c;原文出自&#xff1a;https://bbs.usoftchina.com/thread-202777-1-1.html

移远BC26/BC28(略)/MC20开发之环境搭建 一

1.对于常见的移远OPENCPU开发来说&#xff0c;第一步安装GCC编译器 2.第二步&#xff0c;安装一个集成编译环境&#xff0c;常见的是keil编译环境 3.环境的配置(仅 BC28) 4.最后检查环境是否搭建好 BC28,命令如下&#xff1a; MC20/BC26&#xff0c;命令如下 make clean:清除 m…