- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设你有 k 种石头和 m 种石头您有第一种类型的 f1 石头,第二种类型的 f2 石头,依此类推。
(即总和(f_i)= k)。
另外,给定一个正整数r。
最少需要多少个桶,这样我们才能将石头类型分配到每个桶的大小不超过 r 的桶中?(我们也知道对于每个 i,f_i <= r)。
这个问题实际上是某种装箱问题,所以我不确定它是否有确切的答案,但我们可以给它一个上限吗?
一个简单上限的例子是 m,因为这将允许我们将每种石头类型打包成他自己的桶。
一个无效边界的例子是 k/r。原因是如果k=9,r=3,我们有5种石头,f1=2,f2=2,f3=2,f4=2,f5=1,
那么无论我们如何划分石头类型,都必须有一个大小 >= 4 的桶。
所有同类型的石头都必须放到同一个桶中。
有什么建议:)?
编辑:m 和 f_i 是未知的,我正在寻找一个边界,它使我能够为所有 (m,f_i) 组合分配石头。
另一个例子:假设 r = 3。我将证明 k/2 个桶就足够了:
让我们用 x 表示有 3 个 gem 的类型数。y 表示恰好有 2 个石子的类型数,z 表示单石子类型的数量。
根据定义:3x + 2y + z = k。我们可以为 3 石类型分配 x 个桶。
如果 (y > z) {第一种情况}:将其中一种 y 类型与其中一种 z 类型一起放入桶中{我们有 z 个这样的桶}。
将其余的 y 类型放入一个桶中。
因为 y > z 我们正好使用了 x+y 个桶,并且因为 3x + 2y + z = k => x+y <= k/2。
如果 (z >= y) {第二种情况}:很容易看出,我们可以将所有石子装在 k/3 个桶中(每个桶都可以装满,正好包含 3 个石子)。
此外,对于 r=3,这将它限制得很紧(如果 x=z=0 和 y=k/2,那么我们正好需要 k/2 个桶)。
现在的问题是:k/2 个桶绑定(bind)是否适用于所有 r 个值?
我可以证明 2k/(r+1) 个桶的下限(即紧实例),但它与 k/2 相去甚远。任何人都可以收紧界限吗?
最佳答案
您可以使用 first-fit algorithm对于几乎不需要修改的装箱问题:
m
个整数的列表 L
,每个整数代表每种类型的石头的数量。L
,如果将L
的当前元素加入桶中,不超过r
,则添加到桶中并将其从 L
中删除。L
为空,则返回桶数。否则返回第 3 步。这个算法是 11/9*OPT + 6/9
的近似值,这是相当不错的,在大多数情况下给出了很好的结果。
该算法的运行类型为O(m log m)
。如果未给出 m
,要创建列表,您需要计算每种类型的石头数量,这需要 O(L)
时间,整个过程将花费 O((m log m) + L)
时间。
关于algorithm - 将石头分配到桶中(不重要)/Integer Bin Packing Upper bound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20823707/
我正在尝试执行 JavaPairRDD 和 JavaPairRDD 的 leftOuterJoin> 并且函数签名返回类型是 JavaPairRDD>>> 这里可选的是 com.google.comm
我正在尝试按元素的频率对元素进行排序 import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt
这个问题已经有答案了: Is List a subclass of List? Why are Java generics not implicitly polymorphic? (19 个回答) 已
编辑:问题已解决:请参阅 Karim SNOUSSI 的答案和我在下面的评论。 这是我在堆栈溢出时遇到的第一个问题,所以我可能不会一开始就把所有事情都做对。对此感到抱歉。此外,我对 Java 和一般
#include #include using namespace std; class Integer { public: int i; Integer (int ll
我不明白: ArrayList list = new ArrayList(); Collection list1 = new ArrayList(); 类 ArrayList扩展实现接口(interf
我编写了:。它成功了。我不知道为什么?
我编写了:。它成功了。我不知道为什么
我编写了:。它成功了。我不知道为什么?
Collectors.counting()返回 long此方法中每个键的值: private static Map countDuplicates(HashSet cards) { retur
我正在尝试通过搜索旧元素并将其替换为新元素来更新节点的元素。但是有一个我不明白的错误。是什么导致我的代码出现该错误,我该如何解决?错误; The method update(Integer, Inte
我有一个称为 client 的表,其中有一列称为created_time ,所以实际上我想绘制一个 map ,以便我可以知道在哪一年和哪一个月添加了多少客户?现在的要求是假设在 2018 年 11 月
这个问题已经有答案了: Is Java "pass-by-reference" or "pass-by-value"? (91 个回答) 已关闭 8 年前。 我对 ArrayList Collecti
我意识到下面的代码是正确的 Integer.MIN_VALUE == -Integer.MIN_VALUE == Math.abs(Integer.MIN_VALUE) 这是因为当我们取反-21474
我有以下类 AccountWebappGridRow,它扩展了 AccountGridRow: public class AccountWebappGridRow extends AccountGri
我正在学习 Haskell 并看到了函数组合。 尝试复合 map和 foldl mapd = (map.foldl) 比 test = (mapd (\x y -> x + y ) [1,2,3,4]
我有两个相同大小的数组和两个方法。 public class Client { private static int[] ints; private static final int
我喜欢 Java 8 中的 Streams 概念。现在我想借助 Java Streams 将 Java 中的 Map 转换为排序列表。我只想显示列表而不将其存储在任何地方。我希望在结果列表中有这个输出
我有一个数据库表,其中包含电视节目类型列表和关联的 ARGB 颜色值,用于在显示电视指南时突出显示 Android ListView 中的电视节目。流派表看起来像这样... id genre
我有一个 Integer 类,它应该模拟一个整数 mod n。因此,它具有如下构造函数: Integer::Integer(int x) : m(x), n(0) { } Integer::I
我是一名优秀的程序员,十分优秀!