有14个大集合,每个集合大概有50个小集合,每个小集合大概最多有3个一位数的数字
对这14 个大集合进行如下排列
1:每次取2个大集合里面的数据,与剩下的大集合进行交集。有很N种取法
2:每次取3个大集合里面的数据,与剩下的大集合进行交集。有很N种取法
3:每次取4个大集合里面的数据,与剩下的大集合进行交集。有很N种取法
4:每次取5个大集合里面的数据,与剩下的大集合进行交集。有很N种取法
5:每次取6个大集合里面的数据,与剩下的大集合进行交集。有很N种取法
最后再去掉重复的,程序居然要等好几秒钟才算出来,要么,就死机
啥原因,号称计算机,就这个样?有没有好的办法,提高计算速度

解决方案 »

  1.   

    与数据库关系:
    数据库就是对于大数据量检索用的。有很多优化算法。比如按条件查询,排序,存储过程的计算优化等等所以具体用法如下:
    1.可以将14大集*50小集*3个数,导入数据库共有2100条数据
    2.用SQL语句借助数据库引擎分类提数。(这点数据量access足够了)哎!这解释真累
      

  2.   

    你可以把数据导入到数据库中,然后利用数据库的分类提数,提取到缓存中(多线程池),然后动态分配多线程分别处理。
    不用数据库也可以实现把数据放到datatbale中,意思是一样的。重要的是多线程。充分利用多核CPU。
    具体算法,没法帮你了。
      

  3.   

    多线程 与单线程 不是一样吗? 计算机的硬件不变的话。
    查询时,Cpu 的控制权不是交了给 数据库管理系统? 所以应该多线程 与单线程  差不多速度的啊。
      

  4.   

    你解释了半天无非就是一句话,借用数据库查询代替自己实现算法。
    为了一个这么简单的算法,还非要数据库,如同大学生算个10以内的加减乘除还要计算器。这一点你连lz都不如。
    如果你建议lz用数据库的话,为什么不建议他用LINQ、Erlang、Haskell、Matlab
      

  5.   

    计算机硬件不变的情况下,如果是单核单线程CPU,多线程比单线程计算速度还慢,因为分配多线程也是需要资源的。
    反之多线程比单线程快。具体你可以查看计算机硬件文章,不多解释了。
    使用数据库管理系统,在感觉上是会比数据放在内存慢,但是数据库是专门对数据提取优化的。而内存中的数据你不一定优化过。我们假设把两千多条数据存放在了DataTable中。那么你查询数据一般会使用Dataview,或则是DataTable自带的筛选。如果是使用数据库存放,你可以为表建立索引。加上数据库自带的缓存等等一大堆。实际运行就不一样了。你想想是Datatable对查询专业呢还是数据库专业。
    一般来说会有速度提升。但是2000条数据如果算法不是很复杂应当效果不太明显。
      

  6.   

    好吧,我把问题描述清楚点1:先说两个集合规则,对于两个集合筛选规则,类型:List<string>List<string> list1 = new List<string>{"0","1","2"}
    List<string> list2 = new List<string>{"0","1"}
    如果其中一个集合的元素被完全包含在另个一个集合中,则取元素多的,丢弃元素少的那个
    此问题在http://topic.csdn.net/u/20111027/23/592d04f7-b57d-4d0a-be3d-cfb7184af252.html有答案2:现在有14个大集合,类型:List<List<string>>
    每一个大集合里面装了大概有最多不超过1000个List<string>类型的小集合3:
    每次从14个大集合中取2个大集合,是不是有很多种取法啊,然后,分别把每种取法都要计算,怎么计算呢?就按照第一点的规则进行计算每次从14个大集合中取3个大集合,是不是有很多种取法啊,然后,分别把每种取法都要计算,怎么计算呢?就按照第一点的规则进行计算每次从14个大集合中取4个大集合,是不是有很多种取法啊,然后,分别把每种取法都要计算,怎么计算呢?就按照第一点的规则进行计算每次从14个大集合中取5个大集合,是不是有很多种取法啊,然后,分别把每种取法都要计算,怎么计算呢?就按照第一点的规则进行计算每次从14个大集合中取6个大集合,是不是有很多种取法啊,然后,分别把每种取法都要计算,怎么计算呢?就按照第一点的规则进行计算
    最后的计算结果,去掉重复即可
    每次计算要花好几秒,或者无反应,类似死机
      

  7.   

    看了你的回复认为有以下几点
    1.数据类型
    你的例子中都是string型的,但是内容都是整数,如果真是案例中是数字则可以用数字,理论上数字检索速度极大的大于字符串。不过你的实际例子可能就是字符串。这点就可跳过
    2.算法
    看了你的问题贴,大家根据你的提问,回答基本都是用foreach循环穷举。效率低下。没有分类,没有索引。
    3.数据量
    根据你之前的说法数据量是2000条,后来又说14*1000是一万多条。这个基本是一个数量级的差别了。要是我做我就导入到数据库中根据数据建立分类。针对分类建立相应索引。每次根据要求就提取一小部分。然后针对这部分做循环。你可能用的少我给你举个例子
    提取数据的时候先对第一个字段做查询,然后再利用嵌套的方法查询第二字段,以此类推,如果有索引。数据提取速度穷举循环可比的。