DP26树的最大独立子集问题 Largest Independent Set Problem @geeksforgeeks

Olympus 立即下载

Given a Binary Tree, find size of the Largest Independent Set(LIS) in it. A subset of all tree nodes is an independent set if there is no edge between any two nodes of the subset.
For example, consider the following binary tree. The largest independent set(LIS) is {10, 40, 60, 70, 80} and size of the LIS is 5.

A Dynamic Programming solution solves a given problem using solutions of subproblems in bottom up manner. Can the given problem be solved using solutions to subproblems? If yes, then what are the subproblems? Can we find largest independent set size (LISS) for a node X if we know LISS for all descendants of X? If a node is considered as part of LIS, then its children cannot be part of LIS, but its grandchildren can be. Following is optimal substructure property.

1) Optimal Substructure:
Let LISS(X) indicates size of largest independent set of a tree with root X.

     LISS(X) = MAX { (1 + sum of LISS for all grandchildren of X),
                     (sum of LISS for all children of X) }

The idea is simple, there are two possibilities for every node X, either X is a member of the set or not a member. If X is a member, then the value of LISS(X) is 1 plus LISS of all grandchildren. If X is not a member, then the value is sum of LISS of all children.

2) Overlapping Subproblems
Following is recursive implementation that simply follows the recursive structure mentioned above.


遇到树的结构可以改变节点的结构,在节点里面增加一个memo值用来存储


package DP;

public class LargestIndependentSet {

	public static void main(String[] args) {
		Node root = new Node(20);
		root.left = new Node(8);
		root.left.left = new Node(4);
		root.left.right = new Node(12);
		root.left.right.left = new Node(10);
		root.left.right.right = new Node(14);
		root.right = new Node(22);
		root.right.right = new Node(25);
		
		System.out.println("Size of the Largest Independent Set is " + LISS_Rec(root));

		NodeMemo root2 = new NodeMemo(20);
		root2.left = new NodeMemo(8);
		root2.left.left = new NodeMemo(4);
		root2.left.right = new NodeMemo(12);
		root2.left.right.left = new NodeMemo(10);
		root2.left.right.right = new NodeMemo(14);
		root2.right = new NodeMemo(22);
		root2.right.right = new NodeMemo(25);
		
		System.out.println("Size of the Largest Independent Set is " + LISS_Memo(root2));
	}
	

	public static int LISS_Rec(Node root){
		if(root == null){
			return 0;
		}
		
		// 计算不包含当前节点的size,即为左右孩子的LISS size
		int sizeExcl = LISS_Rec(root.left) + LISS_Rec(root.right);
		
		// 计算包含当前节点的size,即为1+孙子的LISS size
		int sizeIncl = 1;
		if(root.left != null){
			sizeIncl += LISS_Rec(root.left.left) + LISS_Rec(root.left.right);
		}
		if(root.right != null){
			sizeIncl += LISS_Rec(root.right.left) + LISS_Rec(root.right.right);
		}
		
		return Math.max(sizeExcl, sizeIncl);
	}
	
	public static int LISS_Memo(NodeMemo root){
		if(root == null){
			return 0;
		}
		if(root.liss != 0){
			return root.liss;
		}
		if(root.left==null && root.right==null){
			root.liss = 1;
			return root.liss;
		}
		
		int sizeExcl = LISS_Memo(root.left) + LISS_Memo(root.right);
		
		int sizeIncl = 1;
		if(root.left != null){
			sizeIncl += LISS_Memo(root.left.left) + LISS_Memo(root.left.right);
		}
		if(root.right != null){
			sizeIncl += LISS_Memo(root.right.left) + LISS_Memo(root.right.right);
		}
		
		root.liss = Math.max(sizeExcl, sizeIncl);		// 保存结果
		return root.liss;
	}
	
	
	
	public static class Node{
		int data;
		Node left, right;
		
		public Node(int data){
			this.data = data;
		}
	}
	
	public static class NodeMemo{
		int data;
		NodeMemo left, right;
		int liss;
		
		public NodeMemo(int data){
			this.data = data;
		}
	}
}

http://www.geeksforgeeks.org/largest-independent-set-problem/

电子实体显微镜驱动中文软件,也可以当做USB摄像头 电子实体显微镜驱动中文软件,也可以当做USB摄像头,可以同时读取多个 立即下载

