最常见的y值来自图表

时间:2014-04-13 10:27:13

标签: algorithm graph

从图表中获取最常出现的y值之一的最快方法是什么?我只有当地的最高和最低价值。我只需要一个(随机)y值。

例如,如果我有这样的图形:

enter image description here

最常见的y值可以是0或1(正如我所说,我只需要一个)。

谢谢。

3 个答案:

答案 0 :(得分:2)

考虑从底部到顶部移动的水平扫描线。最初,它符合图表0次。如果它超过最小值,它开始比以前多两次曲线。如果它超过最大值,它开始减少两次曲线。如果遇到一个端点,它会开始更多或一次更少地满足曲线,具体取决于它旁边的点的类型。

实际上,最小值和最大值是交替的,因此您可以通过查看局部极值的奇偶校验来判断增量。

因此,您可以通过将极值值与增量一起排序来找到解决方案。

Extrema/increments
  0  2 -2  6  0
 +1 -2 +2 -2 +1

Sorted extrema/increments
 -2  0  0  2  6
 +2 +1 +1 -2 -2

Number of intersections (prefix sum of the increments)
0  2  3  4  2  0

答案 1 :(得分:1)

问题可以归结为以下细分问题:

给定一组1d段,找到包含在最大段数中的值。

这可以通过对所有段端点进行排序,然后扫描它们来解决。在扫描期间,人们知道每个扫描范围的“深度”,并且可以在一次通过中找到最大深度范围。

在您的示例中,细分如下:

[0,2] [-2,2] [-2,6] [0,6]

有序的端点列表:

[-2, [-2, [0, [0, 2], 2], 6], 6] 

如您所见,最大深度(= 4)是在[02]之间获得的。

答案 2 :(得分:0)

答案是介于0和2之间的值,[0; 2[

以下是如何计算它的示例。

y values = 0, 2, -2, 6, 0

从此构建范围列表

  • a:[0; 2]
  • b:]2; -2]
  • c:]-2; 6]
  • d:]6; 0]

排列排序列表中范围列表中的可能值

[-2, ]-2, [0, ]2, [2, ]6, [6  // [ is inclusive and ] is exclusive

他们最初得分为0

  0    0   0   0   0   0   0
[-2, ]-2, [0, ]2, [2, ]6, [6

迭代范围列表,如果它们在范围内,则为每个可能的值提供分数。

范围a:[0; 2]

  0    0   1   1   1   0   0
[-2, ]-2, [0, ]2, [2, ]6, [6

范围b:]2; -2]

  1    1   2   2   1   0   0
[-2, ]-2, [0, ]2, [2, ]6, [6

范围c:]-2; 6]

  1    2   3   3   2   1   1
[-2, ]-2, [0, ]2, [2, ]6, [6

范围d:]6; 0]

  1    2   4   4   3   2   1
[-2, ]-2, [0, ]2, [2, ]6, [6

范围[0;2[的值为4,即最大值