各位兄弟啊,本人在编的程序碰到了个麻烦,请大家讨论一下。
问题:
有1000万个无序带重复node,每个node占据100B,需要逐个加入到某结构中,要求加入时能去掉重复结点,并且运行时间尽量要在10分钟左右完成。
怎么解决呢?
我采用了以下方法
1:采用无序队列存放,每次加入一结点时与前面以有结点比较是否存在,不存在则加入队列。
(!!!需要比较的次数太多了,可能会计算1小时都得不到结果!!!)
2:采用二叉搜索树,刚开始时速度是快多了,但结点多了后1000万*100B=1000M,内存不够用了,机器瘫痪了。
3:
4:
请各位大虾帮忙提个意见吧!谢谢了!

解决方案 »

  1.   

    http://www.xjife.edu.cn/teacher/wjj/DataStructure/web/chazhao/chazhao9.3.2.1.htm
    原来以前学过啊~~
    都忘光光了
      

  2.   

    NJHS(天上来客(中国程序先锋网www.cppn.net)大量免费源代码) ( ) 信誉:100  2006-04-26 07:42:00  得分: 0  
     为什么要用无序的呢
    这样比较会慢很多啊
    ______________________________________________________________________________
    我这问题中结点是逐个产生并无序的,这是条件无法改变。
    如果每次加入一个点后就排成有序队列的话,在查找时是可以快多(譬如可采用二分查找或快速查找法),但是每插入一个结点时都需要调整,时间上肯定得不偿失。
      
     
      

  3.   

    thisisll(速度八十迈) ( ) 信誉:107  2006-04-26 08:28:00  得分: 0  
    肯定是不能全放到内存里了
    又学到了
    看看 
    B-树 是麻玩意~~~
    ——————————————————————————————————
    找本计算机本科的《数据结构》,一般都有介绍
      
     
      

  4.   

    其实根据概率,你只可以将0~2^32-1划分成若干段,这样排除重复数据就容易多了。
    _______________________________________________________________________
    A Gread Idea!
    根据你的提示,我想可以采用以下方法进行处理会比较快速并容易实现。
    1:将1~1000万个node按大小分成10000段,每段放在一个相应的文件里。
    2:需新加入一个node时先计算出该node应存放的文件,再在该文件的node里比较是否存在,不存在则插入;因为每个文件最多只放置10000个node,所以速度应该会大大提高!