Nas estatísticas, às vezes é útil saber se duas amostras de dados são da mesma distribuição subjacente. Uma maneira de fazer isso é usar o teste de duas amostras de Kolmogorov-Smirnov .
Sua tarefa será escrever um programa que leia duas matrizes inteiras não-negativas não classificadas e calcule a principal estatística usada no teste.
Dada uma matriz A
e um número real x
, defina a função de distribuição F
por
F(A,x) = (#number of elements in A less than or equal to x)/(#number of elements in A)
Dadas duas matrizes A1
e A2
, defina
D(x) = |F(A1, x) - F(A2, x)|
A estatística Kolmogorov-Smirnov de duas amostras é o valor máximo de D
todo o real x
.
Exemplo
A1 = [1, 2, 1, 4, 3, 6]
A2 = [3, 4, 5, 4]
Então:
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
A estatística KS para as duas matrizes é 1/2
o valor máximo de D
.
Casos de teste
[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
Regras
- Você pode escrever uma função ou um programa completo. A entrada pode ser via STDIN ou argumento de função e a saída pode ser via STDOUT ou valor de retorno.
- Você pode assumir qualquer formato inequívoco de lista ou string para a entrada, desde que seja consistente para ambas as matrizes
- Se você não tiver um idioma embutido para isso, não poderá usá-lo.
- As respostas precisam estar corretas para pelo menos 3 números significativos
- Isso é código-golfe , então o programa com o menor número de bytes ganha
A
são abaixo length(A)
?)