【发布时间】:2011-08-11 17:41:22
【问题描述】:
我有一些这样的数据:
1: 2 - 10
2: 3 - 15
3: 4 - 9
4: 8 - 14
5: 7 - 13
6: 5 - 10
7: 11 - 15
我会尝试一个表示来使其更清楚:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 |--------------------------------------X---------|
2 |--------------------------------X--------------------------------------------|
3 |--------------------------X---|
4 |-X-------------------------------------|
5 |--------X------------------------------|
6 |--------------------X----------|
7 |---------------------------|
因此,在示例情况下,如果使用第二种方案,8-9 是关键时期,因为所有点都处于活动状态。在 python 中解决这个问题的快速而好的方法是什么?我正在考虑使用动态编程,但还有其他建议的方法吗?
到目前为止我的方法:
我更多的是从实时的角度思考。所以,每当我得到一个新点时,我都会这样做:假设我已经得到了2-10 并且我得到了3-15 然后我选择开始的最大值和结束的最小值所以这种情况是3-10 并增加这个间隔的计数到 2。然后第三点进入 4-9,选择最大值为 4,最小值为 9,并将值 3-10 更新为 4-9 并将计数更新为 3。现在当 8-14 进来时,我选择这个区间的开始大于4-9,并且这个区间的结束小于4-9。在这种情况下,这是不正确的,所以我将创建一个新的桶 8-14 并将计数设置为 1。这不是整个算法,但应该对我在这里所做的工作有一个高级的了解。我看看能不能画出伪代码。
【问题讨论】:
-
数据之间有什么相似之处吗? IE,它们是否会发生变化并且永远不会小于 n 或类似的东西?
-
@sjr: 除非我误解那不是他想要做的。在该示例中,它给出了一个时间跨度,并且您想知道在一个时间线的开始和结束之间处于活动状态的所有内容。听起来他想知道没有单一比较来源的多个时间戳中最繁忙的范围。
-
您能否详细说明您的尝试以及您认为可能需要改进的部分?您的一些基本工作通常会受到 SO 的青睐。
-
@Merlyn Morgan-Graham:+1 代表您的观点 :) 我同意我应该发布我的方法来坚持 SO 的哲学。我已经用我想到但不确定的方法更新了我的问题。我没有准备好伪代码,所以我对采用这种方法有点犹豫。
标签: python algorithm dynamic-programming