Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # In[7]:
- def SimpD(_f1,_f2,_g1,_g2,_m1,_m2):
- s=0
- for i in range(1,_m1+1):
- s+=binomial(_f1[i],2)+binomial(_f2[i]-_f1[i],2)+binomial(_m2-_f2[i],2)
- for j in range(1,_m2+1):
- s+=binomial(_g1[j],2)+binomial(_g2[j]-_g1[j],2)+binomial(_m1-_g2[j],2)
- return(binomial(_m1+_m2,3)-binomial(_m1,3)-binomial(_m2,3)-s)
- # In[8]:
- def g12(_f1,_f2,_m1,_m2):
- _g1=[0]+[max(i for i in range(_m1+1) if _f2[i]<j) for j in range(1,_m2+1)]
- _g2=[0]+[max(i for i in range(_m1+1) if _f1[i]<j) for j in range(1,_m2+1)]
- return [_g1,_g2]
- # In[9]:
- def int2base(x, base, length):
- digits = []
- k=0
- while k<length:
- digits.append(int(x % base))
- x = int(x / base)
- k+=1
- digits.reverse()
- return digits
- # In[10]:
- def allfunctions(_m1,_m2):
- return[[i for i in int2base(idx,_m2+1,_m1)] for idx in range((_m2+1)^_m1)]
- # In[21]:
- N=8
- OptSigma=0
- Optm1=0
- Optm2=N
- for m1 in range(N+1):
- m2=N-m1
- for tmp1 in allfunctions(m1,m2):
- tmp1=[0]+sorted(tmp1) #Jetzt einen loop weiter aussen
- for tmp2 in allfunctions(m1,m2):
- tmp2=[0]+sorted(tmp2)
- f1=[min(tmp1[i],tmp2[i]) for i in range(m1+1)]
- f2=[max(tmp1[i],tmp2[i]) for i in range(m1+1)]
- [g1,g2]=g12(f1,f2,m1,m2)
- sigma=SimpD(f1,f2,g1,g2,m1,m2)
- if sigma>OptSigma or (sigma>=OptSigma and m1-m2>Optm1-Optm2):
- Opt=[f1,f2,g1,g2]
- OptSigma=sigma
- Optm1=m1
- Optm2=m2
- # In[22]:
- print Opt
- print OptSigma
- # Out[22]:
- [[0, 0, 0, 1, 2], [0, 1, 2, 3, 4], [0, 0, 1, 2, 3], [0, 2, 3, 4, 4]]
- 32
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement