使用OC写算法之BF算法

作者: 再见远洋 | 来源:发表于2017-07-28 18:43 被阅读32次
BF算法简介

BF算法是Brute Force算法的简称(如果你发挥你得想象 你也可以称之为Boy Friend算法),BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。正是因为这种蛮干的比较,也被称为蛮干算法

BF算法代码实现方式1
#pragma  mark -  暴力的BF算法
#pragma  mark -

/**
 传入一个主串和字串 匹配是否能匹配成功

 @param source 主串
 @param target 字串
 @return 成功返回主串中开始索引 失败返回-1
 */
- (int)bruteForce1WithSource:(NSString *)source target:(NSString *)target {
    //主串遍历
    for (int i = 0; i < source.length; i++) {
        //目标字符串遍历
        for (int j = 0; j < target.length; j++) {
            //关键在于这句 从主串中取值 当i确定时 需要加上j来往后挪动位置 不相等就直接break
            if ([source characterAtIndex:i + j] != [target characterAtIndex:j]) {
                break;
            }
            //当索引到了字符串最后一个字符时就证明匹配成功
            if (j == target.length -1) {
                return i;
            }
        }
    }
    return -1;
}

BF算法代码实现方式2

一般来说我们都用这种方式来实现,因为上面这种有些人可能不是很能接受

/**
 暴力匹配字符解法2

 @param source 原字符串
 @param target 匹配字符串
 @return 成功返回索引 失败返回-1
 */
- (int)bruteForce2WithSource:(NSString *)source target:(NSString *)target {
    //主串索引
    int i = 0;
    //字串索引
    int j = 0;
    while (i < source.length && j < target.length) {
        //依次来一个一个对比
        if ([source characterAtIndex:i] == [target characterAtIndex:j]) {
            i++;
            j++;
        }else {//索引回溯 i的索引变化为下一个也就是 (i- j +1)而j = 0从头开始
            i = i - j + 1;
            j = 0;
        }
    }
    
    //到这一步 判断如果j == 字符串长度证明匹配成功
    if (j == target.length ) {
        return i - j;
    }
    return -1;
}

BF存在的问题和下篇预告

很明显我们可以看到BF算法是存在很大缺陷的,因为有些情况我们根本不需要从头来开始去匹配 例如:

image.png

很明显我们下一次匹配的位置应该是下图这样:

image.png

而不是从B开始 ,大牛们是无法忍受“暴力破解”这种低效的手段的,于是就有三个大牛一起研究出了我下篇文章要讲的KMP算法,so,下篇文章见。

相关文章

  • 使用OC写算法之BF算法

    BF算法简介 BF算法是Brute Force算法的简称(如果你发挥你得想象 你也可以称之为Boy Friend算...

  • 使用OC写算法之KMP算法

    序言 当简友们看到这篇文章的时候,我默认大家都已经了解过BF算法了,如果有对BF算法不了解的,建议可以先看下我上一...

  • 字符串匹配算法--BF算法与RK算法

    BF算法 BF算法中的BF是brute force的缩写,中文叫做暴力匹配算法,也加朴素匹配算法。算法特点:“暴力...

  • 记录数据结构与算法的学习之路 -----005.BF算法与RK算

    1.BF算法 1.1 定义 BF算法,即暴风算法,也有人称为朴素算法、暴力算法。BF算法是一种做字符串匹配的算法。...

  • 字符串匹配基础

    BF算法 BF 算法中的 BF 是 Brute Force 的缩写,中文叫作暴力匹配算法,也叫朴素匹配算法。 我们...

  • 【算法笔记】字符串匹配

    1 BF算法 BF 算法中的 BF 是 Brute Force 的缩写,中文叫作暴力匹配算法,也叫朴素匹配算法:...

  • 四种字符串匹配算法

    BF 算法 BF 算法中的 BF 是 Brute Force 的缩写,中文叫作暴力匹配算法,也叫朴素匹配算法。这种...

  • 字符串匹配

    BF 算法和 RK 算法BM 算法和 KMP 算法

  • 14.字符串匹配算法

    1.BF算法 1.1 定义 BF(Brute Force)算法,中文叫作暴力匹配算法,也叫朴素匹配算法。思想:在主...

  • 字符串匹配

    indexOf 底层就是使用字符串匹配算法 字符串匹配算法很多 BF( Brute Force)算法 暴力匹配算...

网友评论

    本文标题:使用OC写算法之BF算法

    本文链接:https://www.haomeiwen.com/subject/wduflxtx.html