排列树和子集树

news2024/9/28 3:30:42

 排列树

输出数组的全排列

排列问题:
    设R = {r1,r2,r3,…,rn}是要排列的n个元素,Ri = R - {r1}
    集合X中元素的全排列记为perm(X)。(ri)perm(x)便是在全排列perm(X)的每一个排列前加上前缀ri得到的排列。


    R的全排列:
        n=1时,perm(R) = (r),r是集合R中唯一的元素
        n>1时,perm(R)由(ri)perm(R1),(r2)perm(R2),…,(ri)perm(Ri)构成


R全排列的图即为排列树(分治策略)

这种在数组中缩小规模的函数最好用两个指针,一个指向数组首,一个指向尾。

排列时将作为头的元素交换到第一个位置方便后面的数排列(如:下图中2,3排所示)

当数组中只剩一个元素时排列完成,从头输出这个排列

void Perm(int* nums, int k, int m)
{
	if (k == m)//排列完成了
	{
		for (int i = 0; i <= m; i++)
		{
			printf("%-5d", nums[i]);//输出这个排列
		}
		printf("\n");
	}
	else
	{
		for (int i = k; i <= m; i++)//i从数组的第一个走到最后一个,每一个元素都要当头一次
		{//把不变的元素换到第一位
			std::swap(nums[k], nums[i]);
			Perm(nums, k+1, m);
			//排列完换回来
			std::swap(nums[k], nums[i]);
		}
	}

}

int main()
{
	int R[] = { 1,2,3 };
	int n = sizeof(R) / sizeof(R[0]);
	Perm(R,0,n-1 );

	return 0;
}

 yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==


 子集树

子集树是一个满二叉树,显示数组的所有子集(1/0),左子树为1,右子树为0,1代表取该元素,0代表不取。当规模缩至1时,输出结果。

如:int arr[] = {1,2,3};的子集
{1,2,3}{1,2}{1,3}{2,3}{1}{2}{3}空

下图各结点代表规模(头指针位置,尾指针位置)

void func(int* arr, int* brr, int i, int n)
{
	if (i == n)//到叶子结点了
	{
		for (int j = 0; j < n; j++)
		{
			if (brr[j] == 1)//有这个元素
				printf("%-4d", arr[j]);
		}
		printf("\n");
	}
	else
	{
		//进入左子树
		brr[i] = 1;
		func(arr, brr, i + 1, n);
		//进入右子树
		brr[i] = 0;
		func(arr, brr, i + 1, n);
	}
}
int main()
{
	int arr[] = { 1,2,3 };
	int brr[] = { 0,0,0 };
	func(arr, brr, 0, 3);
}

代码深度执行,但要层次分析 ,便于画图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/150676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通信电子、嵌入式类面试题刷题计划02

文章目录011——单片机上电后没有运转&#xff0c;首先要检查什么&#xff1f;【校招】012——请描述你对数字IC的认识【实习】013——电脑的组成&#xff0c;细化到显卡之类的【软件/硬件测试】014——黑盒测试和白盒测试的区别? 【软件/硬件测试】015——名词扩写&#xff1…

【C语言开源项目】tinyhttpd ——下载、安装、使用

前言 本系列将带领大家看一些C语言的优秀的开源项目&#xff0c;并逐步深入讲解源码&#xff0c;感兴趣的可以点击关注、收藏&#xff0c;有问题及时在评论区评论~ Tinyhttpd 介绍 Tinyhttpd 是一个非常轻量级的 web server&#xff0c;总共只有500多行代码&#xff0c;非常…

Studio One2023中文版支持视频配乐加歌词音轨功能

Studio One 6中文特别版&#xff0c;现在Studio One 6终于有了视频支持&#xff0c;可以方便做视频配乐了。视频可以作为一个独立的音轨使用&#xff0c;跟乐器和音频音轨一样。你可以像音频素材一样在时间条来回拖拽视频来进行音画同步对齐。如果视频也包括了音频&#xff0c;…

第十章 鲁棒性检查(下)

