【发布时间】:2014-09-26 23:39:33
【问题描述】:
所以我有世界前 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、排名
资料来源:世界银行
我想每 60 秒分析一次此列表中的每个国家/地区。但我不能 - 我正在使用的服务 (Twitter API) 是有速率限制的。
所以,我将随机选择 50 个国家中的 15 个,GDP 最高的国家被优先加权,而 GDP 最低的国家被加权更少。
我正在使用这个函数($values 和 $weights 是上述数据中的第 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 美国 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 美国 THA 美国 美国 DEU AUS CHL CHN MEX 美国 美国 CHN PRT SAU ITA IND USA RUS IND AUS ESP 美国 KOR CHN 美国 JPN 美国 IDN 美国 CHN FIN 美国 JPN PRT 美国 AUS 美国 JPN 美国 美国 美国 CHN JPN THA CHN TUR CHN FRA 美国 美国 MEX GBR CHN
美国和中国出现得太频繁了!
有没有办法调整这个?
谁能指出我正确的方向?
我正在用 PHP 编写所有这些代码。
【问题讨论】:
-
如果不知道您的最终目标是什么,就很难说。顶级国家应该多久出现一次?我认为您需要考虑您正在寻找的正确数学近似值,然后在代码中实现它。
-
可能solution 。问题是 .Net,但答案中提供的算法可以应用于任何语言。
-
@MikeBrant 我想要一个权重参数,这样我就可以根据自己的喜好进行调整。
标签: php random sampling random-sample