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

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

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

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

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

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

运行结果:

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

Tags: php生成排列算法

分享到: