Heim > Backend-Entwicklung > PHP-Tutorial > PHP-Permutations- und Kombinationsalgorithmus

PHP-Permutations- und Kombinationsalgorithmus

WBOY
Freigeben: 2016-07-29 09:10:50
Original
1560 Leute haben es durchsucht

Ich habe mich schon immer für Algorithmen interessiert, als ich Anfang letzten Jahres auf iOS trainierte. Der Lehrer stellte der Klasse eine Rangfolgefrage, um zu sehen, wer die Idee zuerst ausdrücken konnte, aber dafür war keine sofortige Programmierung erforderlich Damals erklärte ein Neuling an der Universität für Wissenschaft und Technologie die praktikable Methode und genehmigte sie. Es klang einfach, war aber nicht so leicht zu verstehen, wie ich es mir vorgestellt hatte Dinge im Detail.

Tatsächlich habe ich bereits während meiner Studienzeit versucht, Lottozahlen in C zu schreiben. Damals habe ich eine Zeit lang Wohlfahrtslotterie 3D und Sportlotterie Nr. 3 gespielt und versucht, mögliche Gewinnzahlen mithilfe von Computern zu ermitteln Damals war ich nur ein Hobby, da ich über keine finanziellen Mittel verfügte und es mir gelang, rechtzeitig aus diesem Weg ohne Wiederkehr herauszukommen, nachdem ich alle meine begrenzten Lebenshaltungskosten verloren hatte.

Das mobile Spielprojekt, an dem ich kürzlich gearbeitet habe, erforderte Permutations- und Kombinationsalgorithmen. Obwohl ich jetzt am Client arbeite, bin ich immer noch mit PHP vertraut, also habe ich das Schreiben selbst geübt. Überraschenderweise stellte sich heraus, dass PHP Die Array-Funktion ist so praktisch, dass sie in nur wenigen Zeilen erledigt werden kann. Ich hoffe, Sie können mir einige Ratschläge zu den Mängeln geben.

<?php

// 阶乘
function factorial($n) {
	return array_product(range(1, $n));
}

// 排列数
function A($n, $m) {
	return factorial($n)/factorial($n-$m);
}

// 组合数
function C($n, $m) {
	return A($n, $m)/factorial($m);
}

// 排列
function arrangement($a, $m) {
	$r = array();

	$n = count($a);
	if ($m <= 0 || $m > $n) {
		return $r;
	}

	for ($i=0; $i<$n; $i++) {
		$b = $a;
		$t = array_splice($b, $i, 1);
		if ($m == 1) {
			$r[] = $t;
		} else {
			$c = arrangement($b, $m-1);
			foreach ($c as $v) {
				$r[] = array_merge($t, $v);
			}
		}
	}

	return $r;
}

// 组合
function combination($a, $m) {
	$r = array();

	$n = count($a);
	if ($m <= 0 || $m > $n) {
		return $r;
	}

	for ($i=0; $i<$n; $i++) {
		$t = array($a[$i]);
		if ($m == 1) {
			$r[] = $t;
		} else {
			$b = array_slice($a, $i+1);
			$c = combination($b, $m-1);
			foreach ($c as $v) {
				$r[] = array_merge($t, $v);
			}
		}
	}

	return $r;
}


// ====== 测试 ======
$a = array("A", "B", "C", "D");

$r = arrangement($a, 2);
var_dump($r);

$r = A(4, 2);
echo $r."\n";

$r = combination($a, 2);
var_dump($r);

$r = C(4, 2);
echo $r."\n";

Nach dem Login kopieren

Als ich vor einigen Jahren PHP trainierte, habe ich auch einen Schleifenmatrix-Algorithmus geschrieben. Externe Links sind hier nicht erlaubt selbst. „Eine schriftliche Testfrage zu Algorithmen auf Sina zu Beginn des Monats“, der zweite Punkt ist meine Originalversion, damit jeder lernen und kommunizieren kann.

Das Obige hat den PHP-Permutations- und Kombinationsalgorithmus vorgestellt, einschließlich seiner Aspekte. Ich hoffe, dass er für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage