- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一组长度为 4 的向量(表示为 Nx4 矩阵),其中向量中的每个元素都可以取值 -1、0 或 1。我想将向量分组为最少数量的组(以及因此最大的组)使得每个组都满足以下约束:对于组中向量的每一列中表示的唯一元素的每个组合,组中必须有一个向量。例如,仅包含向量 [-1,1,0,1]
和 [-1,1,1,1]
的组将满足约束条件,因为是组的每一列中的一个唯一值,除了第 3 列,它有 2,因此每列中的唯一值有 2 种可能的组合,这两种组合都在组中表示。但是,分组 [1,0,-1,0]
和 [1,0,0,1]
不满足约束,因为每个中有 2 个唯一值第 3 列和第 4 列的组合,创建 4 种可能的组合,其中只有 2 种出现在组中。将 [1,0,0,0]
和 [1,0,-1,1]
添加到该组将满足约束。 (请注意,任何单独的向量作为一个组都将始终满足约束条件。)
这些组“很容易描述”,因为您只需列出每一列的唯一值,这将完整描述该组,排除所有其他向量。
我的第一个方法是将集合作为一个整体,首先检查它是否已经满足约束。如果不是,请尝试一次省略一个向量并检查其余向量是否满足约束。如果这些都不起作用,则尝试忽略 2 个向量的所有组合,然后是 3 个,依此类推。每次一个特定的子集满足约束时,将这些向量放在一边,并对剩余的向量重复该过程,直到没有剩余。虽然这保证了最佳分组(据我所知),但对于任何超过 25-30 个向量的集合来说,运行时间太长了,因为你必须潜在地检查 N 选择 k 种可能的方法来遗漏一个子集从 1 到 N-1 的所有 k 值的向量。
我最近意识到,如果您将可能向量的空间想象成一个 3 x 3 x 3 x 3 的超立方体,其中每个单位超立方体代表一个向量,那么您可以将其更多地视为一个几何问题。满足约束的组是该空间中的超矩形(包括从 -1 到 1 的环绕),这可能比约束的原始措辞更容易考虑。在这个问题的框架中,我正在寻找最小数量的超矩形,使得所有向量都包含在超矩形中,并且任何超矩形中都不存在空白。这种方法有望不会以组合方式扩展运行时,但我还没有想出一种搜索可能的超矩形的好方法。
有没有人有解决这个问题的更快算法的想法?
最佳答案
首先,让我们谈谈您的第一种方法,它是全局贪婪算法。你挑选出你可以迭代找到的最大集合。这是一个很好的启发式方法,但不能保证最佳分组。这是维度 3 中的 6 向量示例(例如,第 4 个始终为 0):
(0, 0, -1); (0, 0, 0); (0, 0, 1); (0, -1, -1); (0, 1, 1); (1, 0, 0)
这是计划外的绿色节点的一些表示(第 6 个)。
您的算法将首先采用仅有的 3 组可用:(0, 0, -1); (0, 0, 0); (0, 0, 1); (红线)
让 3 个孤立的向量意味着总共 4 个集合。您显然可以制作 3 组 2 个向量(1-4、2-6、3-5)。 (黑线)
解决这个问题的一个重要问题是知道一个向量是否可以用于两个不同的集合。
如果不是,在我看来这显然是一个 NP 问题。贪心算法是最合理的处理方式。您可以通过构建一个以所有向量为节点且边表示“在同一组中兼容”的图来节省时间,也就是说没有空洞使这种关联成为不可能。然后寻找最大派系。
如果是,我相信你可以用最小成本流算法优化解决它。您必须列出所有可接受的集合,所有这些集合都由一个节点表示,该节点链接到具有 1 成本的源并注入(inject)多达 81 个向量节点,将它们自己注入(inject)汇点。有大约 V=10000 个可接受的集合,其中包含 81 个向量。一些算法可以让你在 O(VElogVlogV) 中解决这个问题,仍然比 !81 好。幸运的是,一些“洞”会快速降低 V。
关于algorithm - 如何以最佳方式将向量分组到易于描述的组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53666232/
在一个环境中,我有 pandas 版本 0.17.0 和 numpy 版本 1.10.1。在另一个环境中,我有 pandas 版本 0.18.1 和 numpy 版本 1.10.4。 我运行这段代码
This question already has answers here: Default stringify for objects, equivalent to Java's toString
我一直在尝试为我的profile命令嵌入设置一个人们可以更改的简历。我认为它应该有效,但我的代码似乎有问题。 相关代码如下: const PREFIX = '!'; var bio = {}; cli
我正在尝试获取网站图标、网站标题和外部 URL 列表的描述,最好使用 jquery。我已经成功地为我的网址同步了谷歌的图标服务,任何人都可以阐明如何实现网站标题和描述吗?这是我到目前为止获得图标的内容
我在尝试运行代码时收到错误。找不到问题出在哪里。我可能遗漏了一些小细节,如果您能纠正它那就太好了。 计算Servlet import java.io.IOException; impo
我的数据库中有两个字段,一个是描述(TEXT),另一个是short_desc(VARCHAR-200)。 当我显示搜索结果时,我显然使用了short_desc,当有人点击该项目时,他们会得到完整的描述
当我尝试通过ajax和Jquery调用 Controller 上的save方法时,我正在使用Spring MVC、Jquery、Hibernate和tomcat。单击“保存”按钮时,我在 tomcat
我试图使用describe()来获取一些描述性统计数据,但获取了应该是数字的nan值。 我尝试使用 axis=0 或 axis=1,而 axis=1 产生了正确的数值,但这不是正确的数值我需要; ax
我有超过 1 亿个字符串要存储在文件系统中。与字符串 (~255Chars utf8) 一起,将有两个日期和一些定义其属性的整数值。 我可以将它们放在一个 CSV 文件中,但它会很大。我可以将几个较小
有没有办法将 JavaScript 合并到 Jenkins 顶部的描述字段中? 每当我添加脚本标签时,当您查看源代码时,它都会被 Jenkins 删除。 如果有人有建议或方向指出我,那就太好了。
您如何获得 SEH 的名称和/或描述?异常无需必须将字符串硬编码到您的应用程序中? 我尝试使用 FormatMessage(),但它有时会截断消息,即使您指定忽略插入也是如此: __asm { //
如果我在 MySQL 中使用 CREATE TRIGGER 语法创建一个触发器,我该如何附加注释来描述它?我的意思是在声明中或之后对我来说是一样的。 我想不通。对于表格,您可以在声明末尾添加 COMM
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
当开发多媒体应用或者游戏应用的时候,需要使用音量控制键来设置程序的音量大小。在Android系统中有多中音频流,通过Activity中的函数 setVolumeControlStream(int s
Slick DSL 允许通过两种方式在表中创建可选字段。 对于这个案例类: case class User(id: Option[Long] = None, fname: String, lname:
如果不属于默认命名空间,我如何描述 pod 信息。使用默认命名空间我没有任何问题。 但我想获得与命名空间对齐的特定 pod 的信息。 但是,当我想描述我可以制作的同一个 pod 时,请参阅 我尝试使用
在我使用过的几乎所有 vim 副本中,程序都会在替换文本后给出更改的描述。 (例如,将显示类似“20 行 92 个替换”之类的内容。) 我现在正在使用默认情况下不这样做的 vim 副本。 是否有一个简
我正在编写规范,需要描述一些 JSON 对象。单独的文本和选项卡往往会使大型 JSON 变得过于困惑。是否有任何在线(最好)工具可以创建类似于 http://www.json.org/ 上的图表的工具
我正在尝试通过 DNS 将我的 Kubernetes 部署连接在一起。 我有一个 Java (Spring Boot) 部署和一个 javascript (node.js) 部署,两者都通过默认的 C
我只是在学习 WebGL 图形编程。 我正在检查包含该语句的某人的代码 // multiply the position by the matrix. gl_Position = vec4((u_ma
我是一名优秀的程序员,十分优秀!