- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我有 n 个盒子,每个盒子里面都有一些值 b[i]
.我可以保证对一组框进行排序,使得 b[1] <= b[2] <= ... <= b[n]
.我也可以保证有一个元素 b[i] = x
我想找到哪个盒子 x
在里面。问题是打开每个盒子b[i]
有一些成本c[i]
.
问题是如何最小化寻找 x
的总成本?我的直觉方法是对 b[i]
进行二分查找。的。这减少了操作总数(因为我得到了 O(logn) 比较)但我无法确切地看到这将如何最小化总成本。
显然,只选择最便宜的盒子并继续下去是行不通的,因为在最坏的情况下我会打开每个盒子。关于如何改进这一点或如何证明我的方法是最优的/不是最优的,有什么想法吗?
最佳答案
使用动态规划寻找最佳决策树。设 T(i, j)
是搜索位置 i..j
的最坏情况成本。然后
T(i, j) = { 0, if i > j;
{ min_{k=i}^j (c[k] + max(T(i, k-1), T(k+1, j))), otherwise.
记住每个区间的 k
的最佳选择。
运行时间是 O(n^3)
,使用 Knuth 的技巧可以减少到 O(n^2)
optimal BST .
关于algorithm - 有什么更好的方法来解决这个(贪心?)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55039307/
>>> import re >>> p = re.compile('.*&l=(.*)(&|$)') >>> p.search('foo&l=something here&bleh').group(1
最近有一道面试题如下:我们得到了一个单词列表,我们想要格式化它们以最大化回车符的数量,同时将每行的字母数量保持在一个范围内。 例如,我们希望每行的字母范围为 5 - 10(含),一种解决方案是: he
我正在使用二维数组来处理游戏中的对象。数组的维度就像笛卡尔网格上的坐标。当玩家选择一个点时,我想从数组中收集 N 个最近的网格单元,即使该点不是有效的数组索引。 例子:从 [0,0] 到 [10,10
我在 Hibernate 之上使用 Olingo 1.2。 我有一个返回 250 行的请求,每行以一对多关系链接到另一个表。 我执行 $expand 以获取子表中的所有数据,但是当我检查在数据库中执行
我正在 ANTLR4 中构建语法,但收到此警告 TL4.g4:224:12: greedy block ()* contains wildcard;非贪婪语法 ()*?可能是首选 这是它引用的代码行
In the default greedy mode, all data offered to targets are accepted, even if the other target doesn
假设我有 n 个盒子,每个盒子里面都有一些值 b[i] .我可以保证对一组框进行排序,使得 b[1] j; { min_{k=i}^j (c[k] + max(T(i, k-1)
本文已收录到 AndroidFamily ,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周末是 LeetCode 第 339 场周赛,你参加
什么是 PHP 中的“贪心 token 解析”?我在 Codeigniter 指南中找到了这个: “除非需要解析变量,否则始终使用单引号字符串,并且在确实需要解析变量的情况下,使用大括号防止贪婪的标记
本文已收录到 AndroidFamily ,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周末是 LeetCode 第 337 场周赛,你参加
我是一名优秀的程序员,十分优秀!