- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设 space = [0, 100]
并且给出了多个间隔。
这些间隔是空间的碎片,并且可能重叠。
[0, 30], [0, 20], [10, 40], [30, 50], [50, 90], [70, 100]
是一组区间。
从上述集合中选择的跨越整个空间的一组区间的示例是:
[0, 30], [10, 40], [30, 50], [50, 90], [70, 100]
另一个例子是
[0, 30], [30, 50], [50, 90], [70, 100]
这是前面示例中没有 [10, 40]
的集合。
我想找到这些间隔集的所有组合,以计算每个间隔的成本并找到成本最低的那个。
from operator import itemgetter
import collections
tmp = [(0, 30), (0, 20), (10, 40), (30, 50), (50, 90), (70, 100), ]
aa = sorted(tmp, key=itemgetter(1)) # sort with respect to 1st elem
a = set(aa)
space = 100
d_conn = 15
RTT = d_conn*2
bandwidth = 10
def get_marginal_cost(fragment):
return RTT + (fragment[1] - fragment[0])/bandwidth
def dfs(a, start, path=None):
if path is None:
path = [start, ]
if start[1] == space:
yield path
for frgmt in a - set(path):
l = frgmt[0]
r = frgmt[1]
if start[0] < l <= start[1] <= r:
# if l <= start[1] <= r:
yield dfs(a, frgmt, path + [frgmt, ])
for z in a:
if z[0] == 0:
for output in list(dfs(a, z)):
for outpu in list(output):
for outp in list(outpu):
for out in list(outp):
for ou in list(out):
print list(ou)
到目前为止,这是我的尝试,但我无法完成。
特别是,我希望在不使用 Python 中的 yield
功能的情况下完成此操作,因为我不熟悉它并且我可能想在 C++ 中实现它。
谁能帮我写一个解决这个问题的工作程序?
谢谢。
最佳答案
Is it really necessary to build a tree just to find the minimum cost?
可能不会(假设您当前未指定的成本函数显示最优子结构)。
对于线性成本函数,以下经典算法的运行时间为 O(n log n),其中 n 是间隔数。初始化从 mid 到覆盖 [0, mid] 的成本的排序映射。最初,此映射有一个条目,0 -> 0。按右端点对区间进行排序,并按如下顺序处理它们。要处理 [a, b],找到映射条目 mid -> cost 使得 mid >= a 尽可能小。 (如果不存在这样的条目,则继续。)让成本'=成本+成本([a,b]),其中成本([a,b])未指定但始终为正。本地图中最后一个条目的成本大于或等于成本'时,将其删除。插入 b -> 成本'。最后,查找 end 的后继,其中 [0, end] 是要覆盖的空间。
即使您的成本函数不是线性的,因为它是总区间长度和区间数的(可能是单调的)函数,我们也可以获得 O(n^2) 时间的算法,而不是仅仅记住每个中点一个成本,记住 0 到 n 之间的每个整数,使用指定间隔数的解决方案的成本。
关于algorithm - 找到构成整体的所有可能重叠的片段集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27182243/
降本手段一招鲜,增效方法吃遍天; 01 互联网行业里; 降本策略千奇百怪,手段却出奇一致;增效方法五花八门,手段更是花里胡哨; 对于企业来说;
有什么方法可以使用 angularjs 中的部分进行代码分组吗? 原因 --- 我的 Controller 包含太多代码。该 Controller 包含了多个方法和大量功能的代码,降低了代码的可读性。
不幸的是,我的数据库的数据模型必须改变,所以我正在寻找最轻松的方式来迁移我的数据。 此时情况如何: create table cargo{ id serial primary key, per
在 QTextEdit 对象中,假设我想知道字符在鼠标光标下的位置。 我会写... void MyQTextEditObject::mousePressEvent(QMouseEvent* mouse
是否可以在 C++ 中返回一个 return 语句或做一些具有类似功能的事情? 例如,如果代码中有几个函数将指针作为输入,并且每个函数都检查指针是否为 nullptr,这将很方便。如果它是一个 nul
我的 PC 上有一个控制台应用程序,它是 signalR 服务器。 我有一个 html 页面,它是互联网上的 signalR 客户端。但我尝试连接服务器,但我有一个错误的请求 400 错误。如果服务器
我想将应用程序作为后台进程运行。当点击应用程序图标时,它不会显示任何 View ,只会启动后台进程。 最佳答案 对于 iOS 这是不可能的,但是对于 android,react native 有 he
我知道有(昂贵的)框架可以让你在 VS C# 中编写 android 应用程序并将其编译为 android apk。 我也知道,可以在 VS 中编写 Java 应用程序(link)。 是否有可能,甚至
我在做: can :manage, :all if user.role == 'admin' can :approve, Anuncio do |anuncio| anuncio.try(:apr
我是一名优秀的程序员,十分优秀!