Go Back   AppleForum > Software > Application

 
 
thread_tools
2002-08-12, 01:32 AM   #1
i9oo
Elite Member
 
i9oo's Avatar
 
Registered: Nov 2001
My Mac: iBook 800, Cinema Display 20", iPod mini, iPod shuffle, iPod touch
Posts: 1,578
오프라인
질문. 프로그래밍에 있어서 랜덤에 대해.

어떤 스크립트나 언어에 있어서 랜덤 함수는 기본적으로 다 있지요.

무슨 생각을 하다가 생각난 질문입니다만...

어떤 값을 랜덤하게 발생시키는데 있어서...그 랜덤함 자체에 편중성을 주는 방법이 있나요?
예를 들어, 1에서 100의 범위 안에서 무작위적으로 수를 발생시키는데 주로 70 이라는 값을 중심으로 +10, -10 범위 안의 숫자를 빈도 높게 발생시킨다던가 말이지요.

그러기 위한 목적의 특별한 함수가 있다던가...혹은 보편적으로 쓰이는 알고리즘이 있는지 알고 싶습니다.

쥐뿔도 모르는 제 상상으로는 일단 60~80 사이에 랜덤하게 값을 발생시키는 함수를 만든 다음 이걸 다시 1~100사이에 랜덤 값을 발생시키는 전체 함수에 낑궈 넣고...어찌저찌 하는 방법이랑,
1~59, 60~80, 81~100 사이의 수를 담당하는 3개의 개별적인 함수를 만든다음 그걸 다시 전체 함수안에서 경우에 따라 찾아가게 하는 ...뭐 그런 방법을 생각해 봤는데...
그야말로 맨땅에 헤딩한다고...스스로 실소가 나오는 터라, 일반적인 방법이 있는지가 매우 궁금하더군요.

특정한 언어의 한정 없이 이야기 하다 보니 너무 뜬 구름 잡는 질문인듯 한데, 편하시다면 C언어를 기준으로 가르침을 주시면 감사하겠습니다.
(알량하게나마 핥아 봤다는게 C 인지라. )


ps. 글을 올리면서도 조심스럽습니다. 이런 질문을 올린다는게...




__________________
지윤이 아빠

블로그 http://igooo.tistory.com/

jasmine 님께서 2002-08-12 12:04 PM 에 수정하셨습니다..
  Reply With Quote
2002-08-12, 09:04 AM   #2
maccrazy
Senior Member
 
maccrazy's Avatar
 
Registered: Jul 2002
My Mac: PowerBook G4 667, PowerMac G5 2.0MP, 20" Cinema Display, iMac G5 1.8 20", iPod mini green
Posts: 189
오프라인
특별한 경우가 아니면 간단한게 좋겠죠.

사실 i9oo님께서 말씀해주신 랜덤을 만들일이 많은건 아니죠. 게다가 랜덤값을 진짜 랜덤같이 나오게 하면서 원하는데로 다루기는 쉽지 않습니다.
먼저 제가 권해드리는 방법은 만일 그 범위 안에값을 50% 발생기키고 나머지 부분에서 50% 발생기키고 싶다면, 먼저 0 또는 1이 나게 해서 다시 주어진 범위 내에서 랜덤 값을 구하는 방법을 권해드리고 싶네요.
하지만 그럴경우 범위내의 값과 밖의 값이 너무 극명하게 차이가 날텐데요.
자연스럽게 확률이 늘었다 줄게 하고 싶다면 포물선곡선을 그리는 수식을 한번 이용해보시는게 좋을듯 합니다.
원하는 범위에서 원하는 확률로 나오게 하기 위해 그 형태에 맞는 곡선의 식을 찾아야 겠지만 말입니다.
제 짧은 생각엔 당장 그 방법 밖에 생각이 안나네요.
좀 더 전문적인 랜덤을 원하신다면.. 전산보다는 수학을 전공한 분이 유리할지도...

ㅋㅋ 그리고 우리나라에 맥 개발자 모임으로 osxdev.org있는거 아시죠.. ^^;
__________________
에구구
  Reply With Quote
