自己写暴力匹配
一段文本 abababcababcabababc(19 个字符,下标从 0 起)和一个模式 ababc。 补全 brute_find,输出全部出现位置,用 / 连起来。 (本题用 g++ -std=c++17 -O0 编译。)
比较次数和回退格数一起数
一段文本 abababcababcabababc(19 个字符,下标从 0 起)和一个模式 ababc。 一次输出三个数:比较次数、回退次数、一共退了多少格。 (本题用 g++ -std=c++17 -O0 编译。)
字符串哈希是拿来干什么的
第 1 步:每 3 个字折成 0~6 的一个数 第 2 步:窗口 0 折出 4 第 3 步:窗口 1 折出 1 第 4 步:窗口 2 折出 1 第 5 步:窗口 3 折出 0 第 6 步:窗口 4 折出 4 第 7 步:窗口 5 折出 4
滚动哈希省掉的是什么(C++)
窗口往右挪一格时,滚动哈希不用重算,因为它【0】。
哈希值一样能直接判定匹配吗
某个窗口的哈希值和模式的一样。这时候【0】。
模式折出来是多少
把一段字符折成一个数:h = (h × 31 + 字母序号) % 17,a 记 1、b 记 2、c 记 3。 运行下面这段程序: #include <iostream> #include <string> #incl
只比哈希会挑出几个位置
把一段字符折成一个数:h = (h × 31 + 字母序号) % 17,a 记 1、b 记 2、c 记 3。 只比哈希值、不做逐字符确认,数一数会挑出多少个位置: #include <iostream> #include <
把每个窗口的哈希算出来
把一段字符折成一个数:h = (h × 31 + 字母序号) % 17,a 记 1、b 记 2、c 记 3。 补全 roll_all,输出哈希值和模式相同的那些位置。 (本题用 g++ -std=c++17 -O0 编译。)
加上确认这一步五个变三个
把一段字符折成一个数:h = (h × 31 + 字母序号) % 17,a 记 1、b 记 2、c 记 3。 补上逐字符确认那一步,输出「只比哈希挑出几个」和「确认之后剩几个」。 (本题用 g++ -std=c++17 -O0 编译。)
把假阳性揪出来
把一段字符折成一个数:h = (h × 31 + 字母序号) % 17,a 记 1、b 记 2、c 记 3。 找出那些哈希对上了、字符却不一样的位置,用 / 连起来输出。 (本题用 g++ -std=c++17 -O0 编译。)