2014-09-26 3 views
1

그래서 나는 세계 최고의 50 개국의 GDP가 :데이터 집합에서 가중 무작위 표본을 얻기

USA,16800000,1 
CHN,9240270,2 
JPN,4901530,3 
DEU,3634823,4 
FRA,2734949,5 
GBR,2521381,6 
BRA,2245673,7 
RUS,2096777,8 
ITA,2071307,9 
IND,1876797,10 
CAN,1826769,11 
AUS,1560597,12 
ESP,1358263,13 
KOR,1304554,14 
MEX,1260915,15 
IDN,868346,16 
TUR,820207,17 
NLD,800173,18 
SAU,745273,19 
CHE,650377,20 
ARG,611755,21 
SWE,558949,22 
NGA,521803,23 
POL,517543,24 
NOR,512580,25 
BEL,508116,26 
VEN,438284,27 
AUT,415672,28 
THA,387252,29 
ARE,383799,30 
COL,378148,31 
IRN,368904,32 
ZAF,350630,33 
DNK,330614,34 
MYS,312435,35 
SGP,297941,36 
ISR,291357,37 
CHL,277199,38 
HKG,274013,39 
PHL,272017,40 
EGY,271973,41 
FIN,256842,42 
GRC,241721,43 
PAK,236625,44 
KAZ,224415,45 
IRQ,222879,46 
PRT,220022,47 
IRL,217816,48 
DZA,210183,49 
QAT,202450,50 

형식 : ISO 코드, GDP, 순위

출처 : 세계 은행 (World Bank)

이 목록의 모든 국가를 60 초마다 분석하고 싶습니다. 그러나 나는 할 수 없다 - 내가 사용하고있는 서비스 (Twitter API)는 속도가 제한적이다.

그래서 50 개국 중 15 개국을 무작위로 선택합니다. 가장 많은 GDP가 가중치가 높은 국가와 GDP가 가장 적은 국가가 덜 가중치가 적용됩니다.

나는이 기능을 사용하고 있습니다 ($ 값과 $ 가중치는 1, 2 열 위의 데이터에 - 표시되지 구문 분석)

/** 
* getSample() 
* Pick a random item based on weights. 
* 
* @param array $values Array of elements to choose from 
* @param array $weights An array of weights. Weight must be a positive number. 
* @return mixed Selected element. 
* http://stackoverflow.com/questions/445235/generating-random-results-by-weight-in-php 
*/ 
function getSample($values,$weights){ 
    $count = count($values); 
    $i = 0; 
    $n = 0; 
    $num = mt_rand(0, array_sum($weights)); 
    while($i < $count){ 
     $n += $weights[$i]; 
     if($n >= $num){ 
      break; 
     } 
     $i++; 
    } 
    return $values[$i]; 
} 

나는 100 개 통화에서 출력이 종류를 받고 있어요를 :

CHN GBR ITA USA ESP MEX ZAF CAN JPN ITA COL 미국 미국 FRA 미국 CHN 미국 IND ESP MEX CHN JPN 미국 미국 CAN DEU 미국 미국 미국 JPN NLD CHN 미국 미국 FRA 미국 TUR GBR CHN BRA 미국 BEL JPN 미국 TUR RUS DEU 미국 미국 미국 미국 DEU AUS CHL CHN MEX 미국 U SA CHN PRT SAU ITA IND 미국 RUS IND AUS ESP 미국 KOR CHN 미국 JPN 미국 IDN 미국 CHN FIN 미국 JPN PRT 미국 AUS 미국 JPN 미국 미국 USA CHN JPN THA CHN TUR CHN FRA 미국 미국 MEX GBR CHN

미국과 CHN이 너무 자주 올라오고 있습니다!

이 방법을 조정할 수 있습니까?

누구나 올바른 방향으로 나를 가리킬 수 있습니까?

나는 PHP로 이것을 코딩하고 있습니다.

+1

당신이 염두에두고있는 구체적인 최종 목표를 모른 채 말하기 란 어렵습니다. 상위 국가들은 얼마나 자주 나타나야합니까? 나는 당신이 찾고있는 적절한 수학적 근사를 생각한 다음 그것을 코드에서 구현해야한다고 생각합니다. –

+0

가능한 [솔루션] (http://stackoverflow.com/questions/3153534/i-need-random-algorithm-with-weighing-options-in-net). 질문은 .Net이지만 대답에 제공된 알고리즘은 모든 언어에 적용 할 수 있습니다. – Grice

+0

@MikeBrant 나는 체중 매개 변수를 원해서 내 취향대로 조정할 수 있습니다. – Eamorr

답변

1

가장 쉬운 방법은 동적으로 가중치를 조정하여 예를 들어 초기 가중치를 받고 해당 국가가 호출 된 이후로 호출 횟수 반복으로 곱하는 것입니다. 그런 다음 목록을 순서대로 정렬하면됩니다. 그래서 예를 들어, 미국은 대기열에서 얼마나 오랫동안 기다리고 있었는지에 근거하여 더 작은 GDP 국가들 아래로 이동할 것입니다.

관련 문제