本人有几个数组,做多项有10万的,最少项有2千的。
比如:
arr[0]="阿里巴巴";
arr[1]="阿理妈妈";
arr[2]="阿力姐姐";
arr[3]="阿离奶奶";
arr[4]="阿李爷爷";
arr[5]="阿利伯伯";
arr[6]="阿立妹妹";
...
...
...
arr[101112]="阿丽哥哥";
arr[101113]="阿哩弟弟";
...需要给这个函数写一个接口:string GetLikeStr(string temps),输入"阿%"的话,返回任意字符分割的相似与“阿”的100条内容。关键是速度块一些,反正大于50MS就好了,任何算法都可以!!!谢谢大家!

解决方案 »

  1.   

    应该没问题吧,人家是内存的数组,又不是DB. 任取100个元素应该50MS能搞定吧.
      

  2.   

    看你输入的关键字了, 如果是xx%, 排序一下就很好找. 
    如果是%xx%, 应该要全部遍历.
      

  3.   

    把数组用TABLE存放,然后使用LIKE方式过滤,应该可以满足你的要求。
      

  4.   

    这是创建索引后得到的数据,要不然这些数据是几百万的!大哥!还有,这里的50ms是对于那个10万记录中搜索需要的时间。如果十万条记录在你的电脑里检索50毫秒以内,那么你的电脑配置很好的,所以在你的电脑上应该25ms才可以的。ok
      

  5.   

    数组的数据结构不支持快速查找。
    你需要一个hashtable或者别的数据结构来做数据存储,最好是一个树形结构
    相当于一个汉字字典的树形结构。这样的话,你的查找速度肯定很快,不过载入速度就不保证了。
      

  6.   

    如果是10w数据要求50ms的话,估计要对数组做预处理
    比如:
    1、先对数组进行排序。。
    2、对数组做索引,比如"阿"开头的是从哪个下标开始、"阿里"开头的又是从哪个下标开始、"阿里弟"开头的
    3、根据这种策略,查找的时候先在索引里面确定下标范围,应该不需要50ms的
      

  7.   

    这种事情,很明显是要交给数据库来做. 数据库已经有极其完备的解决方案,而且用一句sql就可以搞定.
    而不是浪费时间费尽心机研究什么算法.有人说这是在内存里的数据,但是你那些数据最初是哪里来的? 难道手工打入不保存到永久介质,掉电就丢?
      

  8.   

    我的数据从磁盘中的文本文件中来的,要求不要使用access数据库或SQL数据库,必须使用自编的数据库格式。所以需要快速查找。我在程序中已成功完成了几百万条记录中快速找出索引里指定的记录条(记录最多有10万条),并且向ArrayList中插入了这些数据,可是我最终需要100个最相似的数据,不知怎样才能这个10万条记录中快速找出最相似的100条数组。
      

  9.   

    因为数据库是由用户添加的。(我发布数据库文件,用户自己吧数据库文件插入到程序中)所以只好建立通用索引。不要认为中文和别的语言的索引建立是一样的。我有100万个中文数据,还有200多万个阿拉伯,150万维吾尔文数据,luou_net 你说说,你会怎么开发的?就像金山词典那样?一个字儿:牛!
      

  10.   

    我不知道你说的建立中文索引采用的什么办法,个人考虑可以用中文的gb2312编码来建索引。中文汉字的拼音从A到ZUO分别对应-20319到-10254,是有规律的。拼音字母从A到Z是从45217到54481的26个(不连续)码。然后组合成一个拼音,例如Ba是-20283。你可以去了解一下具体的情况,看是否有帮助