首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
二分搜索算法的执行过程可以用一个()来描述。
[单选题]
二分搜索算法的执行过程可以用一个()来描述。
哈夫曼树
二叉判定树
堆栈
队列
查看正确选项
添加笔记
求解答(0)
邀请回答
收藏(9)
分享
纠错
1个回答
添加回答
0
coconut___
各算法核心原理拆解
字符串匹配的核心目标是:在 “主串” 中快速找到与 “模式串” 完全一致的子串。不同算法的关键差异在于 “如何比较子串与模式串”,而是否使用哈希是核心区分点。
1. 选项 A:BF 算法(暴力匹配算法)
核心逻辑
:最朴素的匹配方式,无任何优化。
从主串的第 1 个字符开始,将 “主串当前起始位置的子串” 与 “模式串” 逐字符对比;若不匹配,主串起始位置后移 1 位,重复上述过程,直到匹配或遍历结束。
是否用哈希
:否。全程通过 “逐字符比较” 判断子串与模式串是否一致,无哈希计算步骤。
2. 选项 B:BM 算法(Boyer-Moore 算法)
核心逻辑
:通过 “坏字符规则” 和 “好后缀规则”,大幅减少主串的回溯次数(主串指针通常只前进不后退),提升效率。
坏字符规则:从模式串末尾向前比较,若遇到 “不匹配的字符(坏字符)”,根据坏字符在模式串中的位置,计算主串指针需前进的步数;
好后缀规则:若已匹配部分存在 “好后缀”(即已匹配的子串在模式串其他位置也存在),则利用该规则进一步优化前进步数。
是否用哈希
:否。依赖字符位置查表(坏字符表、好后缀表)和字符直接比较,无哈希参与。
3. 选项 C:KMP 算法(Knuth-Morris-Pratt 算法)
核心逻辑
:通过预处理模式串,构建 “部分匹配表(PMT,或 next 数组)”,避免主串指针回溯,仅回溯模式串指针。
部分匹配表记录了 “模式串中每个位置的前缀与后缀的最长公共子串长度”,当匹配失败时,可通过该表快速确定模式串应回溯到的位置,减少无效比较。
是否用哈希
:否。依赖前缀后缀的公共子串分析(构建 next 数组)和字符直接比较,无哈希计算。
4. 选项 D:RK 算法(Rabin-Karp 算法)
核心逻辑
:
借助哈希算法,将 “字符串比较” 转化为 “哈希值比较”
,是典型的 “用空间换时间” 思路。
步骤如下:
计算 “模式串的哈希值”(记为hash_p);
计算 “主串中所有长度等于模式串的子串的哈希值”(利用 “滚动哈希” 优化,避免重复计算,比如将字符串视为 base 进制数,子串哈希值可由前一个子串哈希值推导得出);
对比 “子串哈希值” 与 “模式串哈希值”:若哈希值不同,直接排除;若哈希值相同,再逐字符验证(避免哈希冲突导致误判)。
是否用哈希
:是。哈希计算是该算法的核心步骤,通过哈希值快速筛选候选子串,大幅减少逐字符比较的次数。
发表于 2025-09-04 20:30:45
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
树
难度:
1条回答
9收藏
72浏览
热门推荐
相关试题
请问在当前模块(无其它内容)执行以...
Javascript
评论
(1)
执行下列选项代码,结果输出Fals...
Python
评论
(1)
小美的序列问题
数组
前缀和
评论
(1)
白色:黑色( )
类比推理
评论
(2)
从所给的四个选项中,选择最合适的一...
图形推理
评论
(5)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题