#coding=utf8
import random
def deleteElem(valueList,numList):
V=[]
L=[]
for k in range(len(numList)):
numList[k]-=1
if numList[k]!=0:
V.append(valueList[k])
L.append(numList[k])
return V,L
#轮盘赌函数
def chooseRandom(numList):
Nlist=[]
k=0
total=sum(numList)
sum1=0
for num in numList:
sum1+=(1.0*num/total)
Nlist.append(sum1)
var=random.random()
print Nlist
for m in range(len(Nlist)):
if var>=Nlist[len(Nlist)-2]:
k=len(Nlist)-1
break
elif var<=Nlist[0]:
k=0
break
elif var>Nlist[m] and k<=Nlist[m+1]:
k=m+1
break
return k
def testSpaceL(Data,n,k):
valueList=[]
numList=[]
for i in range(len(Data)):
if Data[i] in valueList:
numList[valueList.index(Data[i])]+=1
if numList[valueList.index(Data[i])]>k:
valueList,numList=deleteElem(valueList,numList)
elif len(vaLueList)<n:
valueList.append(Data[i])
numList.append(1)
elif len(vaLueList)>=n:
#考虑Data的种类 大于既有的计数器数目 情况
#概率选择替换 轮盘赌方式
index=chooseRandom(numList)
valueList[index]=Data[i]
numList[index]=1
空间亚线性算法
最新推荐文章于 2021-05-14 23:37:13 发布