- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我们有 N 个箱子,并且想要在给定时间段 P 中的每个箱子上触发 #[n]
事件 (n < N),方式如下:
P/sum(#[n])
,触发一个事件。P/#[n]
。目标是计算单个循环,该循环将令人作呕地重复(在过程的生命周期内)。事件应该均匀地分布在这个循环的重复中。
例如,假设我们有 3 个容器 A、B 和 C,使得 #[A] = 5
、#[B] = 10
和 #[C] = 15
,那么一个好的循环大概是:
[C, B, C, B, C, A,
C, B, C, B, C, A,
C, B, C, B, C, A,
C, B, C, B, C, A,
C, B, C, B, C, A]
但尚不清楚这是否是最优的,因为 B 分布不均。
当然不能保证事件的数量分布得如此均匀;事实上,事件的数量可能是互质的。
注意:同样好的循环会将 Bs 列与 As 列切换。
数量级:
实用的解决方案是依靠随机算法:对于上述情况,将 5 个 A、10 个 B 和 15 个 C 放入一个序列中,然后随机打乱序列。它不是最优的,但具有良好的复杂性和相对分散的相对较好的概率。
我有一个初步的 Python 解决方案:
def select_minimum(weights):
n, w = 0, weights[0][1]
for i in range(len(weights)):
if weights[i][1] < w:
n, w = i, weights[i][1]
return n
def spread_bins(bins):
total = sum(bins)
pace = [total * 1.0 / b for b in bins]
c = [(i, pace[i]) for i in range(len(bins))]
result = []
for _ in range(total):
n = select_minimum(c)
bin, w = c[n]
c = c[:n] + c[n+1:] + [(bin, w + pace[bin])]
c = [(i, w - 1) for i, w in c]
result.append(bin)
return result
这似乎适用于这个特定的例子,产生:
[2, 1, 2, 0, 1, 2,
2, 1, 2, 0, 1, 2,
2, 1, 2, 0, 1, 2,
2, 1, 2, 0, 1, 2,
2, 1, 2, 0, 1, 2]
但我不相信 (1) 它是正确的并且 (2) 它是最优的。
如何在不同业务的 bin 中随时间均匀分布周期性事件?
最佳答案
请注意,您的问题本质上等同于 Bresenham line drawing algorithm .
虽然 Bresehham 算法将两个位移值 dx
和 dy
均匀地(尽可能)分配到 dx+dy
步上,但您的任务需要“更多尺寸”- N = 3..12
Bresenham 算法可能会在 3D 案例等方面得到扩展(example of 3d and 6d),但我还没有看到简明的概括(例如,使用优先级队列来处理累积错误等)——也许这样的概括确实存在。 ( some words towards common case )
关于algorithm - 如何随着时间的推移在不同业务的容器中均匀分布周期性事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53829428/
我已经完成了创建和启动计时器的手册页。 http://man7.org/linux/man-pages/man2/timerfd_create.2.html 但是,除了 arm(start) 和 di
我正在用 opengl 编写新的代码库,很早就遇到了一个奇怪的错误。这是帧速率的明显波动,具有重复性和可预测性。 我知道它肯定与渲染的对象成正比。它也与屏幕大小成正比(不是视口(viewport)大小
我知道如何使用计算数组中点之间的欧几里得距离 scipy.spatial.distance.cdist 类似于这个问题的答案: Calculate Distances Between One Poin
我想使用 CGAL 构造周期性 3D Delaunay 三角剖分和信息(在本例中为整数)。对于 2D,如果我构造一个 vector 对(点,信息)并将其传递给三角测量函数,则效果很好。然而,非常类似的
每隔几天,我们就会收到少量 MySql 超时错误,这些错误与我们的 MySQL RDS 实例上的 CPU 和数据库连接出现大量峰值相对应。这些查询通常非常快(<5 毫秒),但突然超时。 此时,数据库操
我是一名优秀的程序员,十分优秀!