Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何找到;“单数出局”;在一系列数字中_Algorithm_Sorting_Language Agnostic_Computer Science - Fatal编程技术网

Algorithm 如何找到;“单数出局”;在一系列数字中

Algorithm 如何找到;“单数出局”;在一系列数字中,algorithm,sorting,language-agnostic,computer-science,Algorithm,Sorting,Language Agnostic,Computer Science,我有一个数字数组[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 这种情况很简单,因为熟悉的“与平均值或中位数的距离”度量将起作用,例如

我有一个数字数组[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听起来您试图解决的一般问题是:绘制尽可能少的半径R圆,以便所有输入都被至少一个圆覆盖;然后,查找包含少于k个输入的圆

在第一种情况下,绘制两个半径为10的圆:第一个包含除70以外的所有输入,第二个仅包含70。你检测异常圆圈的标准应该是包含一个圆圈的70,这应该很简单。在第二种情况下,绘制三个半径为10的圆。再次强调,只适用于70岁的标准应该很容易说明

如果我要从头开始做这件事,而不去查问题的名称(这可能是一个众所周知的问题,有着很好的众所周知的解决方案),我会首先对输入进行排序,这可能会非常有用,因为这是一个1D问题。接下来,我可能会在输入上运行一个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
例如:

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

@Balmar我不是在寻找一个具体的解决方案。我面临的问题是理论上的计算机科学。我试图尽可能多地包含信息和想法。什么样的最小可复制示例适合这种情况?这是一个编程问答,问题和答案通常涉及实际代码。更抽象的CS问题可以被问到,或者我很抱歉。为了让你的问题更容易被接受,你可以考虑用<代码> Python < /Calp>标签,用<代码>语言不可知的< /代码>,也许问,如何解决这个问题?我很惊讶,因为我看到这样的帖子遍及如此。