检测时间线上的冲突,第 2 部分:隔离“真实”重叠

2023-12-09

这是我关于绘制重叠时间冲突的时间轴调度算法的原始问题的延续: PART 1: 检测调度程序时间线上的冲突(算法)

我得到了正确的算法,如下所示,在 24 小时时间轴上分割“冲突”事件,使冲突组中的每个项目占据窗口的 N%。

我当前的问题(第 2 部分)是冲突的事件被视为一个组并且总是平等地划分,但是真正的目标是只隔离“真正的冲突”,这些冲突不一定是整个群体.

考虑下图。

enter image description here

这里,原始算法来自Part 1为事件分配了三路

12:30am - 1:30am
1:00am - 2:30am
2:00am - 4:00am

但这个结果有点不正确。只有 2 处重叠,并且应该显示 2 列。事件 #3 可以转移到第 1 列,因为它与事件 #1 不冲突。唯一的冲突(最大 2 路分割)是#1 与#2 冲突,#3 也与#2 冲突。如灰色箭头所示,这种情况下应该有 2 列。

第 1 部分中的原始冲突检测算法:

 * 1) First sort all events by StartTime
 * 2) Initialize "lastMaxEndTime" to EndTime of First Event (#1)
 * 3) LOOP: For each Event: look at Current Event and Next Event (n+1)
 *          If Next Event Exists
 *              if (lastMaxEndTime > NextEvent StartTime) --> CONFLICT!
 *                  - set Overlap mode 
 *                  - push conflicting Current Event's StartTime into conflict array
 *                  - UPDATE: lastMaxEndTime = MAX(lastMaxEndTime, NextEvent EndTime)
 *              else --> NO CONFLICT
 *                  - if we are in Overlap Mode, this is the last overlap
 *                      - push this final conflicting Current Event's StartTime into conflict array
 *                      - draw overlaps now
 *                      - reset Overlap Mode and clear conflict array
 *                  - else
 *                      - this is a normal event, draw at 100%
 *                  - UPDATE: lastMaxEndTime = endTimeNext
 *                  
 *          Else (No Next Event, this is the last event)
 *                  - if we are in Overlap Mode, this is the last overlap
 *                      - push this final conflicting Current Event's StartTime into conflict array
 *                      - draw overlaps now
 *                      - reset Overlap Mode and clear conflict array
 *                  - else
 *                      - this is a normal event, draw at 100%

或者,这个伪代码与帕特里克的答案略有不同,

   // first event is the current event
   lastMaxEndTime = CurrentEvent EndTime

   if NextEvent exists {

      // if the maximum end time considered in
      // the conflicting component currently
      // under consideration extends beyond the
      // the next event's start time, then this
      // and everything that "conflicts" with it
      // is also defined to "conflict" with NextEvent
      if (lastMaxEndTime > NextEvent StartTime) { // CONFLICT!
         overlappingMode = true;
         overlappingEvents.add(currentEvent); // Add to array
         lastMaxEndTime = max(lastMaxEndTime, NextEvent EndTime)
      }
      else {  // NO CONFLICT
         if (overlappingMode is TRUE) {
            // Resolve Now
            redrawOverlappingEvents(overlappingEvents);
            // Reset
            overlappingMode = false;
            EMPTY overlappingEvents;
         }

         // everything that starts earlier than me,
         // ends before I start. so start over
         lastMaxEndTime = NextEvent EndTime
      }
   }

