Randomising the chance that something will appear

BlitzMax Forums/BlitzMax Programming/Randomising the chance that something will appear

ImaginaryHuman, something like

Function picksomethingbinary(probabilities#[],sumprobabilities#[])
	l=Len(probabilities)

	p#=Rnd(0,1)
	i=l/2
	move=i
	While 1
		move:/2
		If move=0 Then move=1
		s#=sumprobabilities[i]
		If s<p
			i:+move
		ElseIf s-probabilities[i]>p
			i:-move
		Else
			Return i
		EndIf
	Wend
	Return i - 1 
End Function



I did a little test to see how much faster it is, and it's not a massive amount:

Local probabilities#[5]
probabilities=[.1,.1,.1,.2,.5]

Local sumprobabilities#[5]
t#=0
For i=0 To 4
	t:+probabilities[i]
	sumprobabilities[i]=t
Next

ms=MilliSecs()
For i=1 To 100000
	number=picksomethingbinary(probabilities,sumprobabilities)
Next
diff=MilliSecs()-ms
Print "binary search method took "+String(diff)+"ms"

ms=MilliSecs()
For i=1 To 100000
	number=picksomething(probabilities)
Next
diff=MilliSecs()-ms
Print "lazy method took "+String(diff)+"ms"