- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个日历,通常是一个包含多行的 csv 文件。每行对应一个个体,是一个连续值“0”和“1”的序列,其中“0”表示空时隙,“1”表示占用时隙。一行中不能有两个分开的序列(例如,两个由 '0' 分隔的 '1' 序列,例如 '1,1,1,0,1,1,1,1')。
问题是通过组合个体并解决时隙之间的冲突来最小化行数。注意时隙不能重叠。例如,对于 4 个个体,我们有以下序列:
id1:1,1,1,0,0,0,0,0,0,0
id2:0,0,0,0,0,0,1,1,1,1
id3:0,0,0,0,1,0,0,0,0,0
id4:1,1,1,1,0,0,0,0,0,0
可以将它们排列成两行,同时跟踪排列的个人(记录)。在我们的例子中,它产生:
1,1,1,0,1,0,1,1,1,1 (id1 + id2 + id3)
1,1,1,1,0,0,0,0,0,0 (id4)
约束条件如下:
id1:1,1,1,0,0,0,0,0,0,0
id2:0,0,0,0,0,0,1,1,1,1
id3:0,0,0,0,1,0,0,0,0,0
id4:1,1,1,1,1,0,0,0,0,0
id5:0,1,1,1,0,0,0,0,0,0
id6:0,0,0,0,0,0,0,1,1,1
id7:0,0,0,0,1,1,1,0,0,0
id8:1,1,1,1,0,0,0,0,0,0
id9:1,1,0,0,0,0,0,0,0,0
id10:0,0,0,0,0,0,1,1,0,0
id11:0,0,0,0,1,0,0,0,0,0
id12:0,1,1,1,0,0,0,0,0,0
id13:0,0,0,1,1,1,0,0,0,0
id14:0,0,0,0,0,0,0,0,0,1
id15:0,0,0,0,1,1,1,1,1,1
id16:1,1,1,1,1,1,1,1,0,0
解决方案
O(NT)
中提供了一个可行的解决方案(其中
N
是个体(id)的数量,
T
是时隙(列)的数量)基于贪婪算法。
最佳答案
我将算法作为一种爱好学习,我同意 Caduchon 的观点,贪婪是必经之路。虽然我认为这实际上是集团覆盖问题,但更准确地说:https://en.wikipedia.org/wiki/Clique_cover
关于如何建立集团的一些想法可以在这里找到:https://en.wikipedia.org/wiki/Clique_problem
集团问题与独立集问题有关。
考虑到限制,而且我不熟悉 matlab 或 R,我建议这样做:
Step 1. 建立独立集时隙数据。对于每个为 1 的时隙,为所有也为 1 的记录创建一个映射(用于快速查找)。这些都不能合并到同一行中(它们都需要合并到不同的行中)。 IE:对于第一列(槽),数据的子集如下所示:
id1 :1,1,1,0,0,0,0,0,0,0
id4 :1,1,1,1,1,0,0,0,0,0
id8 :1,1,1,1,0,0,0,0,0,0
id9 :1,1,0,0,0,0,0,0,0,0
id16:1,1,1,1,1,1,1,1,0,0
数据将存储为类似
0: Set(id1,id4,id8,id9,id16)
的内容。 (零索引行,我们从第 0 行而不是第 1 行开始,尽管在这里可能无关紧要)。这里的想法是进行 O(1) 查找。您可能需要快速告诉 id2 不在该集合中。您也可以为此使用嵌套哈希表。 IE: 0: { id1: true, id2: true }`。集合还允许使用集合操作,这在确定未分配的列/id 时可能会有很大帮助。
id1 :1,1,1,0,0,0,0,0,0,0
id4 :1,1,1,1,1,0,0,0,0,0
id5 :0,1,1,1,0,0,0,0,0,0
id8 :1,1,1,1,0,0,0,0,0,0
id9 :1,1,0,0,0,0,0,0,0,0
id12:0,1,1,1,0,0,0,0,0,0
id16:1,1,1,1,1,1,1,1,0,0
第 3 步。现在我们有了起始组,我们需要添加到它们中,同时尽量避免新成员和旧组成员之间的冲突(这需要额外的一行)。这是我们进入 NP 完全领域的地方,因为有很多东西(更准确地说大约是 2^N)要分配东西。
id9 :1,1,0,1,1,1,0,0,0,0 (+id13)
第 5 列:3=>1、7=>5、11=>8、15=>12
id1 :1,1,1,0,1,0,0,0,0,0 (+id3)
id4 :1,1,1,1,1,0,0,0,0,0
id5 :0,1,1,1,1,1,1,0,0,0 (+id7)
id8 :1,1,1,1,1,0,0,0,0,0 (+id11)
id9 :1,1,0,1,1,1,0,0,0,0 (+id13)
id12:0,1,1,1,1,1,1,1,1,1 (+id15)
id16:1,1,1,1,1,1,1,1,0,0
我们将快速查看下一列并查看最终结果:
7th Column: 2=>1, 10=>4
8th column: 6=>5
Last column: 14=>4
所以最后的结果是:
id1 :1,1,1,0,1,0,1,1,1,1 (+id3,id2)
id4 :1,1,1,1,1,0,1,1,0,1 (+id10,id14)
id5 :0,1,1,1,1,1,1,1,1,1 (+id7,id6)
id8 :1,1,1,1,1,0,0,0,0,0 (+id11)
id9 :1,1,0,1,1,1,0,0,0,0 (+id13)
id12:0,1,1,1,1,1,1,1,1,1 (+id15)
id16:1,1,1,1,1,1,1,1,0,0
方便的是,即使是这种“简单”的方法也允许我们将剩余的 id 分配给原始的 7 个组,而不会发生冲突。这在实践中不太可能发生,如您所说的“500-1000”ID 和多达 30 列,但远非不可能。粗略地说,500/30 大约是 17,而 1000/30 大约是 34。所以我希望你能够减少到大约 10-60 行,大约有 15-45 行,但它高度依赖于数据和有点运气。
O(NT)
哪里
N
是个体 (id) 的数量和
T
是时隙数(列)。需要
O(NT)
构建数据结构(基本上将表转换为图形)。之后,对于每一列,它最多需要检查和分配
O(N)
个人 ID,他们可能会被检查多次。在实践中自
O(T)
大约是 O(sqrt(N)) 并且性能随着您通过算法而增加(类似于快速排序),很可能是
O(N log N)
或
O(N sqrt(N))
平均而言,虽然实际上使用
O(E)
可能更准确哪里
E
是
1s
的数量(边缘)在表中。每个都可能被检查和迭代固定次数。所以这可能是一个更好的指标。
关于r - 优化(最小化)文件 : an optimization problem in line with permutations and agenda scheduling 中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63159538/
我很绝望,现在已经两天(!!)天都没有解决方案来解决以下问题。 更新 Lion 后,我想使用最新版本的 rvm 安装额外的 rubies。 这是我之后调用 bundler 时发生的情况: /Users
我的问题: ajax 调用的无限循环会产生问题吗? 假设有这样的代码: ajaxcall(); function ajaxcall(){ jQuery.ajax({ typ
这是一个有趣的小项目,我已经开始尝试并最大限度地提高赢得办公室曲棍球池的机会。我试图找到最好的方法来选择 20 名能够在最高工资帽内给我最多分数的球员。 例如,假设原始数据由 玩家姓名 位置(前锋,后
我有一个总数为540000的数字列表。我想将此列表分为3个列表,每个列表总共180000。最有效的编程方法是这样做,假设数字列表是一个平面文件,每个数字为线? 最佳答案 听起来像Knapsack pr
抱歉,也许因为我不是英语,我不知道,但我找不到解决几个问题的任何资源;也许我用的词不正确.. 我想了解有关 iPhone 4 和 5 不同分辨率的更多信息。 首先:如果我开发针对 iPhone 4 分
在全局配置缓存后,如 docs ,如果我在 app.module 之外使用 CacheInterceptor,它会抛出错误。 app.module.ts const cacheConfig = {
我无法让 g:each 工作。我正在尝试遍历任何内容,但它永远不起作用 = 不生成任何 html。 索引.gsp Item ${i.name} 用户 Controller .g
在我的 XAML 文件中,我有一个这样声明的 ListBox:
想知道你是否可以帮助我: 我有一个名为initializeAll的方法: public final void initializeAll() { //other stuff........ rand
我尝试过使用 XML 和 JAVA 在我的 Android Activity 中创建一个 ImageView。这两次,我都能够获取我一天前创建的所有其他 PNG 资源以显示在 ImageView 中。
我需要你的帮助。这是什么意思? Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'
这是一段代码 function test() { this.value = "foo"; } $(document).ready(function () { test();
这是一些非常基础的东西。渲染期间引发异常:java.util.Locale.toLanguageTag()Ljava/lang/String; XML: 问题似乎出在 Edit
除其他来源外,我还使用 Stackoverflow 上的各种帖子,尝试实现我自己的 PHP 分类器,以将推文分类为正面、中性和负面类别。在编码之前,我需要弄清楚流程。我的思路和例子如下:
在过去的几周里,每当我在 Eclipse 上使用 SVN 插件时,我都会收到以下错误: Certificate Problem There is a problem with the site's s
我被拒绝运行以下功能(位于 /var/www/mysite/public_html/app/Controllers/Script.php) $structure = '/var/www/mysite/
我正在使用 ctags 为我的 Emacs 创建标签以使用 cygwin 从中读取符号。 Emacs 说 “访问标签表缓冲区:文件/home/superman/tags 不是有效的标签表” 这是我查找
我知道作为一种函数式语言,XSL 没有像传统的 for 循环(而是 for-each)那样的东西。 我正在尝试从可变数量的元素开始创建一个具有固定数量 (7) 的表。总之,我有
我正在使用RavenDB进行一些测试,以基于iphone应用程序存储数据。该应用程序将发送一个带有GPS key 的5个GPS坐标的字符串。我在RavenDB中看到每个文档约为664-668字节。这是
我无法理解我的应用程序的行为。我想创建一个简单的窗口 (1000x700px),分为两部分(分别为 250px 和 750px 宽度)。我尝试了以下代码: import java.awt.Color;
我是一名优秀的程序员,十分优秀!