組詞演算法的思路

來源:互聯網
上載者:User
求一個組詞演算法的思路
有一個組詞的需求,請大家幫忙看下,要求如下:

給定一組詞,每行一個,如:

褲子
牛仔
純棉
低腰
加肥

用上面的片語成下面的格式

褲子
牛仔
純棉
低腰
加肥
褲子牛仔
褲子純棉
褲子低腰
褲子加肥
褲子牛仔純棉
褲子牛仔低腰
褲子牛仔加肥
褲子牛仔純棉低腰
褲子牛仔純棉加肥
褲子牛仔純棉低腰加肥
牛仔純棉
牛仔低腰
牛仔加肥
牛仔純棉低腰
........

這樣依次類推一層一層的組詞。

求一個這個需求的演算法思路。

------解決方案--------------------
很簡單的一個組合問題, 每個詞語可選/可不選, 遞迴跑一下就行了.
------解決方案--------------------
排列組合,是你要的結果嗎?
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);}
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.