none
5个数 3个 一组的 算法 RRS feed

  • 问题

  • 5个 数 3个 一组   有60 种 排列    其中 有10 组 每位不重复数字的 排列

    我想 一下求出 这 10 组   不重复数字的排列

    而不是 先求出 60 种 然后  再筛选 出 想要的 10组  这样 运行效率太低

    请高手 指教 这个算法 请给代码 参考 谢谢

    2010年3月22日 0:27

答案

  • 若是5个数不重复的排列,则是P(3,5) = 60

    若是5个数不重复的组合,则是C(3,5) = 10

    你是要求C(3,5)吧,题目里一直说排列,被搞混了。

    按这个要求,版主的回答应该是对的,而且效率也很高,是O(1)了,因为结果只出来10个。当然,如果是C(10000,1000)的话就够呛了。

    目前有两种方案,一种是按位遍历,一种是冒泡,不过实际写法都还没想好,毕竟这个东西的增长速度太快,已经超过数量级增长了,所以实际应用上也有很大限制。


    霸王
    2010年3月25日 9:28

全部回复

  • 我不是算法狂人,但是楼主看看下面这个算法是否可行:

    int[] arr = { 1, 2, 3, 4, 5 };
    for(int i=0;i<=2;i++)
    	for (int j = i+1; j <= 3; j++)
    		for (int k = j + 1; k <= 4; k++)
    		{
    			Console.WriteLine("{0} {1} {2}", arr[i], arr[j], arr[k]);
    		}



    理解的越多,需要记忆的就越少
    2010年3月23日 1:44
    版主
  • 朋友 你的 这个算法 效率太低

    2010年3月24日 5:42
  • 版主的算法可能不一定对,要求的是排列,而不是组合。

    具体算法是应该有,不过就这个条件似乎太少了点,没有优化的方向,给个严格点的条件,比如1000个数字100个一组这种,才有优化的必要。

     


    霸王
    2010年3月24日 12:58
  • 呵呵,我说了我不是算法狂人,不是研究算法的。

    花郎,如果您有更好的算法,可以分享给大家的。



    理解的越多,需要记忆的就越少
    2010年3月25日 0:21
    版主
  • 若是5个数不重复的排列,则是P(3,5) = 60

    若是5个数不重复的组合,则是C(3,5) = 10

    你是要求C(3,5)吧,题目里一直说排列,被搞混了。

    按这个要求,版主的回答应该是对的,而且效率也很高,是O(1)了,因为结果只出来10个。当然,如果是C(10000,1000)的话就够呛了。

    目前有两种方案,一种是按位遍历,一种是冒泡,不过实际写法都还没想好,毕竟这个东西的增长速度太快,已经超过数量级增长了,所以实际应用上也有很大限制。


    霸王
    2010年3月25日 9:28