浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)

作者:jingxian 时间:2024-05-03 15:53:12 

实例如下:


<?php
/*分治法——直接选择
比如说a b c
首先将a之后的字符依次与a进行交换
1 b,a,c
2 c,b,a
注意这里少了一个原始数据 a,b,c。需要把原始数据也算如排列中
3 a,b,c

然后把字符移到第二个位置,将第二个位置之后的数分别与第二个位置的数进行交换
1 b,a,c ===> 11 b,c,a
2 c,b,a ===> 21 c,a,b
3 a,b,c ===> 31 a,c,b

**/
function zuhe($arr,$begin){
 if(!is_array($arr)) return ;
 $N = count($arr);
 if($begin == $N-1 || $begin >$N || $begin <0) return ;
 if($begin == 0){
   print_r($arr);//输出原始数据
   echo '</br>';
 }
 //循环将初始值与第i个值交换后进行组合
 for($i = $begin;$i < $N;$i++){

$t = $arr[$begin];
   $arr[$begin] = $arr[$i];
   $arr[$i] = $t;

if($i!==$begin){//i==begin时的数已经输出过
     print_r($arr);
     echo '</br>';
   }
   zuhe($arr,$begin+1);  
   $t = $arr[$begin];
   $arr[$begin] = $arr[$i];
   $arr[$i] = $t;

}
}

$arr = array('a','b','c','d');
//zuhe($arr,0);

/*分治法——直接插入
初始时从0个元素开始,输出初始序列,为组合的一个序列
当在来一个元素时只需将该元素放在该元素之前的元素组的不同的位置即组成了不同的排列
如已有元素组为a,b.新元素为c,把c分别与a,b进行交换即可(a,c,b);(c,b,a),在现有的排列上在新增元素
重复执行以上步骤
*/
function zuhe2($arr,$begin){
 if($begin==0) {
   print_r($arr);
   echo "</br>";
   //zuhe2($arr,$begin+1);
 }
 if($begin >= count($arr)) return ;
 zuhe2($arr,$begin+1);//begin时的排列上一次已产生,直接新增元素
 for($i = $begin-1;$i>=0;$i--){
   $t = $arr[$begin];
   $arr[$begin] = $arr[$i];
   $arr[$i] = $t;
   print_r($arr);
   echo "</br>";
   zuhe2($arr,$begin +1);
   $t = $arr[$begin];
   $arr[$begin] = $arr[$i];
   $arr[$i] = $t;
 }
}
标签:php,排列,组合
0
投稿

猜你喜欢

  • python Canny边缘检测算法的实现

    2023-04-23 20:41:55
  • 分享2个方便调试Python代码的实用工具

    2021-08-26 18:50:08
  • Python文件与文件夹常见基本操作总结

    2023-08-08 16:56:09
  • 用Python脚本生成Android SALT扰码的方法

    2023-05-09 22:12:25
  • 使用MySQL内建复制功能

    2009-12-15 21:36:00
  • python实现21点小游戏

    2023-11-21 08:58:27
  • 利用Python如何制作好玩的GIF动图详解

    2023-03-02 10:47:47
  • Golang分布式应用定时任务示例详解

    2024-02-12 06:23:19
  • pytorch中的weight-initilzation用法

    2022-03-22 23:28:24
  • Django中实现一个高性能计数器(Counter)实例

    2023-11-16 03:53:48
  • python 绘制场景热力图的示例

    2022-01-22 07:03:21
  • js实现类bootstrap模态框动画

    2024-04-18 09:31:12
  • Python 字符串、列表、元组的截取与切片操作示例

    2021-12-10 09:47:34
  • php session应用实例 登录验证

    2023-11-14 13:49:43
  • Python Decorator的设计模式演绎过程解析

    2021-10-13 14:29:37
  • PyCharm添加Anaconda中的虚拟环境Python解释器出现Conda executable is not found错误解决

    2022-02-24 23:51:03
  • 过期软件破解办法实例详解

    2024-05-02 17:38:03
  • JavaScript常用的返回,自动跳转,刷新,关闭语句汇总

    2023-10-21 10:37:27
  • WEB页面工具之语言XML的定义

    2008-05-29 11:29:00
  • Python中IPYTHON入门实例

    2021-01-23 04:56:25
  • asp之家 网络编程 m.aspxhome.com