首页 新闻 会员 周边

求助集合划分算法

0
悬赏园豆:40 [已解决问题] 解决于 2012-05-14 00:06

例如,字符串“25482”,
如果按1组来分需要得到如下结果:
{25482}

如果按1组来分需要得到如下结果:

{{2}{5482}}
{{25}{482}}
{{254}{82}},

{{2548}{2}},

 

如果按3组来分得到如下结果:
{{2}{5}{482}}
{{2}{54}{82}}
{{2}{548}{2}}
{{25}{4}{82}}
{{25}{48}{2}}
{{254}{8}{2}}

mousedl的主页 mousedl | 初学一级 | 园豆:168
提问于:2012-05-13 23:10
< >
分享
最佳答案
0
    public class Program
    {
        static List<string[]> s_result = new List<string[]>();
        static Stack<string> s_current = new Stack<string>();

        static void Main(string[] args)
        {
            string s = "25482";
            int groupCount = 3;

            Part(s, groupCount);

            foreach (var r in s_result)
            {
                Console.WriteLine(string.Join("|", r));
            }

            Console.Read();
        }

        static void Part(string s, int groupCount)
        {
            if (groupCount == 1)
            {
                s_current.Push(s);
                s_result.Add(s_current.Reverse().ToArray());
                s_current.Pop();
                return;
            }

            for (int p = 1; p <= s.Length - groupCount + 1; p++)
            {
                s_current.Push(s.Substring(0, p));
                Part(s.Substring(p, s.Length - p), groupCount - 1);
                s_current.Pop();
            }
        }

    }
收获园豆:40
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-05-14 00:00
其他回答(1)
0

你是想说:

对于任意的N(N>1)个字符组成的字符串,用M(N>M>=0 )个分割符来分割,求可分割的方法有多少个吧?

定义一个函数f(n,m)表示可以划分的方法数量,那么,第一个分割符号总共可放置的位置的数量为f1(n,m)=n-m+1个分别为p(1), p(2), ..., p(n-m+1),于是,f(n,m)=(f(n-1,m-1)) + f(n-2, m-1) + ... + f(n-m, m-1)

然后,你把这个算法完善就OK了。

(呵呵,数据忘光了,而且马上要睡觉了,我上面的数据分析还需要推敲,暂且贴出来,权当引玉之砖,希望能对你有所启发。这个问题的解决关键是建立数学模型,大致的建立方法就是我这个样子,然后确定一个当n、m在什么情况下终止的结束条件,以递归的方式调用计算得到最终结果。)

无之无 | 园豆:5095 (大侠五级) | 2012-05-14 00:02

呵呵,感谢各位园子兄弟支持,“水牛刀刀”的代码是正确的,非常感谢 ,牛人!!

支持(0) 反对(0) mousedl | 园豆:168 (初学一级) | 2012-05-14 00:07

@mousedl: 明白了一个道理:授人以渔不如授人以鱼!

支持(0) 反对(0) 无之无 | 园豆:5095 (大侠五级) | 2012-05-14 01:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册