In der Statistik ist es manchmal hilfreich zu wissen, ob zwei Datenstichproben aus derselben zugrunde liegenden Verteilung stammen. Eine Möglichkeit hierfür ist die Verwendung des Kolmogorov-Smirnov-Tests mit zwei Stichproben .
Ihre Aufgabe besteht darin, ein Programm zu schreiben, das zwei unsortierte nichtnegative Ganzzahl-Arrays einliest und die im Test verwendete Hauptstatistik berechnet.
Definieren Sie die Verteilungsfunktion für ein Array A
und eine reelle Zahl mitx
F
F(A,x) = (#number of elements in A less than or equal to x)/(#number of elements in A)
Gegeben zwei Arrays A1
und A2
definieren
D(x) = |F(A1, x) - F(A2, x)|
Die Kolmogorov-Smirnov-Statistik mit zwei Stichproben ist der Maximalwert von D
over all real x
.
Beispiel
A1 = [1, 2, 1, 4, 3, 6]
A2 = [3, 4, 5, 4]
Dann:
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
Die KS-Statistik für die beiden Arrays ist 1/2
der Maximalwert von D
.
Testfälle
[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
Regeln
- Sie können eine Funktion oder ein vollständiges Programm schreiben. Die Eingabe kann über STDIN oder ein Funktionsargument erfolgen, und die Ausgabe kann über STDOUT oder einen Rückgabewert erfolgen.
- Sie können jedes eindeutige Listen- oder Zeichenfolgenformat für die Eingabe annehmen, sofern es für beide Arrays konsistent ist
- Wenn es unwahrscheinlich ist, dass Ihre Sprache dafür eine eingebaute Sprache ist, können Sie diese möglicherweise nicht verwenden.
- Die Antworten müssen auf mindestens 3 signifikante Zahlen zutreffen
- Das ist Code-Golf , also gewinnt das Programm mit den wenigsten Bytes
A
unten length(A)
?)