相关推荐

OLYMPUSViewer3(奥林巴斯图像处理软件)v2.2官方安装免费版

OLYMPUS Viewer 3奥林巴斯图像处理软件是一款由奥林巴斯官方专为那些热爱照片的人提供的易于使用且功能强大的图像处理软件。它可以导入您使用数码照相机拍摄的图像和视频,以便进行查看、编辑和管理,利用Olympus Viewer 3,您可以根据照片类型或大事记,从相册或文件夹中轻松找到所需要的图像,并可以进行编辑和打印,欢迎有需要的朋友们前来下载使用。 OLYMPUS Viewer 3具有

最大团问题和最大独立子集

不要去百度百科找最大团,因为你会找到一个团购网站= = 维基百科:https://en.wikipedia.org/wiki/Clique_problem 首先,团是什么呢? 团就是一个点集,点集中任意两点都有直接的边相连 举个栗子: 图中红色的点构成了一个团,当然单独一个点也算是一个团。 那么,独立子集又是什么呢? 和团正好相反,独立子集也是一个点集,但是任意两点之间都没有直接的边相连…… 再举个栗子…… 图中绿色的点构成了一个独立子集,你说一个点是一个独立子集我也没意见…… 那么,最大团和最大独

软件工程小施同学 的专栏 686

CCD摄像头驱动及应用程序

相当不错的源码,希望对大家有用,里面有CCD摄像头的驱动及应用程序,大家可以参考其设计模式

数据结构与算法 - 分治算法的适用场景:问题可拆分且子问题独立

摘要:分治算法的核心思想与应用 分治算法(Divide and Conquer)通过将问题拆分为独立子问题,递归求解后合并结果来高效解决复杂问题。本文深入剖析分治算法的两大核心条件: 问题可拆分:原问题能分解为结构相同的更小子问题(如归并排序将数组二分)。 子问题独立:子问题间无依赖,可并行处理(如快速排序的分区操作)。 经典应用场景: 排序算法:归并排序(稳定O(n log n))和快速排序(平均O(n log n))均体现分治思想。 数学计算:如Karatsuba快速乘法、Strassen矩阵乘法优化计

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

奥林巴斯 OLYMPUS DP26 CCD摄像头驱动

奥林巴斯 OLYMPUS DP26 CCD摄像头驱动,网上找了好久找不到,最后在公司另外一设备驱动里找到了。 硬件ID USB\VID_0547&PID_4D33 CLD 3.1M USB2.0 Camera

PDF批量加水印 与 去除水印实践

我们可以给PDF加图片水印或文字水印,要去除图片水印,一般只需要删除最后一个图片对象即可。要去除文字水印,需要保证主体内容和文字水印在/Contents中位于不同的对象内,这样我们只需要删除文字水印对应的对象即可删除水印。而对于主体内容和文字水印已经混合在一个对象时,本文的提供的方法则无能为力,需要进一步深入分析PDF细节。

小小明-代码实体的专栏 2759

动态规划之理论基础(0)

