Java Program to Find the Largest Clique in a Planar Graph2025年5月10日 | 阅读 8 分钟 图的独立集的一个先决条件是顶点集,其中没有两个顶点是相邻的。仅仅从定义上看,它是一个团的反面,所以理解图的补集对于继续前进至关重要。本质上,平面网络的概念并不特别重要,但它是一个有用的概念。为了回答上面的问题,我们将利用这三个概念。 在提供的平面图中,我们必须识别最大的团。任何两个顶点都相邻的顶点子集都称为平面图的团;换句话说,顶点集合形成一个完全图,它是给定平面图的子图。被称为最大团的是最大的顶点集合,当它们组合在一起时形成给定图的完全子图,并且不能再添加任何顶点。如果我们熟悉独立集的概念,就有可能发现团和独立集之间的含糊不清的联系。 因此,正如将在下面讨论的,关系和区别是并存的。
从图的独立集和团集的定义可以明显看出,它们之间存在某种互补关系。根据定义,最大独立集是在实际图中彼此不相邻的最大顶点集。如果我们补全提供的图,则情况就是如此,因为我们正在确定补图中独立集。因此,给定图中的最大团是所提供图的补图的最大独立集。 方法:贪婪算法提供的代码使用贪婪算法和图着色来查找最大独立集(MIS)或补图中的最大团。邻接表和邻接矩阵都用于表示图。该算法使用贪婪移除技术(remove_all 和 can_remove 方法),通过迭代移除不允许作为独立集一部分的顶点。然后,为了优化其大小,它会进行局部更改(Util2)来细化独立集。该方法通过以下方式间接解决了最大团问题:补图中的一个团对应于原始图中的一个独立集。图论思想,如邻接表和着色,用于此方法,以有效地提取最大的独立集。 因此,在给定图的补图中,该图的最大团可以被视为最大的独立集。即使它们是 NP 难问题,也可以使用许多确定给定平面图最大独立集的现有方法来找到团。只需要对提供的现有方法进行少量修改,即输入图的补图。以下是确定上面图中哪个团是最大的。(带有绿色边的子图就是那个。) 下面实现了确定图的补图的独立集(间接就是图的团)的概念。 算法步骤 1:读取顶点数 n。 步骤 2:创建显示图的邻接矩阵。 步骤 3:为了更有效的遍历,将邻接矩阵转换为邻接表。 步骤 4:为了跟踪发现的最小独立集,将 minSetSize 设置为 n。 步骤 5:最佳独立集应存储在名为 bestSet 的空列表中。 步骤 6:每个顶点都应被假定为独立集的一部分(从 0 到 n-1)。 步骤 7:创建一个大小为 n 的 数组 color,初始值为 1(表示所有节点都可以立即访问)。 步骤 8:设置 color[start] = 0,表示当前顶点属于独立集。 步骤 9:多次验证每个顶点。 步骤 10:如果一个顶点可以被删除,即它的所有邻居仍然可以访问,则设置 color[i] = 0。 步骤 11:重复上述过程,直到没有更多顶点可以删除为止。 步骤 12:将 color[i] == 0 的所有顶点存储在 independentSet 中。 步骤 13:如果 minSetSize 大于现有的独立集,则更新 bestSet。 步骤 14:使用每个顶点作为起点并重复该过程。 步骤 15:跟踪我们可以找到的最大独立集。 实施输出 The number of vertices in the graph is taken as 5 The maximal independent set's size to be find is 6 Searching for the set Independent set of size 4 found 1 2 3 4 解释 从输出可以看出,有五个顶点被选中。然后找到大小为四的独立集,并返回构成原始图中独立集的顶点集。由于我们之前已经讨论过补图的独立集就是原始图中的团,因此这些集就是原始图中的团。 复杂度分析 上述代码的时间复杂度为 O(N3),空间复杂度为 O(N2),其中“N”表示图的顶点数。 下一个主题Java中的MVC架构 |
?将日期从 Java 应用程序添加到 MySQL 数据库是处理与日期相关数据时的一项常见要求。在本文中,我们将指导您完成使用 Java 在 MySQL 中添加日期的过程。我们将涵盖必要的步骤,包括建立...
阅读 4 分钟
问题陈述 任务是计算前 n 个自然数二进制表示中设置的位(或 1)的总数。二进制表示是数字系统的基石。并且理解位集是故障检测、密码学等应用的核心...
5 分钟阅读
最终变量可以在声明时或在构造函数中初始化,但一旦赋值,就不能修改。final 关键字用于声明常量。使用 final 关键字将变量声明为 final。它被视为常量。语法:final...
阅读 4 分钟
组合是一种设计或实现“has-a”关系的方式。组合和继承都是设计技术。继承用于实现“is-a”关系。“has-a”关系用于确保我们程序中的代码可重用性。在组合中,我们使用一个...
阅读 4 分钟
图案程序通常在面试中被问及,以检查逻辑实现和循环概念。在前一节中,我们讨论了各种图案,如三角形、树形、星形等。在本节中,我们将学习如何通过 Java 打印皇冠图案...
阅读 6 分钟
给定一个字符串列表,任务是将字符串列表转换为由逗号分隔的字符串。在 Java 中,当处理格式化和数据处理时,将列表转换为逗号分隔的字符串是一项常见的任务,经常出现,即转换列表...
阅读 2 分钟
Java 中的最小成本路径问题是面试中最突出的问题之一。在此问题中,提供了一个矩阵(costMatrix[][]),它表示 costMatrix[][] 中每个单元格的成本。任务是转...
11 分钟阅读
? 对象显示现实世界的事物,并包含变量等数据及其方法等行为。对象使代码更加有条理,易于重用,并且有利于管理大型项目。Java 还使用重要的特性,如继承(它共享其特性)、封装...
阅读 8 分钟
二进制字符串是仅包含 0 和 1 的数字序列。确定给定的二进制字符串是否代表 3 的倍数是一个在计算理论和有限自动机中的经典问题。最有效的方法之一是...
11 分钟阅读
HashSet 与 LinkedHashSet HashSet 是 Java 集合框架中的一个类,用于创建使用哈希表存储对象的集合。相比之下,LinkedHashSet 类与 HashSet 类似。此外,它还维护插入顺序。HashSet 继承了……
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India