【问题标题】:Compare difference between multiple numbers比较多个数字之间的差异
【发布时间】:2011-11-17 10:10:29
【问题描述】:

问题是我有 5 个数字的数组:

300 295 250 105 100 95

所需的结果:由阈值指定的具有最小差异的最多数字。 如果您无法理解:在示例中,阈值为 5,中奖号码为 95,100,105 - 因为有 3 个号码彼此接近,而另一组 (295,300) 只有 2 个。

我会尽快给出更清晰的解释。

【问题讨论】:

  • 不是很清楚...数字总是像你的例子那样排序吗?
  • 这个问题没有很好的定义。假设您需要“运行阈值”,Wizard 先生的回答很好,尽管我理解您需要“固定阈值”。不同之处在于集合{1,2,3,4} 和阈值1:我认为最大的有效子集是{1,2,3}{2,3,4},因为在中间值附近它们仅跨越1,但是运行阈值将接受整个集合{1,2,3,4} 因为在连续 值之间只有1 的差异。请说明您的要求。如果我的理解正确,我有一个相当简单的O(nlogn) 解决方案。
  • 好吧,如果你坚持最终结果我需要什么,基本上阈值可以运行 - 集合中的 1 个数字,如果阈值不够大,它可以是第 1 个,第 2 个或第 3 个,不管但最好的东西是最终集的中位数
  • 现实生活中的例子:我有一组持续时间为 [5:00, 4:50, 4:00, 3:20, 3:19, 3:15] 的歌曲 - 想法是选择正确的曲目版本,为 3:20 或 3:19
  • 哦,现在你失去了我。你能再举一个例子,并解释你是如何得到答案的吗?起初我以为您正在寻找成员与其直接邻居之间的差异不超过阈值的连续序列。

标签: javascript math logic algebra


【解决方案1】:

我不能给出Javascript代码,但我建议:

  • 对列表进行排序
  • 计算顺序差异
  • threshold 以下的任何值四舍五入或剪裁为零,所有其他值为零
  • 寻找最长的连续零序列(游程编码)
{95, 100, 105, 250, 295, 300}

--->  {5, 5, 145, 45, 5}

--->  {0, 0, 1, 1, 0}

【讨论】:

  • 是的,非常感谢,它的算法很棒,但是要计算差异,有没有有效的算法呢?
  • @kolor 我使用高级语言(Mathematica)并且我相信方法翻译得不好。如果偶然 javascript 有数组运算符:RotateLeft(array) - array 并删除最后一个元素。
  • 减法通常是用于计算差异的方法。计算机非常擅长加法和减法。排序和循环有什么问题?
  • 问题是如何从第一个数组中获得第二个数组,计算量更少。我当然可以通过每个元素与另一个元素进行比较,但那将是 N^2,我需要更像 logN 的东西
猜你喜欢
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多