当前位置:首页 > PHP教程 > php应用 > 列表

php实现的生成排列算法示例

发布:smiling 来源: PHP粉丝网  添加日期:2021-12-07 16:20:16 浏览: 评论:0 

这篇文章主要介绍了php实现的生成排列算法,结合实例形式分析了php基于递归、遍历字符串实现全排列相关算法实现技巧,需要的朋友可以参考下。

本文实例讲述了php实现的生成排列算法,分享给大家供大家参考,具体如下:

  1. <?php 
  2. function perm($s$n$index
  3.   if($n == 0) 
  4.   { 
  5.      return ''
  6.   } 
  7.   else 
  8.   { 
  9.     $nIndex = count($index);  //可用的字符串下标 
  10.     $res = array(); 
  11.     foreach($index as $i => $v
  12.     { 
  13.       $tmp = $index
  14.       unset($tmp[$i]);    //去掉当前的前缀 
  15.       /* 调试信息,便于理解 
  16.       echo "len $n , cur $i , index:\n"; 
  17.       var_dump($tmp); 
  18.        */ 
  19.       $ret = perm($s$n-1, $tmp);  //递归得到稍短的排列 
  20.       if($ret != ''
  21.       { 
  22.         foreach($ret as $r
  23.         { 
  24.           $res[] = $s[$v] . $r;  //将稍短的排列逐个拼上当前的前缀 
  25.         } 
  26.       } 
  27.       else 
  28.       { 
  29.         $res[] = $s[$v]; 
  30.       } 
  31.     } 
  32.     return $res
  33.   } 
  34. function getPerm($s
  35.   $n = strlen($s); 
  36.   $index = range(0, $n-1); 
  37.   //得到不同长度的排列 
  38.   for($i=1; $i<=$n$i++) 
  39.   { 
  40.     var_dump(perm($s$i$index)); 
  41.   } 
  42. getPerm('abcd'); 
  43. ?> 

运行结果:

  1. array(4) { 
  2.   [0]=> 
  3.   string(1) "a" 
  4.   [1]=> 
  5.   string(1) "b" 
  6.   [2]=> 
  7.   string(1) "c" 
  8.   [3]=> 
  9.   string(1) "d" 
  10. array(12) { 
  11.   [0]=> 
  12.   string(2) "ab" 
  13.   [1]=> 
  14.   string(2) "ac" 
  15.   [2]=> 
  16.   string(2) "ad" 
  17.   [3]=> 
  18.   string(2) "ba" 
  19.   [4]=> 
  20.   string(2) "bc" 
  21.   [5]=> 
  22.   string(2) "bd" 
  23.   [6]=> 
  24.   string(2) "ca" 
  25.   [7]=> 
  26.   string(2) "cb" 
  27.   [8]=> 
  28.   string(2) "cd" 
  29.   [9]=> 
  30.   string(2) "da" 
  31.   [10]=> 
  32.   string(2) "db" 
  33.   [11]=> 
  34.   string(2) "dc" 
  35. array(24) { 
  36.   [0]=> 
  37.   string(3) "abc" 
  38.   [1]=> 
  39.   string(3) "abd" 
  40.   [2]=> 
  41.   string(3) "acb" 
  42.   [3]=> 
  43.   string(3) "acd" 
  44.   [4]=> 
  45.   string(3) "adb" 
  46.   [5]=> 
  47.   string(3) "adc" 
  48.   [6]=> 
  49.   string(3) "bac" 
  50.   [7]=> 
  51.   string(3) "bad" 
  52.   [8]=> 
  53.   string(3) "bca" 
  54.   [9]=> 
  55.   string(3) "bcd" 
  56.   [10]=> 
  57.   string(3) "bda" 
  58.   [11]=> 
  59.   string(3) "bdc" 
  60.   [12]=> 
  61.   string(3) "cab" 
  62.   [13]=> 
  63.   string(3) "cad" 
  64.   [14]=> 
  65.   string(3) "cba" 
  66.   [15]=> 
  67.   string(3) "cbd" 
  68.   [16]=> 
  69.   string(3) "cda" 
  70.   [17]=> 
  71.   string(3) "cdb" 
  72.   [18]=> 
  73.   string(3) "dab" 
  74.   [19]=> 
  75.   string(3) "dac" 
  76.   [20]=> 
  77.   string(3) "dba" 
  78.   [21]=> 
  79.   string(3) "dbc" 
  80.   [22]=> 
  81.   string(3) "dca" 
  82.   [23]=> 
  83.   string(3) "dcb" 
  84. array(24) { 
  85.   [0]=> 
  86.   string(4) "abcd" 
  87.   [1]=> 
  88.   string(4) "abdc" 
  89.   [2]=> 
  90.   string(4) "acbd" 
  91.   [3]=> 
  92.   string(4) "acdb" 
  93.   [4]=> 
  94.   string(4) "adbc" 
  95.   [5]=> 
  96.   string(4) "adcb" 
  97.   [6]=> 
  98.   string(4) "bacd" 
  99.   [7]=> 
  100.   string(4) "badc" 
  101.   [8]=> 
  102.   string(4) "bcad" 
  103.   [9]=> 
  104.   string(4) "bcda" 
  105.   [10]=> 
  106.   string(4) "bdac" 
  107.   [11]=> 
  108.   string(4) "bdca" 
  109.   [12]=> 
  110.   string(4) "cabd" 
  111.   [13]=> 
  112.   string(4) "cadb" 
  113.   [14]=> 
  114.   string(4) "cbad" 
  115.   [15]=> 
  116.   string(4) "cbda" 
  117.   [16]=> 
  118.   string(4) "cdab" 
  119.   [17]=> 
  120.   string(4) "cdba" 
  121.   [18]=> 
  122.   string(4) "dabc" 
  123.   [19]=> 
  124.   string(4) "dacb" 
  125.   [20]=> 
  126.   string(4) "dbac" 
  127.   [21]=> 
  128.   string(4) "dbca" 
  129.   [22]=> 
  130.   string(4) "dcab" 
  131.   [23]=> 
  132.   string(4) "dcba" 
  133. }

Tags: php生成排列算法

分享到: