求一個組詞演算法的思路
有一個組詞的需求,請大家幫忙看下,要求如下:
給定一組詞,每行一個,如:
褲子
牛仔
純棉
低腰
加肥
用上面的片語成下面的格式
褲子
牛仔
純棉
低腰
加肥
褲子牛仔
褲子純棉
褲子低腰
褲子加肥
褲子牛仔純棉
褲子牛仔低腰
褲子牛仔加肥
褲子牛仔純棉低腰
褲子牛仔純棉加肥
褲子牛仔純棉低腰加肥
牛仔純棉
牛仔低腰
牛仔加肥
牛仔純棉低腰
........
這樣依次類推一層一層的組詞。
求一個這個需求的演算法思路。
------解決方案--------------------
很簡單的一個組合問題, 每個詞語可選/可不選, 遞迴跑一下就行了.
------解決方案--------------------
排列組合,是你要的結果嗎?
PHP code
$arr=array('褲子','牛仔','純棉','低腰','加肥');for($i=1,$count=count($arr);$i<=$count;$i++) $temp[$i]=getCombinationToString($arr,$i);print_r($temp);function getCombinationToString($arr,$m){ $result = array(); if ($m ==1) return $arr; if ($m == count($arr)){ $result[] = implode('' , $arr); return $result; } $temp_firstelement = $arr[0]; unset($arr[0]); $arr = array_values($arr); $temp_list1 = getCombinationToString($arr, ($m-1)); foreach ($temp_list1 as $s){ $s = $temp_firstelement.$s; $result[] = $s; } $temp_list2 = getCombinationToString($arr, $m); foreach ($temp_list2 as $s){ $result[] = $s; } return $result;}/*Array( [1] => Array ( [0] => 褲子 [1] => 牛仔 [2] => 純棉 [3] => 低腰 [4] => 加肥 ) [2] => Array ( [0] => 褲子牛仔 [1] => 褲子純棉 [2] => 褲子低腰 [3] => 褲子加肥 [4] => 牛仔純棉 [5] => 牛仔低腰 [6] => 牛仔加肥 [7] => 純棉低腰 [8] => 純棉加肥 [9] => 低腰加肥 ) [3] => Array ( [0] => 褲子牛仔純棉 [1] => 褲子牛仔低腰 [2] => 褲子牛仔加肥 [3] => 褲子純棉低腰 [4] => 褲子純棉加肥 [5] => 褲子低腰加肥 [6] => 牛仔純棉低腰 [7] => 牛仔純棉加肥 [8] => 牛仔低腰加肥 [9] => 純棉低腰加肥 ) [4] => Array ( [0] => 褲子牛仔純棉低腰 [1] => 褲子牛仔純棉加肥 [2] => 褲子牛仔低腰加肥 [3] => 褲子純棉低腰加肥 [4] => 牛仔純棉低腰加肥 ) [5] => Array ( [0] => 褲子牛仔純棉低腰加肥 ))*/
------解決方案--------------------
組合問題,可參考
PHP code/**C(M,N) recursive*/function C($m,$n){ if( $n <= 1) return $m; $rs = array(); while(count($m)) { $first = array_shift( $m ); foreach(C($m,$n-1) as $v) $rs[] = $first.$v; } return $rs;}$array = array('褲子','牛仔','純棉','低腰','加肥'); while(count($array)){ for($i = 2,$j = count($array);$i <= $j;$i++) { print_r(C($array,$i)); } array_shift($array);}