>  기사  >  php教程  >  完美洗牌算法

完美洗牌算法

WBOY
WBOY원래의
2016-06-06 19:33:381569검색

完美洗牌就是将一副牌平均分成两份(26张)来交错洗牌,如此循环反复一定次数后,又变回洗牌前的顺序了。 即:a_1,a_2........a_n,b_1,b_2.........b_n的序列变为b_1,a_1,b_2,a_2.......b_n,a_n 我知道这代码很SHI,只是抛砖,向各位高人请教更好的算法,谢谢

完美洗牌就是将一副牌平均分成两份(26张)来交错洗牌,如此循环反复一定次数后,又变回洗牌前的顺序了。
即:a_1,a_2........a_n,b_1,b_2.........b_n的序列变为 b_1,a_1,b_2,a_2.......b_n,a_n 

我知道这代码很SHI,只是抛砖,向各位高人请教更好的算法,谢谢!
 
	//完美洗牌
        //$time为洗牌次数
	function pshuffle($time = 8){
		$num = 52;
		$res = $data = range(1,$num);
		for($j=0;$j<$time;$j++){
			if($newdata) $data = $newdata;
			
			for($i=0;$i<sizeof($data);$i++){
				if($i<$num/2){
					$newdata[$i*2] = $data[$i];
				}else{
					$key = $i * 2 - $num + 1;
					$newdata[$key] = $data[$i];
				}
			}
			//返回次数
			// if($newdata == $res){
				// return $j+1;
				// break;
			// }
		}
		ksort($newdata);
		return $newdata;
	}
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.