在统计中,有时了解两个数据样本是否来自相同的基础分布很有用。一种实现方法是使用两个样本的Kolmogorov-Smirnov检验。
您的任务是编写一个程序,该程序读取两个未排序的非负整数数组,并计算测试中使用的主要统计量。
给定一个数组A
和一个实数x
,定义分布函数F
为
F(A,x) = (#number of elements in A less than or equal to x)/(#number of elements in A)
给定两个数组A1
和A2
,定义
D(x) = |F(A1, x) - F(A2, x)|
两次抽样的Kolmogorov-Smirnov统计量是D
全部real 的最大值x
。
例
A1 = [1, 2, 1, 4, 3, 6]
A2 = [3, 4, 5, 4]
然后:
D(1) = |2/6 - 0| = 1/3
D(2) = |3/6 - 0| = 1/2
D(3) = |4/6 - 1/4| = 5/12
D(4) = |5/6 - 3/4| = 1/12
D(5) = |5/6 - 4/4| = 1/6
D(6) = |6/6 - 4/4| = 0
两个数组的KS统计量为1/2
的最大值D
。
测试用例
[0] [0] -> 0.0
[0] [1] -> 1.0
[1, 2, 3, 4, 5] [2, 3, 4, 5, 6] -> 0.2
[3, 3, 3, 3, 3] [5, 4, 3, 2, 1] -> 0.4
[1, 2, 1, 4, 3, 6] [3, 4, 5, 4] -> 0.5
[8, 9, 9, 5, 5, 0, 3] [4, 9, 0, 5, 5, 0, 4, 6, 9, 10, 4, 0, 9] -> 0.175824
[2, 10, 10, 10, 1, 6, 7, 2, 10, 4, 7] [7, 7, 9, 9, 6, 6, 5, 2, 7, 2, 8] -> 0.363636
规则
- 您可以编写函数或完整程序。输入可以通过STDIN或函数自变量,输出可以通过STDOUT或返回值。
- 您可以假定输入的任何明确列表或字符串格式,只要两个数组都一致
- 如果您的语言对此具有内置功能,那么您可能不使用它。
- 答案至少必须是3位有效数字
- 这是代码高尔夫球,因此以最少字节数赢得程序
A
都在下面length(A)
?)