注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

生成集合的真子集  

2011-04-01 11:20:20|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在百度知道上别人提的一个问题,我帮别人解决了,感觉我的解法还是挺巧妙的,而且速度快。

using System;

using System.Collections;

 

namespace Castor

{

    class Program

    {

        static void Main(string[] args)

        {

            string[] zz = new string[]{"A","B","C","D","E","F","G","H","I","J","K","L","M","N"};

            ArrayList al=null;

            HPTimer t = new HPTimer();

            t.Start();

            al = GetChildItems(zz);

            t.Stop();

            Console.WriteLine("真子集元素个数为"+al.Count.ToString()+",分别如下:");

            foreach (object obj in al)

                Console.WriteLine(obj.ToString());

            Console.WriteLine("所用时间为:" + t.Duration.ToString() + "ms");

            Console.Read();

        }

 

        public static ArrayList GetChildItems(string[] Items)

        {

            int n = Items.Length;

            ArrayList allChild = new ArrayList(Convert.ToInt16(Math.Pow(2, n)) - 2);

            string s=null;

           

            for (int i = 1; i < Convert.ToInt16(Math.Pow(2, n))-1; i++)

            {

                s = "{";

                /*

                 * 如果用花括号输出,这里就用

                 * s = "{";

                 * 并在最后添加前加上

                 * s += "}";

                 */

                int t = 0;

                int k = i;

                while (k > 0)

                {

                    if ((k & 1) == 1)

                        s=s+Items[t]+",";

                    k=k>>1;

                    t++;

                }

                s = s.Substring(0, s.Length - 1);//去掉最后一个逗号

                s += "}";

                allChild.Add(s);

            }

            return allChild;

        }

    }

}

 稍作修改,获取什么子集啊,真子集啊都很简单了。测试对于具有14个元素的集合,所花时间为25毫秒,如下:

生成集合的真子集 - Castor - 趁年轻,多折腾~~

 测试时间你需要使用高精度计时类,该类的实现可查看:这里

  评论这张
 
阅读(643)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016