查看: 1456|回复: 0

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

发表于 2018-2-6 08:00:01

实例如下:

  1. <?php
  2. /*分治法——直接选择
  3. 比如说a b c
  4. 首先将a之后的字符依次与a进行交换
  5. 1 b,a,c
  6. 2 c,b,a
  7. 注意这里少了一个原始数据 a,b,c。需要把原始数据也算如排列中
  8. 3 a,b,c
  9. 然后把字符移到第二个位置,将第二个位置之后的数分别与第二个位置的数进行交换
  10. 1 b,a,c ===> 11 b,c,a
  11. 2 c,b,a ===> 21 c,a,b
  12. 3 a,b,c ===> 31 a,c,b
  13. **/
  14. function zuhe($arr,$begin){
  15. if(!is_array($arr)) return ;
  16. $N = count($arr);
  17. if($begin == $N-1 || $begin >$N || $begin <0) return ;
  18. if($begin == 0){
  19. print_r($arr);//输出原始数据
  20. echo '</br>';
  21. }
  22. //循环将初始值与第i个值交换后进行组合
  23. for($i = $begin;$i < $N;$i++){
  24. $t = $arr[$begin];
  25. $arr[$begin] = $arr[$i];
  26. $arr[$i] = $t;
  27. if($i!==$begin){//i==begin时的数已经输出过
  28. print_r($arr);
  29. echo '</br>';
  30. }
  31. zuhe($arr,$begin+1);
  32. $t = $arr[$begin];
  33. $arr[$begin] = $arr[$i];
  34. $arr[$i] = $t;
  35. }
  36. }
  37. $arr = array('a','b','c','d');
  38. //zuhe($arr,0);
  39. /*分治法——直接插入
  40. 初始时从0个元素开始,输出初始序列,为组合的一个序列
  41. 当在来一个元素时只需将该元素放在该元素之前的元素组的不同的位置即组成了不同的排列
  42. 如已有元素组为a,b.新元素为c,把c分别与a,b进行交换即可(a,c,b);(c,b,a),在现有的排列上在新增元素
  43. 重复执行以上步骤
  44. */
  45. function zuhe2($arr,$begin){
  46. if($begin==0) {
  47. print_r($arr);
  48. echo "</br>";
  49. //zuhe2($arr,$begin+1);
  50. }
  51. if($begin >= count($arr)) return ;
  52. zuhe2($arr,$begin+1);//begin时的排列上一次已产生,直接新增元素
  53. for($i = $begin-1;$i>=0;$i--){
  54. $t = $arr[$begin];
  55. $arr[$begin] = $arr[$i];
  56. $arr[$i] = $t;
  57. print_r($arr);
  58. echo "</br>";
  59. zuhe2($arr,$begin +1);
  60. $t = $arr[$begin];
  61. $arr[$begin] = $arr[$i];
  62. $arr[$i] = $t;
  63. }
  64. }
复制代码

以上这篇浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持程序员之家。

您可能感兴趣的文章:

  • 组合算法的PHP解答方法
  • php全排列递归算法代码
  • 使用php计算排列组合的方法
  • php生成数组的使用示例 php全组合算法
  • php通过排列组合实现1到9数字相加都等于20的方法
  • php求数组全排列,元素所有组合的方法
  • PHP输出多个元素的排列或组合的方法
  • php求数组全排列,元素所有组合的方法总结
  • PHP实现的简单排列组合算法应用示例


回复

使用道具 举报