繁体   English   中英

如何在数字列表中找到“奇数”

[英]How to find the "odd one out" in a list of numbers

我有一个数字数组 [x1、x2、x3 等],其大小超过 20 个元素,我正在尝试组合一个算法,根据它们相对于其余元素的“奇数”对元素进行排序列表。

给定一些阈值 T1,我将“奇数”定义为与重心的距离。 重心是值倾向于集中的地方,可能给定某个第二阈值 T2。

例子: [20, 20, 21, 31, 24, 20, 70, 21, 31, 24, 20, 20, 21, 31, 24, 20, 20, 21, 31, 24] 和 T1=10 重心为大约 24,只有奇数一个是 70

这种情况是微不足道的,因为熟悉的“与均值或中值的距离”度量将执行例如。 d(70)=|24-70|=46>10=T1 和 d(31)=|24-31|=7<10=T1

我不太清楚如何处理具有 2 个或更多重心的更一般情况。

例二: [20, 20, 21, 31, 24, 20, 70, 21, 31, 24, 120, 120, 121, 131, 124, 120, 120, 121, 131, 124] 现在有两个1ys =24 和 d2=124 唯一的奇数仍然是 70

但是之前的指标会破裂。 也许困难的部分是找出哪些是重心。

注意:我正在寻找一种快速算法而不是准确的算法

听起来您要解决的一般问题是:尽可能少地绘制半径为 R 的圆,以使所有输入至少被一个圆覆盖; 然后,找到包含少于 k 个输入的圆圈。

在第一种情况下,您绘制了两个半径为 10 的圆:第一个包含除 70 之外的所有输入,第二个仅包含 70。检测异常圆的标准应该捕获包含 70 的圆,这应该很简单。 在第二种情况下,您绘制了三个半径为 10 的圆。 再次,仅以 70 分捕获的标准应该很容易说明。

如果我打算从头开始执行此操作而不查找问题的名称(这可能是一个众所周知的问题,并且具有良好的知名解决方案),我将从对输入进行排序开始,这可能会非常有帮助,因为这是一维问题。 接下来,我可能会在输入上运行一个大小为 2R 的滑动窗口,并计算每个潜在重心的移动频率(跳过重复项和跳跃间隙),分别保存这个频率序列。 然后,我会首先以尽可能不重叠的方式在频率最高的位置贪婪地放置窗口,直到所有输入都被覆盖。 然后,我会识别出任何被圆圈覆盖的输入,这些圆圈的移动频率小于与所选窗口的平均移动频率相关的某个截止频率; 例如,与所有圆圈覆盖的平均值相比,将覆盖一半或更少输入的圆圈覆盖的所有输入视为异常。

例子:

INPUT:  20, 20, 21, 31, 24, 20, 70, 21, 31, 24, 20, 20, 21, 31, 24, 20, 20, 21, 31, 24

SORTED: 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 24, 24, 24, 24, 31, 31, 31, 31, 70

WINDOW MOVING FREQUENCY:
20: 15
21: 19
(detects gap, jumps)
60: 1
(detects gap, jumps, ends)

WINDOW #1: [11,31]: 19
WINDOW #2: [50, 70]: 1

AVERAGE: 10
50% AVERAGE: 5
WINDOW #1 OVER CUTOFF
WINDOW #2 UNDER CUTOFF

例子:

INPUT:  20, 20, 21, 31, 24, 20, 70, 21, 31, 24, 120, 120, 121, 131, 124, 120, 120, 121, 131, 124

SORTED: 20, 20, 20, 21, 21, 24, 24, 31, 31, 70, 120, 120, 120, 120, 121, 121, 124, 124, 131, 131

WINDOW MOVING FREQUENCY:
20: 7
(detects gap, jumps)
60: 1
(detects gap, jumps)
110: 4
111: 6
(detects gap, jumps)
114: 8
(detects gap, jumps)
121: 10

WINDOW #1: [111, 131]: 10
WINDOW #2: [10, 30]: 7
WINDOW #3: [50, 70]: 1

AVERAGE: 6
50% AVERAGE: 3

WINDOW #1 ABOVE CUTOFF
WINDOW #2 ABOVE CUTOFF
WINDOW #3 BELOW CUTOFF

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM