- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 int
数组,其中包含像 {47, 94, 79, 90, 89, 14, 82, 92}
这样的数字。该数组必须分为三个子数组,以便每个数组的总和尽可能小,也就是最小。我认为它值得使用递归来解决,但是这种方法使我逃脱了,我还想过在初始数组上使用 qsort
然后“贪婪地”划分它,但它并不总是有效(例如采取最低和最高数字等)。
例如上面的数字将分为:
1) {94, 90, 14}
2) {92, 89}
3) {82, 79, 47}
这里第三个数组包含最高的最小和,即 208
。数字的顺序无关紧要。问题是如何将数字公平地分成三组,使它们形成最小的总和。我必须测试所有可能性吗?
最佳答案
可以使用动态规划对所描述的问题进行建模。我们可以定义一个状态空间如下。
v[i,t1,t2] := minimal load in partition 3 attainable for items
in {0,...,i} where the total load in partition 1
is exactly t1 and the total load in t2 is exactly t2
if such a load exists and positive infinity otherwise
对于状态空间,i
在{0,...n}
,而t1
,t2
位于 {0,...,P}
中,其中 P
是项目的总和,它是目标值的上限,并且由n*smax
其中 smax
是输入中出现的最大值。
我们得到以下递归关系,其中情况基本上取决于迭代选择每个元素分配到哪个分区,其中 s_i
表示 i
的大小- 第一项。
v[i,t1,t2] = min { v[i-1,t1-s_i,t2],
v[i-1,t1,t2-s_i],
v[i-1,t1,t2] + s_i }
最小表达式中的第一项对应于将项目 i
分配到分区 3,第二种情况对应于将项目 i
分配到分区 2,第三种情况对应将项目i
分配给分区3。状态空间填充后,可以通过计算以下表达式获得所需的结果(即分区的最小最大负载)。
Result = min { max { t1, t2, v[n,t1,t2] : t1, t2 in {0,...,P} } }
在上面的最大值表达式中,t1
对应分区1的负载,t2
对应分区2的负载,状态值 v[n,t1,t2]
对应于分区 3 中的负载。草图算法的运行时间可以由 O(n^3*smax)
,这是一个伪多项式运行时界限。如果还需要将项目最佳分配到分区中,则必须使用回溯或辅助数据结构。
请注意,给其中一个相同的分区赋予特殊角色似乎是人为的,因为它的负载是状态值,而其他分区的负载用于状态空间的轴。此外,乍一看,状态的值似乎很容易获得,因为它只是剩余的总负载
sum_{j=1}^{i} s_i - ( t1 + t2 )
但事实并非如此,因为上述数量只确定分区 3 中的负载,如果这样的分配确实存在的话;在状态空间的定义中,使用正无穷表示不存在这样的赋值。
该方法与描述的方法非常相似 here , 第 12 页 ff。总的来说,所描述的问题可以看作是一个调度问题,即最小化 3 个相同的并行机器的完工时间。在所谓的three-field notation ,这个问题被表示为P3||Cmax
,这意味着机器的数量不是输入的一部分,而是固定的。
关于c - 三爪分区(动态编程示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34481973/
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Sample data for IPv6? 除了 wireshark 在其网站上提供的内容之外,是否有可以下
我正在寻找可以集成到现有应用程序中并使用多拖放功能的示例或任何现成的解决方案。我在互联网上找到的大多数解决方案在将多个项目从 ListBox 等控件拖放到另一个 ListBox 时效果不佳。谁能指出我
我是 GATE Embedded 的新手,我尝试了简单的示例并得到了 NoClassDefFoundError。首先我会解释我尝试了什么 在 D:\project\gate-7.0 中下载并提取 Ga
是否有像 Eclipse 中的 SWT 示例那样的多合一 JFace 控件示例?搜索(在 stackoverflow.com 上使用谷歌搜索和搜索)对我没有帮助。 如果它是一个独立的应用程序或 ecl
我找不到任何可以清楚地解释如何通过 .net API(特别是 c#)使用谷歌计算引擎的内容。有没有人可以指点我什么? 附言我知道 API 引用 ( https://developers.google.
最近在做公司的一个项目时,客户需要我们定时获取他们矩阵系统的数据。在与客户进行对接时,提到他们的接口使用的目前不常用的BASIC 认证。天呢,它好不安全,容易被不法人监听,咋还在使用呀。但是没办法呀,
最近在做公司的一个项目时,客户需要我们定时获取他们矩阵系统的数据。在与客户进行对接时,提到他们的接口使用的目前不常用的BASIC 认证。天呢,它好不安全,容易被不法人监听,咋还在使用呀。但是没办法呀,
我正在尝试为我的应用程序设计配置文件格式并选择了 YAML。但是,这(显然)意味着我需要能够定义、解析和验证正确的 YAML 语法! 在配置文件中,必须有一个名为 widgets 的集合/序列。 .这
你能给我一个使用 pysmb 库连接到一些 samba 服务器的例子吗?我读过有类 smb.SMBConnection.SMBConnection(用户名、密码、my_name、remote_name
linux服务器默认通过22端口用ssh协议登录,这种不安全。今天想做限制,即允许部分来源ip连接服务器。 案例目标:通过iptables规则限制对linux服务器的登录。 处理方法:编
我一直在寻找任何 PostProjectAnalysisTask 工作代码示例,但没有看。 This页面指出 HipChat plugin使用这个钩子(Hook),但在我看来它仍然使用遗留的 Po
我发现了 GWT 的 CustomScrollPanel 以及如何自定义滚动条,但我找不到任何示例或如何设置它。是否有任何示例显示正在使用的自定义滚动条? 最佳答案 这是自定义 native 滚动条的
我正在尝试开发一个 Backbone Marionette 应用程序,我需要知道如何以最佳方式执行 CRUD(创建、读取、更新和销毁)操作。我找不到任何解释这一点的资源(仅适用于 Backbone)。
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题?通过 editing this post 添加详细信息并澄清问题. 去年关闭。 Improve this
我需要一个提交多个单独请求的 django 表单,如果没有大量定制,我找不到如何做到这一点的示例。即,假设有一个汽车维修店使用的表格。该表格将列出商店能够进行的所有可能的维修,并且用户将选择他们想要进
我有一个 Multi-Tenancy 应用程序。然而,这个相同的应用程序有 liquibase。我需要在我的所有数据源中运行 liquibase,但是我不能使用这个 Bean。 我的应用程序.yml
我了解有关单元测试的一般思想,并已在系统中发生复杂交互的场景中使用它,但我仍然对所有这些原则结合在一起有疑问。 我们被警告不要测试框架或数据库。好的 UI 设计不适合非人工测试。 MVC 框架不包括一
我正在使用 docjure并且它的 select-columns 函数需要一个列映射。我想获取所有列而无需手动指定。 如何将以下内容生成为惰性无限向量序列 [:A :B :C :D :E ... :A
$condition使用说明和 $param在 findByAttributes在 Yii 在大多数情况下,这就是我使用 findByAttributes 的方式 Person::model()->f
我在 Ubuntu 11.10 上安装了 qtcreator sudo apt-get install qtcreator 安装的版本有:QT Creator 2.2.1、QT 4.7.3 当我启动
我是一名优秀的程序员,十分优秀!