Trong thống kê, đôi khi thật hữu ích khi biết liệu hai mẫu dữ liệu có đến từ cùng một phân phối cơ bản hay không. Một cách để làm điều này là sử dụng thử nghiệm Kolmogorov-Smirnov hai mẫu .
Nhiệm vụ của bạn sẽ là viết một chương trình đọc thành hai mảng số nguyên không âm không phân loại và tính toán thống kê chính được sử dụng trong bài kiểm tra.
Cho một mảng A
và một số thực x
, xác định hàm phân phối F
bằng
F(A,x) = (#number of elements in A less than or equal to x)/(#number of elements in A)
Cho hai mảng A1
và A2
, xác định
D(x) = |F(A1, x) - F(A2, x)|
Thống kê Kolmogorov - Smirnov hai mẫu là giá trị tối đa của D
tất cả thựcx
.
Thí dụ
A1 = [1, 2, 1, 4, 3, 6]
A2 = [3, 4, 5, 4]
Sau đó:
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
Thống kê KS cho hai mảng là 1/2
, giá trị tối đa củaD
.
Các trường hợp thử nghiệm
[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
Quy tắc
- Bạn có thể viết một chức năng hoặc một chương trình đầy đủ. Đầu vào có thể thông qua STDIN hoặc đối số chức năng và đầu ra có thể thông qua STDOUT hoặc giá trị trả về.
- Bạn có thể giả sử bất kỳ danh sách hoặc định dạng chuỗi rõ ràng nào cho đầu vào, miễn là nó phù hợp cho cả hai mảng
- Nếu bạn không có khả năng sử dụng ngôn ngữ này, bạn không được sử dụng ngôn ngữ này.
- Câu trả lời cần phải đúng với ít nhất 3 con số quan trọng
- Đây là môn đánh gôn , vì vậy chương trình trong ít byte nhất sẽ thắng
A
bên dưới length(A)
?)