博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP实现排列组合
阅读量:7192 次
发布时间:2019-06-29

本文共 1386 字,大约阅读时间需要 4 分钟。

hot3.png

目前公式有两种,分别是:

A(n,m)=n(n-1)(n-2)……(n-m+1)= n!/(n-m)!

C(n,m)=A(n,m)/m!=n!/((n-m)!*m!)

    有这两个公式就能知道结果数量怎么算

排列算法:

01 <?php
02 function a($n, $m){
03     if($n < $m) return false;
04     $num = 1;
05     for($i=0; $i<$m; $i++){
06         $num = $num * ($n-$i);
07     }
08     return $num;
09 }
10 ?>
组合算法:
1 <?php
2 function c($n, $m){
3     if($n < $m) return false;
4     return a($n,$m)/a($m,$m);
5 }
6 ?>
应用方法:
1 <?php echo a(5,3) ?>
2 <?php echo c(5,3) ?>
上面只能得到结果的数量不能枚举所有情况,继续考虑他的逻辑,最后得到枚举算法(似乎说的很简单,不过思考逻辑不好描述,程序中看端倪吧)
排列枚举算法:
01 <?php
02 function arrangement($arr, $len=0, $str="") {
03     global $res;
04     $arr_len = count($arr);
05     if($len == 0){
06         $res[] = $str;
07     }else{
08         for($i=0; $i<$arr_len; $i++){
09             $tmp = array_shift($arr);
10             arrangement($arr, $len-1, $str."\t".$tmp);
11             array_push($arr, $tmp);
12         }
13     }
14 }
15 ?>
组合枚举算法:
01 <?php
02 function combination($arr, $len=0, $str="") {
03     global $res;
04     $arr_len = count($arr);
05     if($len == 0){
06         $res[] = $str;
07     }else{
08         for($i=0; $i<$arr_len-$len+1; $i++){
09             $tmp = array_shift($arr);
10             combination($arr, $len-1, $str."\t".$tmp);
11         }
12     }
13 }
14 ?>
应用方法:
01 <?php
02 $arr = array(1,2,3,4,5,6,7);//词根
03 $num = 2;//所需使用词根的数量
04 $res = array();结果集
05 arrangement($arr, $num);//进行排列运算
06 var_dump($res);//输出排列结果
07  
08 $res = array();
09 combination($arr, $num);//进行组合运算
10 var_dump($res);//输出组合结果
11 ?>

转载于:https://my.oschina.net/pureboys/blog/169702

你可能感兴趣的文章
linux系统日志解析
查看>>
DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity,
查看>>
硅谷课程 | 系统设计的基本方法SNAKE原则
查看>>
泰国取消国家数据中心建设计划
查看>>
富士通推新型RFID标签WT-A522L,适用于时尚服装和配件
查看>>
微软:10台Windows 10 PC已有8台已升一周年更新
查看>>
《UNIXLinux程序设计教程》一2.5 文件定位
查看>>
干货满满,阿里天池CIKM2017 Rank4比赛经验分享
查看>>
全闪存不是早买早亏
查看>>
成为更优秀的程序员:退后一步看问题
查看>>
蓝屏死机”再见?Win10 正测试“绿屏”死机
查看>>
外媒称 Android 7.0 当中加入了指纹手势
查看>>
在 GitHub 上,女性提交的代码更可能被接受
查看>>
如何配置struts+hibernate,基本使用方法
查看>>
《OpenStack云计算实战手册(第2版)》一2.7 租户间共享镜像
查看>>
熬夜并不值得程序员炫耀
查看>>
《思科数据中心I/O整合》一2.8 基于优先级的流量控制(PFC)
查看>>
Hadoop 这样业界顶级的大规模数据处理平台,均发现满足不了类似双十一这样全世界的剁手党蜂拥而至的热情...
查看>>
Kilim实现浅析(一)
查看>>
Maven入门指南(二)
查看>>