当前位置: 首页 > 知识库问答 >
问题:

贪婪最大流量

惠野
2023-03-14

用餐问题:
几家人一起出去吃饭。为了增加他们的社会交往,他们愿意坐在桌子上,这样同一家庭的两个成员就不会在同一张桌子上。假设晚餐特遣队有p家庭,而i家庭有a(i)成员。另外,假设有q桌可用,并且j第1桌的座位容量为b(j)

问题是:我们可以坐在桌子上的最多人数是多少?

编辑:创建一个图并运行最大流算法可以解决这个问题。但如果我们用Dinic算法有2*10^3个顶点,则全局复杂度为O(10^6*10^6)=O(10^12)。

如果我们总是以贪婪的方式坐在较大的群体前面。复杂度为O(10^6)。

所以我的问题是:

1)这个问题中贪婪的方法有效吗?

2)解决该问题的最佳算法是什么?

共有1个答案

楚良平
2023-03-14

很容易想出这样的座位根本不可能的例子,所以这里有一个伪代码来解决这个问题,假设这个问题是可解的:

Sort each family i by a(i) in decreasing order
Add each table j to a max-heap with b(j) as the key

For each family i from the sorted list:
    Pop a(i) tables from max-heap
    Add one member of i to each table
    Add each table j back into the max-heap with b(j) = b(j) - 1

n=a(1)+a(2)+...+a(p)(即总人数)

假设max-heap使用二进制堆,则时间复杂度为:

  • 排序族:O(plog(p))
  • 初始化最大表堆:O(qlog(q))
  • 所有弹出和从max-heap推送:O(nlog(q))

给出O(plog(p)+qlog(q)+nlog(q))的总时间复杂度,其中O(nlog(q))可能占主导地位。

由于我们处理的是整数,如果我们对max-heap使用一个1D bucket系统,使得c是最大的B(j),那么我们将只得到O(n+c)(假设max-heap操作占主导地位),这可能更快。

最后,请投票给大卫的答案,因为证明是必需的,而且是很棒的。

 类似资料:
  • 贪婪 vs 不贪婪 当重复一个正则表达式时,如用 a*,操作结果是尽可能多地匹配模式。当你试着匹配一对对称的定界符,如 HTML 标志中的尖括号时这个事实经常困扰你。匹配单个 HTML 标志的模式不能正常工作,因为 .* 的本质是“贪婪”的 #!python >>> s = '<html><head><title>Title</title>' >>> len(s) 32 >>> print re.

  • 本文向大家介绍贪婪算法相关面试题,主要包含被问及贪婪算法时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法。贪婪算法所得到的结果往往不是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。贪婪算法并没有固定的算法解决框架,算法的关键是贪婪策

  • 输入是实数x1、x2、…、x2n的序列。我们想把这些数字配对成n对。对于第i对(i=1,2,…,n),让Si表示该对中的数字之和。(例如,如果将x(2i−1) 并且x2i作为第i对,Si=x(2i−1) x2i)。我们希望将这些数字配对,以使Maxi[Si]最小化。设计一个贪婪算法来解决这个问题。 这就是问题所在;我的解决方案是简单地对数字进行排序,并将前一个元素与后一个元素配对,加一个/减一个索

  • 有人有线索为什么它对案件2不起作用吗?非常感谢你的帮助。编辑:案例2的预期结果是6130美元。我好像得到了6090美元。

  • 我在读关于贪婪问题的两个属性,我试图理解以下两者之间的区别 最优子结构性质:最优全局解包含其所有子问题的最优解 贪婪选择性质:通过贪婪地选择局部最优选择,可以获得全局最优解 两者不是等价的吗?这两者似乎是一回事;能不能举个例子,最优子结构满足,贪婪选择不满足?以及一个贪婪选择得到满足而最优子结构没有得到满足的例子?

  • 本文向大家介绍php正则表达式中贪婪与非贪婪介绍,包括了php正则表达式中贪婪与非贪婪介绍的使用技巧和注意事项,需要的朋友参考一下 一、贪婪与非贪婪 什么叫贪婪,比如说要从字符串中<td>面包一</td><td>面包二</td>吃面包,本来你只可以吃面包一,可是你贪心,于是就把第一个<td>到最后一个</td>里面的两个面包取出来了,你想多吃点,非贪婪也就是你不贪吃了,就只吃面包一。 我们来看看正