额 这是我们一次作业 老师要根据执行效率给分在一个textfile中有500行数据;每一行都是整数并且升序排列(每一行都大于等于32 个)
需要以行为单位 查处出现频率大于等于一个输入的数字的子集 比如 
1 2 3
1 2
1 2 3 4
如果输入2
于是输出
1 * 3
2 * 3
3 * 2
1 2 * 3
1 2 3 * 2我实现了一个直接的办法 但是 数据量如此庞大每一行都要跑一个晚上~~~CSDN最流行的求子集的算法一遇到了每一行数据量很大的也很慢;请问有各位大侠有什么好的快的算法啊?老师说他实现的 输入200的话 是9秒~~~~~~~~小女子谢谢大侠们了~

解决方案 »

  1.   

    额,可以借助数据库吗?
    先将textfile中500行数据导入数据库,然后将所有出现的数字列出来组成一个数组,然后用循环去查询数据库.
      

  2.   

    请解释一下输出的结果集  额 不好意思没有表述清楚~ 
    1 * 3 
    2 * 3 
    3 * 2 
    1 2 * 3 
    1 2 3 * 2 
    表示的是 如果输入 2的话 那么 出现次数大于2的就有 1 出现了3次;2出现了3次~~~~~~~* 后面的数字表示出现了的次数 ; 
    子集的计算以行为单位 比如:
    1 2
    1 5
    那么它的子集就是
    1*2
    1 2 *1
    1 5* 1
    而没有 1 5CSDN上最流行的算法用到了内存,所以数据量大的时候,尤其是每一行大于32个integer的时候 32bit的CPU马上就100%不能继续跑了;
    读入数据库的话 啊 
    整个textfile有上万个数字呢~~~~~~ 而且老师给hint的时候说过不需要用到数据库
    我写的这个方法倒是用了过后直接flush掉 所以可以整晚的跑; 不过这样的话 我这次ass估计连P都得不到~~~~~~各位大侠帮帮忙啦 头痛死了CSDN上的