您需要将事件划分为“通道”,即不重叠事件的序列。使用“贪婪”算法这通常很容易。按顺序考虑事件。对于每个事件,将该事件放置在没有重叠的第一个“通道”(图表上的垂直列)中。如果当前事件与所有列重叠,则将其放入新列中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测时间线上的冲突,第 2 部分:隔离“真实”重叠 的相关文章

  • typescript 类型最大递归限制为 9

    我终于成功创建了一个通用类型 它为我提供了 json 键列表 值的所有可能组合 我什至准备了一种限制递归的方法 type EditAction
  • Javascript 中的深平面多维数组[重复]

    这个问题在这里已经有答案了 我想编写一个可以深度展平给定数组的函数 例如 deepFlatten deepFlatten 1 2 3 1 2 3 deepFlatten 1 2 3 a b c 1 2 3 1 2 3 a b c 1 2 3
  • Outlook 中用于删除重复电子邮件的宏 -

    Public Sub RemDups Dim t As Items i As Integer arr As Collection f As Folder parent As Folder target As Folder miLast As
  • 大小为 n 的数组,其中一个元素 n/2 次

    给定一个由 n 个整数组成的数组 其中一个元素出现超过 n 2 次 我们需要在线性时间和恒定的额外空间中找到该元素 YAAQ 又一个数组问题 我有一种偷偷的怀疑 这类似于 在 C 中 We don t need an array publi
  • 广度优先搜索:检查访问状态的时机

    在有向图的广度优先搜索中 可能循环 当一个节点出队时 其所有尚未访问的子节点都会入队 并且该过程将继续 直到队列为空 有一次 我以相反的方式实现它 将节点的所有子节点排队 并在节点出队时检查访问状态 如果正在出队的节点之前已被访问过 则该节
  • Python 将字符串组合成尽可能短的字符串?

    如果我有一个字符串列表 我想将它们组合成一个具有重叠字符的字符串 如果没有剩余的重叠字符串 请将其添加到末尾 这是一个过于简化的版本 input one two output twone 我正在寻找一种方法来对输入列表中的任意数量的字符串执
  • Fortran 递归分段错误

    我必须设计并实现一个 Fortran 例程来确定方格上簇的大小 并且递归地编写子例程似乎非常方便 然而 每当我的晶格大小超过某个值 大约 200 边 时 子例程就会始终出现段错误 这是我的集群检测例程 RECURSIVE SUBROUTIN
  • 使用 Guava Ordering 对对象列表进行多条件排序

    我有一个类无法实现可比较 但需要根据 2 个字段进行排序 我怎样才能用番石榴实现这一目标 假设班级是 class X String stringValue java util Date dateValue 我有一个清单 List
  • 找到一个恰好出现了 N/2 次的数字

    这是我的面试问题之一 给定一个包含 N 个元素的数组以及元素出现的位置正好 N 2次 其余 N 2 个元素是unique 您如何找到运行时间更好的元素 请记住 元素未排序 您可以假设 N 是偶数 例如 input array 10 2 3
  • 为每个英文单词生成唯一序列号的算法

    对于应用程序 我需要为每个英语单词生成唯一的序列号 最好的方法是什么 一个限制是序列号生成算法应该在普通台式计算机中非常有效 Thanks 你有所有可能的单词的列表吗 如果是 则从第一个字的 0 开始 每个字将序列号加 1 如果不是 那么保
  • Javascript 无法正确排序 DECIMAL 数字

    我有一些代码可以按字母顺序对名称进行排序 我遇到的问题是它处理小数的方式 它对名称进行排序 如下所示 我宁愿它按数字递增 DOG 1 0510 DOG 1 1031 DOG 11 1792 DOG 12 0920 DOG 12 1170 D
  • 使用 TreeMap 和 Comparator 按值对 HashMap 进行排序

    我使用以下代码创建哈希图 然后使用树形图和比较器对哈希图中的值进行排序 然而 输出结果却出乎意料 所以任何关于我做错了什么的想法都会有帮助 Code public static void main String args System ou
  • 单词预测算法

    我确信有一篇关于此问题的帖子 但我找不到提出这个确切问题的帖子 考虑以下 我们有字典可供使用 我们收到了许多单词段落 我希望能够根据此输入预测句子中的下一个单词 假设我们有几个句子 例如 你好 我的名字是汤姆 他的名字是杰瑞 他去了没有水的
  • 按升序对数字字符串列表进行排序

    我创建了一个SQLite https en wikipedia org wiki SQLite数据库有一个存储温度值的表 第一次将温度值按升序写入数据库 然后 我将数据库中的温度值读入列表中 然后将该列表添加到组合框中以选择温度 效果很好
  • PHP - 递归搜索数组中的键和子键,成功时返回键['subkey]

    因此 我编写了一个函数 该函数可以在数组中深入搜索两个级别以查找键和子键对 基本上是在寻找key subkey 如果找到 则返回key subkey 我正在寻找一种以真正递归的方式执行此操作的方法 并根据需要进行尽可能多的深度搜索 直到到达
  • 二分查找问题? [复制]

    这个问题在这里已经有答案了 可能的重复 实施二分查找有哪些陷阱 https stackoverflow com questions 504335 what are the pitfalls in implementing binary se
  • Unix 排序实用程序:使用十六进制字节值作为分隔符

    我想知道是否可以使用十六进制值作为 Unix 的分隔符sort公用事业 基本上我想做一些类似的事情 sort t x00
  • 如何使用二叉树中的递归来完成回溯

    我正在尝试插入一个二进制节点 我的代码很复杂 没有希望挽救它 所以我计划重写它 基本上我没有考虑回溯 也没有仔细考虑算法 我正在尝试使用顺序遍历插入二进制节点 但我不明白应该如何回溯 D B E A C F 我如何搜索根 D 的左子树 然后
  • 如何通过组度量的平均值在 df 内排列 dplyr:: 组?

    借鉴吴卡拉的设计https stackoverflow com a 26555424 9350837 https stackoverflow com a 26555424 9350837答案 我希望根据各个组汇总测量的平均值对分组 df 进
  • 如何计算加权平均值?

    我的语言是PHP 但是算法应该是相当通用的 我有一个关联数组 比方说 评级和评级次数 ratings array 1 gt 1 2 gt 3 3 gt 6 4 gt 3 5 gt 3 这相当于 1 2 2 2 3 3 3 3 3 3 4 4

随机推荐

  • 使用 Windows DOM 和 TXMLDocument 验证 XML:在某些计算机上不起作用

    我有一些 Delphi 代码来读取和验证基于 XSD 文档的 XML 文件 我正在使用 Windows DOM TMXLDocument 本文解释了底层逻辑 它适用于某些计算机 即引发违规标签的异常 但在较新的计算机上 它不会引发任何异常
  • 如何以编程方式将搜索栏添加到 UITableView 标头?

    我将如何以编程方式将搜索栏添加到 uitableview 标头中 具体来说 我有一个栏按钮项目 当按下它时 我想在搜索栏中以动画方式进入表视图标题 当按下取消按钮时 它将以动画方式退出视图 并且标题缩放回正常状态 这可能吗 谢谢 它基于Sw
  • 如何在没有装饰器语法的情况下编写 Angular2?

    我大致如下JavaScript 打字稿快速入门Angular2编写我的应用程序ES6但无法让装饰器工作 entry js import as stylesheet from assets styles app scss import jQu
  • 您可以使用 Subversion 进行部分结账吗?

    如果我在 trunk 下有 20 个目录 每个目录中有很多文件 并且只需要其中的 3 个目录 是否可以仅使用 trunk 下的这 3 个目录进行 Subversion 签出 事实上 由于对我的帖子的评论 它看起来像稀疏目录是要走的路 我相信
  • jetty webSocket:java.lang.IllegalStateException:已提交

    我在我的 Web 应用程序中使用 Jetty Websockets 当我尝试重定向到注销 jsp 时 出现此错误 oejs ServletHandler test java lang IllegalStateException Commit
  • 在 directshow 中以编程方式更改录制文件

    我使用 directshow 制作了一个控制台应用程序 它从实时源 现在是网络摄像头 然后是电视捕获卡 进行记录 在叠加中添加当前日期和时间 然后将音频和视频保存为 asf 现在我希望输出文件每 60 分钟更改一次而不停止图表 我不能错过直
  • 多核处理器的多线程

    我有三星 Galaxy S3 它使用自己的 Exynos 4 四核处理器 所以我想优化我的应用程序 使其可以使用所有 4 个处理器核心 所以我做了一些测试 在一个线程中运行任务 处理时间 8 秒 在四个线程中运行任务 处理时间 仍为 8 秒
  • 如何在Lua中获取表的“sizeof”?

    我正在使用 Lua 涉足 Love2D 并且刚刚实现了一个 StateMachine 来处理一组状态之间的转换 例如IntroState MenuState PlayState 等 在以前的程序中 我通常释放只是 一次性交易 的对象和 或状
  • 如何添加注释以从 jacoco 代码覆盖率报告中排除方法?

    我有一些 Java 代码 我想将其从代码覆盖率中排除 我该怎么做 我希望能够添加注释 有没有办法配置或扩展 jacoco 如 gradle 中使用的 来使用它 Example public class Something ExcludeFr
  • python 有排序列表吗?

    我的意思是一个结构 O log n 复杂度x push 运营 查找元素的复杂度为 O log n 计算复杂度为 O n list x 将被排序 我还有一个关于性能的相关问题list insert 现在是here 您的大 O 要求有什么特殊原
  • Python Unittest:打开并等待程序关闭

    目前 我尝试创建一个打开文件 使用相应的应用程序 的单元测试 然后测试运行应该等到程序关闭 def test HFG self print please edit this file os chdir r C test a os start
  • Excel VBA 比较列数据复制行

    好吧 在这里许多编码专家的帮助下 我设法以某种方式编写了这段代码 我需要创建一个宏来比较两个工作表中的数据 在我的两个工作表中 都有一个名为 eRequest ID 的列 我必须复制以下记录行 DO NOT有一个 eRequest ID 两
  • Magento 免费送货和优惠券折扣

    我有一个免费送货价格规则 其配置如下 所有客户群体 无优惠券 每个客户的使用次数 0 条件 购物车总数 gt 100 发货国家 地区 NL 或 BE 或 DE 免费送货 与配套商品一起发货 然而 当我输入具有固定折扣金额的优惠券时 免费送货
  • RestTemplate + ConnectionPoolTimeoutException:等待来自池的连接超时

    当应用程序没有任何负载时 我在生产中突然遇到此错误 当我的代码尝试使用 Spring Rest 模板发送 PUT 消息时出现问题 这是我如何初始化restTemplate的代码 private static final RestTempla
  • 实体框架中的缓存如何工作?

    我看到大量关于人们努力让 EF 不发送缓存数据的帖子 我坐在这里想知道他们如何让它发送缓存数据 详细信息如下 使用 Entity Framework Core 6 0 6 的 NET 6 0 上的 ASP NET Core 最新版本 通过
  • 为什么我的图像加载在 Firefox 和 Internet Explorer 中没有触发?

    我正在尝试使用该解决方案检测几张图像何时完成加载在这里找到 该解决方案在 Chrome 和 Safari 中运行良好 但在 Firefox 和 IE 中失败 没有错误 预加载函数如下 var preloadPictures function
  • Tensorflow 警告 - 无法加载动态库“cupti64_101.dll”; dlerror:找不到 cupti64_101.dll

    我见过与 cupti dll 错误相关的其他类似问题 然而 答案似乎是dll位置需要在路径中 嗯 我的 dll 在路径中 标题中列出的警告后面是几个与未加载 cupti dll 相关的错误 venv PS D Projects tensor
  • Grails 多数据源域问题

    我有一个项目 表分布在两个数据源之间 我正在配置代码以按照 grails 文档中的 3 3 6 主题访问表http grails org doc 2 0 0 M2 guide conf html dataSourcesAndEnvironm
  • 使用 cordova 1.5 的 xcode 没有准备好设备且没有 console.log

    这是我拥有的所有代码 我既没有得到 xcode 中的日志 也没有得到 deviceReady 事件 我在任何其他平台上也没有得到该事件 在 Ubuntu Android Eclipse 上 我确实得到了控制台日志 但没有 deviceRea
  • 检测时间线上的冲突,第 2 部分:隔离“真实”重叠

    这是我关于绘制重叠时间冲突的时间轴调度算法的原始问题的延续 PART 1 检测调度程序时间线上的冲突 算法 我得到了正确的算法 如下所示 在 24 小时时间轴上分割 冲突 事件 使冲突组中的每个项目占据窗口的 N 我当前的问题 第 2 部分