- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
输入:图 G
输出:多个独立集,使得一个节点对所有独立集的成员资格是唯一的。因此,节点与它自己的集合中的任何节点都没有连接。这是一个示例路径。
由于这里需要澄清,因此再次改写:
将给定的图划分为多个集合,使得
log(n)
套。
最佳答案
不是一个完整的答案,我不知道它对你有多大用处。但这里是:
汉明距离让我印象深刻。您的问题陈述说它必须至少为 1,但也可能是 1000。可以说每个节点的集合成员的位编码是唯一的就足够了。
您的问题陈述没有说明,但您上面的解决方案表明每个节点必须是至少 1 个集合的成员。 IE。任何节点的集合成员资格都不允许对全 0 进行位编码。
暂时忽略连接的节点,不相交的节点很容易:只需使用未使用的位编码对它们进行顺序编号。把这些留到最后。
你上面的例子使用了有向边,但同样,这让我觉得是一个红鲱鱼。如果因为 A=>D 而 A 不能与 D 在同一个集合中,则无论 D=>A,D 都不能与 A 在同一个集合中。
您提到至少需要 log(N) 组。您还将拥有最多 N 套。一个完全连接的图(具有 (N^2-N)/2 个无向边)将需要 N 个集合,每个集合包含一个节点。
事实上,如果你的图包含一个完全连接的 M 维单纯形(M in 1..N-1),有 M+1 个顶点和 (M^2+M)/2 个无向边,你至少需要 M+1套。
在上面的示例中,您有一个这样的单纯形 (M=1),其中有 2 个顶点 {A,D} 和 1 个(无向)边 {(A,D)}。
您的问题似乎归结为在图中找到最大的全连接单纯形。换句话说,你有一个路由问题:你需要多少维来路由你的边缘,所以没有交叉?这听起来不像是一个非常可扩展的问题。
发现的第一个大型单纯形很容易。每个顶点节点都会获得一个带有自己位的新集合。
不相交的节点很容易。一旦处理了连接的节点,只需按顺序对不相交的节点进行编号,跳过任何以前使用的位模式。从上面的示例中,由于 A 和 D 取 01 和 10,因此 B 的下一个可用位模式是 11。
然后,棘手的部分变成如何在使用新位创建任何新集合之前将任何剩余的单纯形尽可能多地折叠到现有范围内。折叠时,每个节点必须使用 2 个或更多位(集),并且这些位(集)不得与任何相邻节点的位(集)相交。
考虑一下当向示例中添加另一个节点 C 时,上面的示例会发生什么情况:
如果 C 直接连接到 A 和 D,那么初始问题就变成了找到具有 3 个顶点 {A,C,D} 和 3 个边 {(A,c),(A,D),(C,D) 的 2-单纯形)}。一旦 A、C 和 D 采用位模式 001、010 和 100,不相交的 B 的最低可用位模式是 011。
另一方面,如果 C 直接连接 A 或 D 但不是两者都连接,则该图有两个 1-单纯形。假设我们找到顶点为 {A,D} 的 1-单纯形,首先给它们位模式 01 和 10,那么问题就变成了如何将 C 折叠到那个范围内。唯一具有至少 2 位的位模式是 11,但它与 C 连接的任何节点相交,因此我们必须创建一个新集并将 C 放入其中。在这一点上,解决方案与上面的类似。
如果 C 不相交,则 B 或 C 将获得位模式 11,其余的将需要一个新集合并获得位模式 100。
假设 C 连接到 B 但不连接到 A 或 D。同样,图中有两个 1-单纯形,但这次是不相交的。假设首先找到 {A,D} 如上所述,给 A 和 D 位模式 10 和 01。我们可以将 B 或 C 折叠到现有范围中。该范围内唯一可用的位模式是 11,B 或 C 都可以得到该模式,因为它们都不与 A 或 D 相邻。一旦使用了 11,设置了 2 个或更多位的位模式将不再存在,我们将不得不创建剩余节点的新集合,赋予它位模式 100。
假设 C 连接到所有 3 个 A、B 和 D。在这种情况下,该图有一个带有 3 个顶点 {A,C,D} 的 2-单纯形和一个带有 2 个顶点 {B,C} 的 1-单纯形。如上,处理最大的单纯形后,A、C、D的位模式为001、010、100。为了将B折叠到这个范围内,设置2位或更多位的可用位模式为:011、101、110和111. 除 101 之外的所有这些都与 C 相交,因此 B 将获得位模式 101。
那么问题就变成了:您如何有效地找到最大的全连接单纯形?
如果找到最大的全连接单纯形过于昂贵 ,可以通过找到连接方面的最大最小值来为潜在的完全连接的单纯形设置一个近似的上限:
关于组合独立集/汉明距离的算法/近似,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3513723/
所以我必须用以下方法来近似 Pi:4*(1-1/3+1/5-1/7+1/9-...)。它也应该基于迭代次数。所以函数应该是这样的: >>> piApprox(1) 4.0 >>> piApprox(1
输入:图 G 输出:多个独立集,使得一个节点对所有独立集的成员资格是唯一的。因此,节点与它自己的集合中的任何节点都没有连接。这是一个示例路径。 由于这里需要澄清,因此再次改写: 将给定的图划分为多个集
我已经使用查找表和低阶多项式近似实现了定点 log2 函数,但对整个 32 位定点范围 [-1,+1) 的准确度不太满意。输入格式为 s0.31,输出格式为 s15.16。 我在这里发布这个问题,以便
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
我的目标是近似二项式变量总和的分布。我使用以下纸张The Distribution of a Sum of Binomial Random Variables作者:肯·巴特勒和迈克尔·斯蒂芬斯。 我想
我知道有方法 approximate cubic Bezier curves ( this page 也是一个很好的引用),但是有没有更快的方法来逼近 N 次贝塞尔曲线?还是只能使用下面的概括? 来自
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它有助于我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注意
我是 C++ 和编码本身的初学者,所以请原谅任何词汇错误。我找不到这个具体问题,但在互联网上找到了类似的问题,但我仍然很难获得我需要的结果。 所以我使用莱布尼茨公式来近似 pi,即: pi = 4 ·
有多种方法可以通过显示名称查找联系人。例如这个答案Android - Find a contact by display name 但是我需要找到模糊匹配的联系人。例如如果找不到“Kim”,我需要返回
我一直在尝试使用以下代码使用级数表示来近似 e 以获得尽可能多的精度数字,但无论我计算多少项,精度数字的数量似乎都保持不变。即: 2.718281984329223632812500000000000
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
大多数拥有计算机科学学位的人肯定知道什么是Big O stands for。 它有助于我们衡量一个算法的实际效率,如果您知道在what category the problem you are try
大多数拥有计算机科学学位的人肯定知道什么是Big O stands for。 它有助于我们衡量一个算法的实际效率,如果您知道在what category the problem you are try
我做了很多随机的数学程序来帮助我完成作业(合成除法是最有趣的),现在我想反转一个激进的表达式。 例如,在我方便的 TI 计算器中我得到 .2360679775 好吧,我想将该数字转换为等效的无理数表达
我可以通过 CPU 分析器看到,compute_variances() 是我项目的瓶颈。 % cumulative self self total
大多数拥有 CS 学位的人肯定知道什么 Big O stands for . 它帮助我们衡量算法的可扩展性。 但我很好奇,你如何计算或近似算法的复杂性? 最佳答案 我会尽我所能用简单的术语在这里解释它
这是迄今为止我的代码, from math import * def main(): sides = eval(input("Enter the number of sides:"))
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
大多数拥有 CS 学位的人肯定知道什么 Big O stands for . 它帮助我们衡量算法的扩展性。 但我很好奇,你如何计算或近似算法的复杂性? 最佳答案 我会尽我所能用简单的术语在这里解释它,
我是一名优秀的程序员,十分优秀!