Translate

2018년 7월 21일 토요일

가중치가 붙은 랜덤(weighted random)

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

댓글 없음:

댓글 쓰기

응용 어플 끝글자 버그 잡는 거 진짜 개쉽습니다

그 동안 제가 끝글자 버그를 잡지 않고 방치한 이유 우선 책임, 의무가 없습니다. 제가 해당 어플 개발자도 아닐 뿐더러 오픈소스가 원래가 유지보수 의무, 보증 책임이 없습니다 . 이렇게 개떡 같은 게 오픈소스입니다. 전 과거 libhwp 하냐고...