文章目录10.9 统计静态时序分析(Statistical Static Timing Analysis)10.9.1 工艺和互连走线变化(Process and Interconnect Variations)10.9.2 统计分析(Statistics Analysis)10.10 时序违例路径(Paths Failing Timing)路径找不到(No Path Found)跨时钟域(Clock Crossing Doma…

PMP证书的含金量怎么样?

是高的&#xff0c;在项目管理或者管理领域中&#xff0c;知名度和含金量都是在前列的。PMP证书是由美国PMI项目管理协会发起的&#xff0c;享誉国内外&#xff0c;含金量不高点都不会有超过百万的人获得这个证书了&#xff0c;而不管是对个人、组织甚至是整个项目管理行业&…

python采集往期股票数据进行分析预测

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 准备工作 既然要去赚马内&#xff0c;咱们首先要获取往期的数据来进行分析&#xff0c; 通过往期的规律来对当前进行预测&#xff0c;准不准我不知道&#xff0c;反正比人预测的准&#xff0c; 不准也不要喷我&#xff0…

使用markdown语法+Typora+MPic+七牛云对象存储写作教程

使用markdown语法TyporaMPic七牛云对象存储写作教程 一. markdown语法 Markdown是一种轻量级标记语言&#xff0c;排版语法简洁&#xff0c;让人们更多地关注内容本身而非排版。它使用易读易写的纯文本格式编写文档&#xff0c;可与HTML混编&#xff0c;可导出 HTML、PDF 以及…

UCOS简单介绍

什么是UCOS&#xff1f; UCOSII 的前身是 UCOS&#xff0c;最早出自于 1992 年美国嵌入式系统专家 Jean J.Labrosse 在《嵌入式系统编程》杂志的 5 月和 6 月刊上刊登的文章连载&#xff0c;并把 UCOS 的源码发布在该杂志的BBS 上。 UCOSII 是一个可以基于 ROM 运行的、可裁减…

支付系统设计

支付永远是一个公司的核心领域&#xff0c;因为这是一个有交易属性公司的命脉。那么&#xff0c;支付系统到底长什么样&#xff0c;又是怎么运行交互的呢?抛开带有支付牌照的金融公司的支付架构&#xff0c;下述链路和系统组成基本上符合绝大多数支付场景。其实整体可以看成是…

TCP/IP网络传输模型

先来个总结&#xff1a; TCP/IP的网络传输模型可以分为以下四层&#xff1a;应用层、传输层、IP网络层、网络接口层。 下面我们来简单介绍每一层的作用和工作原理 应用层&#xff08;Application Layer&#xff09; 从网络传输模型来说&#xff0c;应用层能说的东西不是太多&a…

Merkle trees vs Verkle trees

什么是默克尔树&#xff0c;它们是如何工作的&#xff1f;使用加密哈希算法的二叉树称为 Merkle 树。哈希树也称为 Merkle 树&#xff0c;用数据块的加密哈希标记叶节点。此外&#xff0c;它还使用其子节点标签的加密散列来标记非叶节点。每个节点都会生成一个摘要(Hash)&#…

SpringBoot笔记(持续更新)

要学习SpringCloud&#xff0c;但是SpringBoot是基础&#xff0c;所以需要开个篇补一下 突发奇想&#xff1a;学习编程&#xff0c;一定要自顶向下学习&#xff0c;刚刚入门了SC&#xff0c;对整个开发部署流程有了一个大概的认知&#xff0c;在听SB的课程发现理解起来很容易…

菲鹏生物冲刺创业板上市:毛利率稳中有降,崔鹏、曹菲夫妇控股

2023年1月6日&#xff0c;菲鹏生物股份有限公司&#xff08;下称“菲鹏生物”&#xff09;在深交所更新招股书&#xff08;注册稿&#xff09;&#xff0c;准备在创业板上市&#xff0c;泰联合证券为其独家保荐人。本次冲刺上市&#xff0c;菲鹏生物计划募资25.056亿元。 其中…

SpringCloud(12)— 分布式事务(Seata)

SpringCloud&#xff08;12&#xff09;— 分布式事务&#xff08;Seata&#xff09; 一 事务基础 1.事务的ACID原则 2.分布式事务问题 在分布式系统下&#xff0c;一个业务跨越多个服务或数据源&#xff0c;每一个服务都是一个事务。 要保证所有分支事务的最终状态一致&am…

【Qt】为应用程序设置标题栏、状态栏、可执行程序显示 三种状态下的图标

Qt为应用程序添加图标的几种方式 应用程序的图标分为&#xff1a; 程序左上角显示的标题栏的图标&#xff1a; 程序打开后在任务栏显示的状态栏图标&#xff1a; 程序在文件管理器中显示的可执行程序图标&#xff1a; 设置这几种图标的方式有以下几种。 方式1&#xff0c;一…

Maven项目管理

01-Maven概述02-Maven简介03-Maven基本使用04-IDEA配置Mavenhelloworld 版本错误 已解决 https://blog.csdn.net/qq_41428418/article/details/12416917505-依赖管理&依赖范围找不到Any changes??? 感觉无关紧要compile 最大的 默认的scope&#xff0c;表示 dependency …

Linux——文件的读取与搜索

文章目录文件读取cat和tac命令head和tail命令more和less命令wc和du命令文件读取 cat和tac命令 cat命令将文件中全部内容都打印到屏幕上&#xff0c;适合较小文件的读取&#xff0c;不适合大文件。 tac命令是从最后一行开始反向打印&#xff0c;这一点与cat命令正好相反。 语法&…

2023.1.9 学习总结

1.二叉排序树的相关操作 二叉排序树的相关操作可以分为这几种&#xff1a; 1.创建二叉排序树 2.插入值 3.查找值 4.删除值 首先给出二叉排序树的结点类型定义&#xff1a;&#xff08;就是一个二叉树&#xff09; struct bis {int data;bis* left;bis* right; }; 因为创…

熊海cms1.0代码审计

目录 一、环境搭建 二、代码审计 &#xff08;1&#xff09;后台存在登录绕过漏洞 &#xff08;2&#xff09;登录后台user处存在SQL注入 &#xff08;3&#xff09;前&#xff08;后&#xff09;台文件包含漏洞 &#xff08;4&#xff09;后台SQL注入 1、admin/files/…

程序员简历上写这种项目,难怪面试当炮灰。。。

目录&#xff1a; 高级工程师必备&#xff1a;系统设计能力如何让你的项目更有技术含量 上篇文章 《我只是把握好了这3点&#xff0c;1个月后成功拿下大厂offer&#xff01;》我们聊了聊Java工程师在跳槽前的1个月&#xff0c;如何利用较短的时间从技术广度、技术深度、基础功…