3283
PHP实现“贝格尔编排法”算法
乐果 发表于 2014 年 12 月 23 日 标签:算法
在单循环积分淘汰赛中,经常会用到贝格尔编排法。
今天在项目的比赛规则中就用到了,我用PHP实现“贝格尔编排法”如下:
/**
* 贝格尔编排法(算法)
* @param int $n
* @return array
*/
function berger($n){
if ($n < 3)
{
return 0;
}
$h = (1 == $n % 2) ? 0 : $n;
$num = $h > 0 ? $n : $n + 1;
$average = $num/2;
$rs1 = array();
for($i = 0; $i < $average; $i++){
$top = $i+1;
$temp = array();
for($j = 0; $j < $num-1; $j++){
if($top>$num-1){
$top = 1;
}
$temp[] = $top;
$top++;
}
$temp[] = $h;
$rs1[] = $temp;
}
$rs2 = array();
for($i = $average; $i < $n; $i++){
$top = (($top+2)>($num-1)) ? $top = 1 : $top+2;
$temp = array();
$temp[] = $h;
for($j = 0; $j < $num-1; $j++){
if($top>$num-1){
$top = 1;
}
$temp[] = $top;
$top++;
}
$rs2[] = $temp;
}
$rs = array();
foreach ($rs1 as $k => $v)
{
$rs[] = $v;
if(isset($rs2[$k])){
$rs[] = $rs2[$k];
}
}
return $rs;
}
乐果 发表于 2014 年 12 月 23 日 标签:算法