3123

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 日 标签:算法

0

文章评论