2011년 5월 9일 월요일
가중치에 따라서 임의로 자료를 출력하는 소스이다.
# 아래처럼 가중치가 붙은 자료가 있다.
data1 = 1; w1 = 0.2
data2 = 2; w2 = 0.3
data3 = 3; w3 = 0.5
r = rand()
# r의 값의 범위는 0.0 <= r < 1.0 이다.
# 이것을 선형(linear)으로 표현할 수 있다.
# w11 = w1 = 0.2
# w22 = w1 + w2 = 0.5
# w33 = w1 + w2 + w3 = 1.0
# w11 w22 w33
# 0.2 0.5 1.0
# +----+------+----------+
# 0.0 r 1.0
# 0 <= r < w11 이면 data1 을 출력
# w11 <= r < w22 이면 data2 을 출력
# w22 <= r < w33 이면 data3 을 출력
if r < w1
puts data1
elsif r < w1 + w2
puts data2
elsif r < w1 + w2 + w3
puts data3
end
# 아래처럼 써먹을 수도 있다.
r = rand
[[data1, w1], [data2, w2], [data3, w3]].each do |data, w|
if r < w
puts data
break
end
r = r - w
end
댓글 없음:
댓글 쓰기