#算法实现步骤
import random
from matplotlib import pyplot as plt
import math
def N():#算法N
l=0
while(True):
x = 0.5
x0 = x
n=0
while (True):
x1 = random.random()
if x1<x0:
x0= x1
n = n + 1
else:
break
if n%2==0:
return 1
else:
return 0
def E(x):#算法D的改进
l = 0
while (True):
if x > 0.5:
l = l + 1
else:
x0 = x
n = 0
while (True):
x1 = random.random()
if x1 < x0:
x0 = x1
n = n + 1
else:
break
if n % 2 == 0:
y = 0.5 * l + x
return y
else:
l = l + 1
def N1():
k=0
while True:
if N()!=1:
return k
else:
k=k+1
def N2():
while(True):
flag=0
k=N1()
k1=k*(k-1)
for i in range(0,k1):
if N()!=1:
flag=1
break
if flag==1:
continue
return k
def D3():
x = random.random()
if x>=0.5:
s=1
else:
s=-1
return s
def D4(a,b):
m=math.ceil(b)
m=m-1
j=random.randint(0,m)
k=N2()
s=D3()
i0=math.ceil(b*k+s*a)
x0=(i0-(b*k+s*a))/b
x=x0+j/b
return x,i0,j,s,k
def D5D6(a,b):
while (True):
x,i0,j,s,k=D4(a,b)
if x>=1:
continue
if k==0 and x==0 and s<0:
continue
return x,k,s,i0,j
def B(x,k):#算法B
y = x
n = 0
while (True):
z = random.random()
if z >= y:
if n % 2 == 0:
return 1
else:
return 0
r = random.random()
if r >= (2 * k + x) / (2 * k + 2):
if n % 2 == 0:
return 1
else:
return 0
y = z
n = n + 1
def D7(a,b):
while(True):
flag=0
x,k,s,i0,j=D5D6(a,b)
for i in range(0,k+1):
if B(x,k)==0:
flag=1
break
if flag==1:
continue
else:
return x,k,s,i0,j
def D8D9(a,b):
x,k,s,i0,j=D7(a,b)
i=s*(i0+j)
return i
list=[]
for i in range(800000):
list.append(D8D9(1,4))
def draw_hist(myList,Title,Xlabel,Ylabel,Xmin,Xmax,Ymin,Ymax):
plt.hist(myList,100)
plt.xlabel(Xlabel)
plt.xlim(Xmin,Xmax)
plt.ylabel(Ylabel)
plt.ylim(Ymin,Ymax)
plt.title(Title)
plt.show()
draw_hist(list,'AreasList','Area','number',-15,15,0.0,200000) # 直方图展示
import random
from matplotlib import pyplot as plt
import math
def N():#算法N
l=0
while(True):
x = 0.5
x0 = x
n=0
while (True):
x1 = random.random()
if x1<x0:
x0= x1
n = n + 1
else:
break
if n%2==0:
return 1
else:
return 0
def E(x):#算法D的改进
l = 0
while (True):
if x > 0.5:
l = l + 1
else:
x0 = x
n = 0
while (True):
x1 = random.random()
if x1 < x0:
x0 = x1
n = n + 1
else:
break
if n % 2 == 0:
y = 0.5 * l + x
return y
else:
l = l + 1
def N1():
k=0
while True:
if N()!=1:
return k
else:
k=k+1
def N2():
while(True):
flag=0
k=N1()
k1=k*(k-1)
for i in range(0,k1):
if N()!=1:
flag=1
break
if flag==1:
continue
return k
def D3():
x = random.random()
if x>=0.5:
s=1
else:
s=-1
return s
def D4(a,b):
m=math.ceil(b)
m=m-1
j=random.randint(0,m)
k=N2()
s=D3()
i0=math.ceil(b*k+s*a)
x0=(i0-(b*k+s*a))/b
x=x0+j/b
return x,i0,j,s,k
def D5D6(a,b):
while (True):
x,i0,j,s,k=D4(a,b)
if x>=1:
continue
if k==0 and x==0 and s<0:
continue
return x,k,s,i0,j
def B(x,k):#算法B
y = x
n = 0
while (True):
z = random.random()
if z >= y:
if n % 2 == 0:
return 1
else:
return 0
r = random.random()
if r >= (2 * k + x) / (2 * k + 2):
if n % 2 == 0:
return 1
else:
return 0
y = z
n = n + 1
def D7(a,b):
while(True):
flag=0
x,k,s,i0,j=D5D6(a,b)
for i in range(0,k+1):
if B(x,k)==0:
flag=1
break
if flag==1:
continue
else:
return x,k,s,i0,j
def D8D9(a,b):
x,k,s,i0,j=D7(a,b)
i=s*(i0+j)
return i
list=[]
for i in range(800000):
list.append(D8D9(1,4))
def draw_hist(myList,Title,Xlabel,Ylabel,Xmin,Xmax,Ymin,Ymax):
plt.hist(myList,100)
plt.xlabel(Xlabel)
plt.xlim(Xmin,Xmax)
plt.ylabel(Ylabel)
plt.ylim(Ymin,Ymax)
plt.title(Title)
plt.show()
draw_hist(list,'AreasList','Area','number',-15,15,0.0,200000) # 直方图展示