Heim >Backend-Entwicklung >PHP-Tutorial >[算法]求一个排列组合的算法

[算法]求一个排列组合的算法

WBOY
WBOYOriginal
2016-06-23 13:44:52911Durchsuche

是这样的
从0~9,a~z这36个字符中随机抽取3个数,计算有多少种排列组合的方法
求大神指教


回复讨论(解决方案)

36*36*36=46656

36*36*36

算了 自己写出来了

/** * 排列组合算法 * C($n,$m) * $n 元素的个数 * $m 从$n中取出的元素个数 * $num 组合情况的总数 **/function get_combination($n,$m) {	if ((is_int($n) && is_int($m)) && ($m<=$n)){		$a = 1;//初始化		for ($i=1;$i<=$m;$i++){			$a = $n*$a;			$b = 1*$i;			$n--;		}		$num = $a/$b;		return $num;	}}

组合公式:c(n,m)=p(n,m)/m!=n!/((n-m)!*m!)
您认为您算的对吗?

组合公式:c(n,m)=p(n,m)/m!=n!/((n-m)!*m!)
您认为您算的对吗?


你可以试试

36*35*34

按组合公式算出的是 7140
比你少一半


组合公式:c(n,m)=p(n,m)/m!=n!/((n-m)!*m!)
您认为您算的对吗?


你可以试试

echo get_combination(3,3);
输出 2
怎么也是不对的

echo get_combination(3,3);
输出 2
怎么也是不对的


恩 刚看了下也是
你写的公式也是有错误
如果按你的公式
从2个数里提出两个数来排列 就等于1

对 
从2个数里提出两个数来 组合 就是 1
排列 才是 2
p(n,m)=n(n-1)(n-2)……(n-m+1)=n!/(n-m)!(规定0!=1).

补充以下 这3个数可以相同

比如从数组(1,2)里提取随机两个数来组合 可以是
11
22
12
21

对 
从2个数里提出两个数来 组合 就是 1
排列 才是 2
p(n,m)=n(n-1)(n-2)……(n-m+1)=n!/(n-m)!(规定0!=1).



好了 自己把自己绕进去了
n^m就OK了
谢谢了
一直纠结排列组合去了
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