Zamieszczam krótki program potwierdzający prawdziwość powyższego dla różnych rozkładów i zakresów. Oraz przykładowe wyniki.
import random
def checkdisplacement(nums):
nums2=nums[:]
nums.sort()
le=len(nums)
sumpos=0
for i in range(le):
j=nums.index(nums2[i])
sumpos+=abs(j-i)
rd=sumpos/le
rdr=rd/le
rc=le/3.-1./(3.*le)
rcr=rc/le
return rdr,rcr
nums=[random.uniform(0.,1.) for i in range(10000)]
print(‘Uniform: ‘,’\t’, checkdisplacement(nums))
nums=[random.triangular(-2.,2.) for i in range(10000)]
print(‘Triangular: ‘,’\t’, checkdisplacement(nums))
nums=[random.gauss(3.,1.) for i in range(10000)]
print(‘Gauss: ‘,’\t’, checkdisplacement(nums))
nums=[random.lognormvariate(10.,1.) for i in range(10000)]
print(‘Lognormal: ‘,’\t’, checkdisplacement(nums))
Uniform: (0.33353726, 0.33333333000000004)
Triangular: (0.33425552, 0.33333333000000004)
Gauss: (0.33084124000000004, 0.33333333000000004)
Lognormal: (0.33409481999999996, 0.33333333000000004)
Uniform: (0.33265344, 0.33333333000000004)
Triangular: (0.33485062, 0.33333333000000004)
Gauss: (0.33356048, 0.33333333000000004)
Lognormal: (0.33240596, 0.33333333000000004)
Uniform: (0.33198692, 0.33333333000000004)
Triangular: (0.33297762, 0.33333333000000004)
Gauss: (0.33546868, 0.33333333000000004)
Lognormal: (0.33468774, 0.33333333000000004)
Uniform: (0.3341877, 0.33333333000000004)
Triangular: (0.33146770000000003, 0.33333333000000004)
Gauss: (0.33054766, 0.33333333000000004)
Lognormal: (0.33670076, 0.33333333000000004)