注册 登录
主题 : 代码片段:用二分法查找算法+递归对数组快速匹配单词(外加模糊查找,不连续关键词查找)
级别: 光明使者

状态: 连续签到 - [255天]
UID: 2069
精华: 5
发帖: 1091
可可豆: 124131 CB
威望: 126125 点
在线时间: 2587(时)
注册时间: 2009-02-07
最后登录: 2019-03-20
0 楼:  发表于: 2013-12-26 23:39    发自: Web Page

代码片段:用二分法查找算法+递归对数组快速匹配单词(外加模糊查找,不连续关键词查找)   

管理提醒: 本帖被 ccsupport 执行加亮操作(2013-12-27)
二分法查找是一种效率较高的查找算法。不过要求是需要排好序的数组,本demo可以查询到数组中有重复的字符串,或者包含关键字前缀的字符串,先对数组进行排序,再通过二分法快速在数组中匹配关键字最先出现的位置,然后根据最小位置进行用循进行递归判断该区域内匹配到的字符串,直到值大于关键字则退出循环递归查找。比起模糊搜索要快速而有效率并且性能消耗很低。缺点是只能进行单词连续搜索,如需要对句子,或者中文不连续词查询则还是需要模糊查询了。附件,我会放完整demo,各位可以使用,另外还会附上完整的中文不连续词查询Demo.


结果请下载Demo运行
testErFengFa.zip :此附件是二分法查找,快速的查找连续的单词或者中文
FuzzySearch:模糊查找,可以进行拼音、单词、中文不边续搜索,例如:搜索小小,可以出现李小小,孙小小,等等,拼音搜索xx都可以找到李小小,孙小小等等。





#import "quickSearch.h"
@implementation quickSearch
+(NSArray *)useQuickSearch:(NSArray *)dataArray keyStr:(NSString *)key{
    if([dataArray count] < 1) return nil;
    int low = [self binarySearchLower:dataArray keyStr:key withLow:0 withHigh:[dataArray count]-1];
    NSArray *searchArray = [self searchData:dataArray keyStr:key withLow:low];
    return searchArray;
}
+(NSArray *)searchData:(NSArray *)dataArray keyStr:(NSString *)key withLow:(NSInteger)low{
    NSMutableArray *searchArray = [[NSMutableArray alloc] init];
    BOOL isFind = NO;
    if([key length] > 0){
        for(int i=low; i<[dataArray count];i++){
            BOOL result = [[dataArray objectAtIndex:i] compare:key options:NSCaseInsensitiveSearch
                                                         range:NSMakeRange(0, [key length])];
            if (result == NSOrderedSame)
            {
                [searchArray addObject:[dataArray objectAtIndex:i] ];
                isFind = YES;
            }
            if(isFind == YES && result != NSOrderedSame)
                break;
        }
    }
    return searchArray;
}
+(int)binarySearchLower:(NSArray *)dataArray keyStr:(NSString *)key withLow:(int)low withHigh:(int)high{
    int result = -1;
    while(low <= high){
        int mid = (low + high) / 2;
        BOOL find = [[dataArray objectAtIndex:mid] compare:key options:NSCaseInsensitiveSearch
                                                        range:NSMakeRange(0, [key length])];
        if(find >= 0){
            result = mid;
            high = mid - 1;
        }else low = mid + 1;
    }
    return result;
}
@end
[ 此帖被angellixf在2014-01-03 13:40重新编辑 ]

附件: testErFengFa.zip (62 K) 下载次数:438
附件: FuzzySearch.zip (62 K) 下载次数:415
汉字字典 -2018最新专业版
级别: 风云使者

状态: 连续签到 - [309天]
UID: 83747
精华: 0
发帖: 3865
可可豆: 19534 CB
威望: 19405 点
在线时间: 2397(时)
注册时间: 2011-07-27
最后登录: 2018-11-05
1 楼:  发表于: 2013-12-27 09:37    发自: Web Page
支持一下!
清空我的评分动态本帖最近评分记录: 共1条评分记录
nono 可可豆 +5 2013-12-31 -
隐藏评分记录
级别: 版主

状态: 连续签到 - [443天]
UID: 102233
精华: 0
发帖: 2407
可可豆: 4023 CB
威望: 4414 点
在线时间: 3404(时)
注册时间: 2011-11-06
最后登录: 2019-03-23
2 楼:  发表于: 2013-12-27 10:13    发自: Web Page
友情帮顶 ~
级别: 版主

状态: 连续签到 - [392天]
UID: 152587
精华: 0
发帖: 2037
可可豆: 5057 CB
威望: 4403 点
在线时间: 1408(时)
注册时间: 2012-07-05
最后登录: 2018-03-30
3 楼:  发表于: 2013-12-27 10:15    发自: Web Page
点赞。
努力成为一枚合格的Coder.
级别: 精灵王

状态: 连续签到 - [341天]
UID: 4020
精华: 0
发帖: 437
可可豆: 24891 CB
威望: 25992 点
在线时间: 3388(时)
注册时间: 2009-04-02
最后登录: 2018-08-21
4 楼:  发表于: 2013-12-27 10:38    发自: Web Page
先顶一个,我也去找代码去
一直在努力,一直都觉得努力得还不够~~
www.etware.com
级别: 新手上路
UID: 29924
精华: 0
发帖: 41
可可豆: 342 CB
威望: 342 点
在线时间: 508(时)
注册时间: 2010-09-07
最后登录: 2018-12-28
5 楼:  发表于: 2013-12-27 12:19    发自: Web Page
顶  超级无敌赞
级别: 新手上路
状态: 连续签到 - [1天]
UID: 236122
精华: 0
发帖: 22
可可豆: 54 CB
威望: 36 点
在线时间: 181(时)
注册时间: 2013-08-06
最后登录: 2018-11-26
6 楼:  发表于: 2013-12-27 12:27    发自: Web Page
good good study,day day up!
级别: 精灵王

状态: 连续签到 - [106天]
UID: 41480
精华: 0
发帖: 2386
可可豆: 3103 CB
威望: 3551 点
在线时间: 1618(时)
注册时间: 2010-12-07
最后登录: 2019-03-22
7 楼:  发表于: 2013-12-27 12:28    发自: Web Page
顶贴中…..








推荐一个预定义,NSNotFound
级别: 圣骑士

状态: 连续签到 - [268天]
UID: 48361
精华: 8
发帖: 388
可可豆: 1845 CB
威望: 1581 点
在线时间: 3037(时)
注册时间: 2011-01-25
最后登录: 2017-05-26
8 楼:  发表于: 2013-12-27 13:49    发自: Web Page
Mark, 留用了。
!!!!!!!
级别: 侠客
UID: 128655
精华: 0
发帖: 103
可可豆: 123 CB
威望: 122 点
在线时间: 146(时)
注册时间: 2012-03-08
最后登录: 2017-11-22
9 楼:  发表于: 2013-12-27 14:12    发自: Web Page
支持一下楼主

CocoaChina社区转载内容已尽可能注明出处,如未能核实来源或转发内容图片有权利瑕疵的,请及时联系社区进行修改或删除【联系方式QQ : 3442093904 邮箱:support@cocoachina.com】文章内容为作者独立观点,不代表CocoaChina社区立场。版权归原作者所有,如申请授权请联系作者,因文章侵权CocoaChina社区不承担任何法律及连带责任。

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部