Heim  >  Artikel  >  php教程  >  完美洗牌算法

完美洗牌算法

WBOY
WBOYOriginal
2016-06-06 19:33:381565Durchsuche

完美洗牌就是将一副牌平均分成两份(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;
	}
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn