首页 > 试题广场 >

二分搜索算法的执行过程可以用一个()来描述。

[单选题]
二分搜索算法的执行过程可以用一个()来描述。
  • 哈夫曼树
  • 二叉判定树
  • 堆栈
  • 队列

各算法核心原理拆解

字符串匹配的核心目标是:在 “主串” 中快速找到与 “模式串” 完全一致的子串。不同算法的关键差异在于 “如何比较子串与模式串”,而是否使用哈希是核心区分点。

1. 选项 A:BF 算法(暴力匹配算法)

  • 核心逻辑:最朴素的匹配方式,无任何优化。
    从主串的第 1 个字符开始,将 “主串当前起始位置的子串” 与 “模式串” 逐字符对比;若不匹配,主串起始位置后移 1 位,重复上述过程,直到匹配或遍历结束。
  • 是否用哈希:否。全程通过 “逐字符比较” 判断子串与模式串是否一致,无哈希计算步骤。

2. 选项 B:BM 算法(Boyer-Moore 算法)

  • 核心逻辑:通过 “坏字符规则” 和 “好后缀规则”,大幅减少主串的回溯次数(主串指针通常只前进不后退),提升效率。
    • 坏字符规则:从模式串末尾向前比较,若遇到 “不匹配的字符(坏字符)”,根据坏字符在模式串中的位置,计算主串指针需前进的步数;
    • 好后缀规则:若已匹配部分存在 “好后缀”(即已匹配的子串在模式串其他位置也存在),则利用该规则进一步优化前进步数。
  • 是否用哈希:否。依赖字符位置查表(坏字符表、好后缀表)和字符直接比较,无哈希参与。

3. 选项 C:KMP 算法(Knuth-Morris-Pratt 算法)

  • 核心逻辑:通过预处理模式串,构建 “部分匹配表(PMT,或 next 数组)”,避免主串指针回溯,仅回溯模式串指针。
    部分匹配表记录了 “模式串中每个位置的前缀与后缀的最长公共子串长度”,当匹配失败时,可通过该表快速确定模式串应回溯到的位置,减少无效比较。
  • 是否用哈希:否。依赖前缀后缀的公共子串分析(构建 next 数组)和字符直接比较,无哈希计算。

4. 选项 D:RK 算法(Rabin-Karp 算法)

  • 核心逻辑借助哈希算法,将 “字符串比较” 转化为 “哈希值比较”,是典型的 “用空间换时间” 思路。
    步骤如下:
    1. 计算 “模式串的哈希值”(记为hash_p);
    2. 计算 “主串中所有长度等于模式串的子串的哈希值”(利用 “滚动哈希” 优化,避免重复计算,比如将字符串视为 base 进制数,子串哈希值可由前一个子串哈希值推导得出);
    3. 对比 “子串哈希值” 与 “模式串哈希值”:若哈希值不同,直接排除;若哈希值相同,再逐字符验证(避免哈希冲突导致误判)。
  • 是否用哈希:是。哈希计算是该算法的核心步骤,通过哈希值快速筛选候选子串,大幅减少逐字符比较的次数。
发表于 2025-09-04 20:30:45 回复(0)