2002-08-12, 09:54 AM   #3
juni
Senior Member
 
Registered: Dec 2001
My Mac: iMac 20" 2세대, IBook 800 Combo 12.1"
Posts: 152
오프라인
아래 URL에 가서 보시면 여러가지 랜덤 넘버 생성기가 있군요..
한번 가서 보시길.. ^^;
원하시는 답을 찾을 수 있으시길.. ^^;;

http://www.mathtools.net/C++/Random_numbers/
  Reply With Quote
2002-08-12, 10:42 AM   #4
@PPLEPiE
Veteran Member
 
@PPLEPiE's Avatar
 
Registered: Jan 2002
My Mac: Quadra 605, Color Classic, PM G5/2DP, PB 12" 1.33
Posts: 515
오프라인
안녕하세요?
음, i9oo님의 질문을 보고 잠시 허접으로 생각해봤습니다.

int CustomRandom(int p1, int p2, int q1, int q2, float r)

// p1 : 원하는 구간의 시작 값
// p2 : 원하는 구간의 마지막 값
// q1 : 많이 나오기를 원하는 범위의 시작 값
// q2 : 많이 나오기를 원하는 범위의 마지막 값
// r : 퍼센티지 , 0부터 .99...

float f = rnd // 0 부터 0.99999...
int k

if f < r then
k = rnd * (p2 - p1) + 1
else
k = rnd * ( q2 - q1 ) + q1
end if

return k

질문하신대로라면, 만일 50%, 50% 의 비율로 나오고자 한다면 r에 0.5를 넣으시면 되겠죠. q1 과 q2 는 60 과 80, p1과 p2 는 1 과 100.... 이 외에도 수많은 방법이 있겠지만, 그냥 가장 간단한 것 같습니다.
  Reply With Quote
2002-08-12, 10:46 AM   #5
@PPLEPiE
Veteran Member
 
@PPLEPiE's Avatar
 
Registered: Jan 2002
My Mac: Quadra 605, Color Classic, PM G5/2DP, PB 12" 1.33
Posts: 515
오프라인
음, 마구잡이로 쓰고나서 보니 원하는 값의 부분이 중복이 되는군요. 지금 잠시 나갈때가 있어서, 갔다와서 좀더 생각해보죠..
  Reply With Quote
2002-08-12, 01:29 PM   #6
joonhwan
Elite Member
 
joonhwan's Avatar
 
Registered: Oct 2001
My Mac: new MacBook Pro 2.4G Core2Duo, PowerMac G4 933Mhz
Posts: 3,219
오프라인
대부분의 Language 에 있는 랜돔함수는 uniform distribution으로 값을 generate 해 줍니다. 그래서 i9oo님이 원하시는 normal distribution한 랜돔값을 얻기 위해서는 다른 패키지를 쓰는 걸로 알고 있습니다. 당연히 C나 자바 같은데에서도 normal distrubution값을 만들어주는 랜돔함수를 직접 만들 수 있겠지만, 수학이나 통계쪽에 워낙 잘 만들어진 패키지들이 많아서 그런지 직접 그런 함수를 안 만들더군요.
주로 matlab을 쓰는 것 같구요, C나 자바 같은 랭귀지와 함께 쓸때는 IMSL이라는 포트란에서 넘어온 라이브러리를 많이 씁니다.

http://www.vni.com/products/imsl/

앨고리즘에 대해서 좀더 알고 싶으시면, 검색을 해보시면 샘플 소스 같은 걸 구하실 수도 있을 거라고 생각됩니다.

(수정)

대충 검색을 해보니 소스가 하나 있군요. 자세히 들여다 보진 못했습니다만...

http://pw1.netcom.com/~usqueen/normal.htm
__________________
::::: mono*log :::::

joonhwan 님께서 2002-08-12 02:32 PM 에 수정하셨습니다..
  Reply With Quote
2002-08-12, 06:43 PM   #7
골빈해커
Elite Member
 
골빈해커's Avatar
 