一、基本概念 1、定义:动态规划,dynamic programming,是通过组合子问题的解而得到整个问题的解。其中的Programming指的是tabular method,可译为:表格法 --- 填表和查表。 2、应用:动态规划通常用于最优化问题,此类问题可能有很多种可行解,每一个解有一个值对应一组选择,即我们要从中作出一组合适的选择以得到一个最优(最大或最小)值的解(最优解也可

heyabo 3200

避开这些坑!晶圆封装中Wire Bonding(引线键合)的5种常见不良与实战调试心得

本文深入探讨晶圆封装中Wire Bonding(引线键合)的5种常见不良现象,包括Wire Offset、BSOB不良、球径/球厚异常、弧度不良和IMC问题。通过实际案例和参数优化方案,帮助工程师提升封装质量和可靠性,特别适用于半导体封装领域的专业人士。

weixin_33672109的博客 525

「leetcode」78. 子集【回溯算法】详解!

认识本质之后,这就是一道模板题

代码随想录 1479

OMI数据获取与可视化:从下载到大气污染分析

本文详细介绍了如何获取与处理OMI卫星数据,以进行大气污染分析。内容涵盖从NASA GES DISC官方源下载对流层NO2数据、使用MATLAB或Python进行月均数据处理与网格化,到利用m_map或cartopy工具进行专业可视化的完整流程。重点解析了数据下载技巧、NetCDF格式处理、地图投影与填色方法,并探讨了时间序列分析与动态可视化等深度应用,为环境研究者提供了一套从数据到洞察的实用指南。

weixin_29210759的博客 269

MATLAB控制信号发生器(USB-GPIB-HS)GPIB仪器控制教程(含matlab代码)

自动化测试时需要自动产生信号,通过matlab控制信号发生器的频率与功率,以实现自动化信号生成输出

qq_43686057的博客 1606

回溯法 求一个子集问题:装载问题、最大团问题

一:装载问题有一批共n个集装箱要装上2艘载重量分别为c1和c2的船,其中集装箱i的重量为wi,且装载问题要求确定是否有一个合理的装载方案可将这些集装箱装上这2艘船。如果有,找出一种装载方案。例如当n=3,c1=c2=50且w=[10,40,40]时,则可以将集装箱1和2装到第一艘轮船上,而将集装箱3装到第二艘轮船上;如果w=[20,40,40],则无法将这3个集装箱都装上轮船。分析:容易证明,如果一

XXX 2661

全面解读AI Infra:架构、生态与未来趋势

文章摘要 大模型时代下,AI基础设施(AI Infra)成为关键技术基建,涵盖从数据准备到模型服务的全栈技术体系。文章系统解构了AI Infra的四层架构(硬件资源层、资源管理调度层、开发框架层、平台工具层),并分析了全球AI Infra生态图谱,包括云计算巨头、芯片厂商等全栈服务商,以及中国特色的多元竞合格局。通过对比Data Infra与AI Infra的核心差异,指出AI Infra更关注智能应用的规模化与自动化。文章还探讨了从传统数据设施向AI基础设施的转型路径,强调自主可控、软硬协同等发展趋势,为

技术引领业务创新 610

LeetCode 经典题:“最大子数组和”

最大子数组和”这道题通过多种方法展示了不同的算法思想。暴力枚举法虽然简单直接,但时间复杂度较高;动态规划法通过定义状态和状态转移方程,将问题分解为子问题来解决,时间复杂度较低;优化的动态规划(贪心算法思想)在动态规划的基础上进一步优化了空间复杂度。在实际应用中,我们应该优先选择优化的动态规划方法,因为它在时间和空间上都具有较好的性能。希望通过对这道题的多种解法的学习,大家能更好地理解不同算法的特点和应用场景,提升算法设计和分析能力。

jukuya的博客 1130

YOLO11改进-模块-引入多尺度差异融合模块MDFM

MDFM主要用于融合双时相图像特征并生成带有丰富上下文信息的差异特征,其过程包含以下步骤:1. 特征提取与差异特征生成首先从双时相图像中提取特征f1和f2,然后将f1和f2进行像素级别的相减,再对相减结果取绝对值,最后通过一个3x3的卷积操作得到Di。2. 多尺度特征融合(MSFF)接着利用多尺度特征学习机制来增强特征融合效果。该机制通过不同核大小的卷积构建多尺度融合过程,具体是通过一个名为 MSFF 单元来实现的。

qq_64693987的博客 4379

厉害了,华为推出下一代光传送网:fgOTN

2024年10月,在全球信息技术博览会(GITEX Global 2024)上,华为正式发布了其颠覆性的创新产品——端到端细粒度光传送网(fgOTN)解决方案。这一产品组合被誉为行业内首个fgOTN,旨在重塑光传送网络的格局,满足电力运输等行业日益增长的通信需求。在过去的近三十年中,同步数字体系(SDH)技术一直是电信和工业网络的支柱,因其可靠性、稳定性和低延迟而备受青睐。然而,随着数据需求的激增,SDH的最大带宽仅为10 Gbps,逐渐显露出局限性。

网络技术联盟站 636

「leetcode」最强回溯算法总结篇!历时21天、画了20张树形结构图、14道精选回溯题目精讲

20张树形结构图、14道精选回溯题目,21篇回溯法精讲文章,由浅入深,一气呵成,这是全网最强回溯算法总结!

代码随想录 2万+

触摸芯片RM1015B基本使用方法

RM1015B触摸芯片使用指南:该芯片采用4通道设计(实际使用3通道),通过I2C接口通信(设备地址0x2B)。硬件设计需注意中断/复位引脚复用,需上拉处理。软件配置包括初始化、中断处理和定时器扫描,通过设置各通道阈值(0-300W)调节灵敏度,值越小越灵敏。调试时可调用rm1015B_debug_func()输出波形数据。典型应用场景包括接近检测和手势识别,中断触发后需在8ms内响应。特别注意不同通道的寄存器映射关系及校准流程,确保检测准确性。

云淡风轻 178

集合最大子集算法_折衷算法

本课程是从少年编程网转载的课程,目标是向中学生详细介绍计算机比赛涉及的编程语言,数据结构和算法。编程学习最好使用计算机,请登陆www.3dian14.org(免费注册,免费学习)。我们直接来看一个问题。给定一个由n个整数组成的集合,其中n <= 40,每一个整数都小于或等于,请从中找出一个子集,使得子集中所有元素的和为最大并且不大于S,此处S满足 S <=。我们用例子来说...

weixin_39922004的博客 1399

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

算法训练 结点选择 树的最大独立子集

题目链接 问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值。如果一个点被选择了,那么在树上和它相邻的点都不能被选择。求选出的点的权值和最大是多少? 分析:树的最大独立子集问题。 设d(u,0)和d(u,1)分别表示不选和选取该节点, v为u的子节点。则 。因为选了u,所以u的子结点都不能选。 因为u没有选,所以每个子结点v(成为一个新的根节点)可选可不选。 注意:...

Nicolas的博客 1076

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

论文导读 | 最大独立集问题的求解

图的最大独立集问题(MIS problem)是图论研究中的一个重要问题,具有广泛的应用。本文介绍了最大独立集求解相关的三篇工作,包括一篇启发式方法和两篇基于学习的方法,希望能让大家对这个问题有所了解。 问题定义 一个图G(V, E)的顶点集子集I称为图G的一个独立集(independent set)是指:I中任意两点没有边相连。图G中大小最大的独立集(拥有顶点数目最多)称为图G的最大独立集(maximum indepent set,MIS)。 与独立集类似的概念还有顶点覆盖(vertex cover)

weixin_48167662的博客 9551

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

分治法简单总结

今天来做一个分治法的笔记 简单来讲就是分治法的关键就是分而治之,将求出的小规模问题合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。 1.平衡子问题(最好使问题的规模大致相同) 2.独立子问题(各子问题之间相互独立) 分治法的求解过程: 1.划分 2.求解子问题(各子问题的解法与原问题的解法通常是相同的,可以使用~~递归~~ 的方法求解各个子问题,有时候递归处理也可以用循环实现) 3.合...

weixin_43917696的博客 1125

hdu 1068 最大独立子集问题

题目大意:给你每个人互相认识的人,然后问最多能找到多少个人都互不认识。其实就是找:最大独立集合! 公式 : 二分图最大独立集合 = 节点数 - 最大匹配数 对于第一个例子 0: (3) 4 5 6 1: (2) 4 6 2: (0) 3: (0) 4: (2) 0 1 5: (1) 0 6: (2) 0 1 最大匹配数为2,最大独立集

Han_DV的博客 758

Independent Set 独立集问题

和独立集相关的一些图论的概念如下: Independent Set 独立集问题Bipartite Graph 二分图Dominant Set 主导集Cycle Graph循环图 问题:给你一个二叉树,求出该二叉树的最大独立集。 思路:二叉树问题可以用递归的办法来解决,这个也不例外。更好的是,这个问题还可以用动态规划的方法来解决。 设二叉树的根节点是root,那么,此二叉树的最大

jiyanfeng1的专栏 7949

最大独立集问题-maximal independent set problem

原文链接 http://blog.youkuaiyun.com/xin_jmail/article/details/29597471 http://blog.youkuaiyun.com/xin_jmail/article/details/32101483 转载于:https://www.cnblogs.com/liangliangdetianxia/p/4027275.html

weixin_30546933的博客 1301
上一篇: DP25 子集和问题 Subset Sum Problem @geeksforgeeks
下一篇: DP27 2D矩阵中最大的矩形和 Maximum sum rectangle in a 2D matrix @geeksforgeeks
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值