有1数组名为rule,有1数组名为input,rule里装的规则如(ad,dis,in,lop,infor,mal,...),input装的是源数据如(admin,input,inter,popo,name,class,...),A,B数据量都很大,希望能用多线程实现:将input里的数据按照rule里的前缀过滤,匹配的放在good数组里,不满足的放在bad数组里,具有较高效率。
-----------------------------------------------------
今天面试一公司的题,看看csdn的达人们能有什么好的解法。

解决方案 »

  1.   

    rule和input里面的东西是第i个和第i个比的话
    好像单线程快点
      

  2.   

    我觉得还是用hash+二分查找来做会快
      

  3.   

    一,先统计INPUT数组的长度,然后起相应多个线程
    二,每个线程做的事就是将和自己下标号对应的那个INPUT里的元素和RULE里的每一个元素的做前缀比较,如果比较成功就存入GOOD里,全部都比较完了也没成功,就放BAD里
      

  4.   

    good和bad是线程安全的容器吗?如果是的,那多线程就是等待
    如果不是。
      

  5.   

    input 做成消费源1
    rule 做成消费源2消费源维护X*Y的循环,,也就是2个指针而已,保证不要重复判断线程做成消费者模式,每个线程从消费源里面读取2个数据,一个Input,一个Rule判断结果分别放入2个本地线程数组,无须考虑同步问题,因为自己用判断完,从消费源读取下一对数据,直到没有数据了然后把本地的2个数组插入到2个结果数组Good 和 Bad, 用Vector 即可,因为操作次数不多,等于线程数,对性能影响不大。至于启动多少个线程,得根据数据量确定了!
      

  6.   

    发表于:2008-03-18 13:50:365楼 得分:0 
    input 做成消费源1 
    rule 做成消费源2 消费源维护X*Y的循环,,也就是2个指针而已,保证不要重复判断 线程做成消费者模式,每个线程从消费源里面读取2个数据,一个Input,一个Rule 判断结果分别放入2个本地线程数组,无须考虑同步问题,因为自己用 判断完,从消费源读取下一对数据,直到没有数据了 然后把本地的2个数组插入到2个结果数组Good 和 Bad, 用Vector 即可,因为操作次数不多,等于线程数,对性能影响不大。 至于启动多少个线程,得根据数据量确定了!  ------------------------------------------------------------------------------java2000_net能否用代码写出来让我参考下呢?
      

  7.   

    我只实现了GOOD的算法,对于BAD,还需完善。不过,一个循环用不了多长时间的。请参考
    http://www.java2000.net/viewthread.jsp?tid=1983
      

  8.   

    已经完善了,可以同时处理GOOD和BAD数据。 呵呵!