- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
问题:循环问题允许您对通过特定弧的流量同时设置下限和上限。我理解的上限(就像管道一样,只有这么多东西可以通过)。但是,我很难理解下限的想法。这是什么意思?请问有解决问题的算法吗...
上下文:我试图找到一种方法来快速安排一组事件,每个事件都有一个长度和一组可以安排的可能时间。我试图将此问题简化为循环问题,对此存在有效的算法。
我将每个事件作为一个节点放在有向图中,并为其提供它应该填充的时隙数量。然后我将所有可能的时间也添加为节点,最后添加所有时隙,如下所示(所有弧都指向右侧):
前两个事件有一个可能的时间和长度为 1,最后一个事件的长度为 4 和两个可能的时间。
这张图有意义吗?更具体地说,“填充”的时隙数量是 2 个(仅“简单”的)还是 6 个,如图所示?
(我正在使用 LEMON 库中的推送重新标记算法,如果这有任何区别的话。)
最佳答案
关于大循环问题:
我同意@Helen;尽管设想实际使用下限可能不是那么直观,但它是必须满足的约束。我不相信您能够忽略此约束,即使该流量为零。
flow = 0 的情况吸引了更直观的最大流量问题(正如@KillianDS 所指出的)。在那种情况下,如果一对节点之间的流量为零,则它们不会影响“流量和守恒”:
当没有给出下限时(假设流是非负的)零流不能影响结果,因为
由于某些外部约束,可能存在最小流量的实际示例(相关问题需要至少 X 水通过某个管道,正如@Helen 所指出的)。下限约束也可能来自等效的对偶问题,该问题最小化流,使得某些边缘具有下限(并找到与具有上限的最大化问题等效的最优值)。
针对您的具体问题:
您似乎正试图在一组固定的时间段内完成尽可能多的事件(其中任何两个事件都不能在一个时间段内重叠)。
考虑可以分配给给定事件的时间段集:
E1 -- { 9:10 }
E2 -- { 9:00 }
E3 -- { 9:20, 9:30, 9:40, 9:50 }
E3 -- { 9:00, 9:10, 9:20, 9:30 }
所以你想最大化任务分配的数量(即事件事件发生在被“打开”的边上)s.t.结果集是成对不相交的(即没有分配的时隙重叠)。
我相信这是 NP-Hard 因为如果你能解决这个问题,你就可以用它来解决 maximal set packing problem (即最大集合包装减少到这个)。你的问题可以用整数线性规划来解决,但实际上这些问题也可以用贪心法/分支定界法很好地解决。
例如,在您的示例问题中。事件 E1 与 E3 “冲突”,E2 与 E3 冲突。如果E1被赋值(只有一个选项),那么E3就只剩下一个可能的赋值(后面的赋值)。如果为 E3 进行了此分配,则 E2 仅剩下一个分配。此外,可以单独解决不相交的子图(不可能在资源上发生冲突的事件集)。
如果是我,我会从一个非常简单的贪婪解决方案开始(首先分配具有较少可能“插槽”的任务),然后将其用作分支定界求解器的种子(如果贪婪解决方案找到 4 个任务赋值,然后如果你的赋值的递归子树不能超过 3)。您甚至可以通过创建集合之间的成对交集图并仅在进行分配时通知相邻集合来挤出一些额外的性能。您还可以在继续分支定界时更新分配的最佳数量(我认为这很正常),所以如果您运气好的话,您会很快收敛。
我用同样的想法找到了可以解释一组已识别肽(蛋白质片段)的最小蛋白质组,并发现它足以解决实际问题。这是一个非常相似的问题。
如果您需要最先进的性能:换句话说,整数线性规划几乎可以解决您喜欢的这个问题的任何变体。当然,在非常糟糕的情况下它可能会很慢(实际上,它可能对你有用,特别是如果你的图不是非常密集地连接)。如果不是,则常规线性规划松弛近似于 ILP 的解决方案并且通常非常适合此类问题。
希望这对您有所帮助。
关于c++ - 循环问题中的 'lower bound'是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10570817/
在许多在线资源中,可以找到“内存”、“带宽”、“延迟”绑定(bind)内核的不同用法。在我看来,作者有时会使用他们自己对这些术语的定义,我认为这对某人做出明确区分非常有益。 据我了解:带宽绑定(bin
FIFO、LIFO 和LC Branch and Bound 有什么区别? 最佳答案 Branch & Bound 通过使用估计边界来限制可能解决方案的数量来发现完整搜索空间内的分支。不同的类型(FI
我有一个网页,其中有一些 Kendo 控件(例如下拉菜单和按钮)可以正常工作,但是添加Grid 会导致问题。 @(Html.Kendo().Grid(Model).Name("grid").Colu
术语“CPU 限制”和“I/O 限制”是什么意思? 最佳答案 这非常直观: 如果 CPU 更快,程序就会运行得更快,即程序的大部分时间只是使用 CPU(进行计算),则该程序是 CPU 密集型。 计算
我在以下代码段中遇到问题并发出警告,希望您能帮助我: fprintf (fp, "%dd%d+%d ", pMobIndex->mana[DICE_NUMBER], DICE_NUMBER 在我
swift 2 let gap = CGFloat(randomInRange(StackGapMinWidth...maxGap)) Missing argument label 'range:'
swift 2 let gap = CGFloat(randomInRange(StackGapMinWidth...maxGap)) Missing argument label 'range:'
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 6 年前。 这个问题是由于打字错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在
我想在gcc8.2下启用数组边界检查,这样可以帮助在编译期间检查数组下标是否越界,它可能会给出如下警告:数组下标高于数组边界 [-Warray-bounds] 我使用 coliru 做了一个演示: #
我只是想知道在 Apple API 中的什么地方定义了变量“bounds.minX”、“bounds.maxX”?我查看了“UIView”和“CGRect”文档,但似乎找不到它? 最佳答案 它包含在"
我想覆盖整个屏幕。我想将其框架设置为覆盖整个屏幕。浏览堆栈溢出时,我发现了这两种不同的设置 View 框架以覆盖屏幕的方法: [UIScreen mainScreen].bounds [UIApplc
在协程中执行 IO 绑定(bind)函数(例如,从后端请求数据)给了我一个优势,即在请求结果可用之前暂停它的执行,对吗?但是,受 CPU 限制的函数(例如,解析一个巨大的文本文件)不会“等待”任何东西
public class ChampionsLeague> extends League{ ... 如何创建此类的实例? ChampionsLeague league = new ChampionsL
我遇到了以下问题: 我有这些类和接口(interface)定义 public abstract class ViewModelRefreshPostListFragment> extends
我注意到在使用 (Swift 4.0) 的 IOS X 代码中,我至少可以通过以下两种方式请求 View 的高度 V: V.bounds.size.height 和... V.bounds.heigh
swift 中 bounds.size.width 和 bounds.width 有什么区别?他们会返回同样的东西吗?谢谢! 最佳答案 bounds 是 UIView 的 CGRect 结构属性,其中
在我看来不可能包含 Integer.MAX_VALUE和Long.MAX_VALUE创建 IntStream 时尽可能使用随机值或LongStream使用 java.util.Random 的边界类。
我有二叉树类: public class BinaryTree> extends AbstractTree { protected TreeNode root;
我最近做了并更新了我的 Xamarin iOS 项目,我曾经能够调用以下代码来检索屏幕宽度和高度: if (orientation == UIInterfaceOrientation.Landscap
我仍然不明白为什么我收到这个警告 array subscript is above array bounds [-Warray-bounds] 对于一个小的 C 代码如下: #include #in
我是一名优秀的程序员,十分优秀!