Registered: May 2002
My Mac: MacBook Air & iPhone
Posts: 2,154
오프라인
여러가지 방법으로 생성을 할 수 있겠죠..시뮬레이션 시간에 작성해봤는데..

기본적으로 간단한 확률분포를 이용하면 되는데..

아..값자기 확률분포 이름이 생각이 안나는군요...

어느 값쪽으로 치우쳐진..으음..

제가 지금 통계학과가 맞는지 의심해 봅니다..ㅡ,.ㅡ
__________________
http://allblog.net - 모든 블로그가 모이는 곳
http://freebgm.net - 공개 배경음악 공유 사이트
http://golbin.net - 골빈해커의 블로그

허허 벌판에 쓰러져 까마귀 밥이 될 지언정 이상에 살고 싶구나...
  Reply With Quote
2002-08-12, 07:08 PM   #8
joonhwan
Elite Member
 
joonhwan's Avatar
 
Registered: Oct 2001
My Mac: new MacBook Pro 2.4G Core2Duo, PowerMac G4 933Mhz
Posts: 3,219
오프라인
혹시 이항분포(binominal distribution)라고 하는 건가요?
(예전에 배운 기억이 나는데 그쪽으로 너무 무지해서 자신이 없군요... -_-)

그러고 보니 위에 제가 쓴 글에는 그냥 normal distribution만 언급을 했는데, 다른 것들을 생각 못했군요. 정규, 비정규 분포 등등...
통계가 젤 어려웠는데 그런 걸 전공하는 사람이 있다니... :-)
__________________
::::: mono*log :::::

joonhwan 님께서 2002-08-12 07:14 PM 에 수정하셨습니다..
  Reply With Quote
2002-08-12, 07:40 PM   #9
골빈해커
Elite Member
 
골빈해커's Avatar
 
Registered: May 2002
My Mac: MacBook Air & iPhone
Posts: 2,154
오프라인
아..네..이항분포로군요..

( 저는 주위 사람들의 얘기로 통계학도의 탈을 쓴 전산학도라고 하는 설이 있습니다만...;

정규분포는 평균값을 기준으로 표준편차에 의해 양쪽이 모두 같은 확률을 보이기 때문에 이런 경우 적당하지 않고요..

일단 1-100 까지중에 30 을 기준으로 한다고 하고 표준편자가 10 이라면 100 근처의 값은 거의 안나오니까요

이항분포라면 100 근처도 조금씩 나오는건데 30 을 중심으로 많이 나오는거구요..

조금 더 해본다면 F 분포등을 이용하면 더 좋겠군요..

하여튼 뭐..랜덤값 구하는 것은 확률분포를 많이 이용한다고 합니다..

;;;;;;;;;;;
__________________
http://allblog.net - 모든 블로그가 모이는 곳
http://freebgm.net - 공개 배경음악 공유 사이트
http://golbin.net - 골빈해커의 블로그

허허 벌판에 쓰러져 까마귀 밥이 될 지언정 이상에 살고 싶구나...
  Reply With Quote
2002-08-14, 01:07 AM   #10
i9oo
Elite Member
 
i9oo's Avatar
 
Registered: Nov 2001
My Mac: iBook 800, Cinema Display 20", iPod mini, iPod shuffle, iPod touch
Posts: 1,578
오프라인
리플 주신 분들께 감사드립니다.

가르쳐 주신 정보를 바탕으로 열심히 꽁수를 굴려봐야 겠습니다.
__________________
지윤이 아빠

블로그 http://igooo.tistory.com/
  Reply With Quote
2002-08-14, 11:58 AM   #11
imation
Elite Member
 
imation's Avatar
 
Registered: Sep 2001
My Mac: G4
Posts: 1,230
오프라인
^^;; 헤헤 잼없는 야그가 있었네욤 ^^;;
헤헤.. 성공하세요^^
__________________
  Reply With Quote
지금 시각: 08:24 AM | Contact Us | 아카이브 | Top
SEO by vBSEO 3.0.0 RC5 All contents copyright © 2001~2008 by AppleForum and/or their respective owners.