读书人

组词算法的思路

发布时间: 2012-06-25 18:37:39 作者: rapoo

求一个组词算法的思路
有一个组词的需求,请大家帮忙看下,要求如下:

给定一组词,每行一个,如:

裤子
牛仔
纯棉
低腰
加肥

用上面的词组成下面的格式

裤子
牛仔
纯棉
低腰
加肥
裤子牛仔
裤子纯棉
裤子低腰
裤子加肥
裤子牛仔纯棉
裤子牛仔低腰
裤子牛仔加肥
裤子牛仔纯棉低腰
裤子牛仔纯棉加肥
裤子牛仔纯棉低腰加肥
牛仔纯棉
牛仔低腰
牛仔加肥
牛仔纯棉低腰
........

这样依次类推一层一层的组词。

求一个这个需求的算法思路。

[解决办法]
很简单的一个组合问题, 每个词语可选/可不选, 递归跑一下就行了.
[解决办法]
排列组合,是你要的结果么?

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);} 

读书人网 >PHP

热点推荐