[关闭]
@P2Oileen 2017-08-07T05:05:18.000000Z 字数 1872 阅读 1347

Homework 5

标★的题目为选做题,仅供学有余力的同学尝试,并且评分标准也更严格。请先做完不标★的题目,再尝试做标一个★的题目,再尝试做更多★的题目。

本次作业总分:32+1.6


字符串是啥


语言基础(7.2分)

  1. scanf函数返回值的意义是?读入的变量的数量
  2. printf函数返回值的意义是?输出了多少个变量
  3. sscanf函数返回值的意义是?有多少个变量被赋值了
  4. sprintf函数返回值的意义是?有多少个变量被输出到Stl
  5. strcmp函数返回值的意义是?第二个字符串ascii-第一个字符串ascii
  6. strncmp函数返回值的意义是?长度为n的两个字符串后-前
  7. strstr函数返回值的意义是?第二个串在第一个串中出现的位置的地址
  8. strcpy函数返回值的意义是?第一个串的地址
  9. strncpy函数返回值的意义是?同上,只不过是长度为n的

字符串匹配


哈希(4.1分)

设字符集为小写字母,某个字母对应的整数是其顺序编号加上。例如a对应b对应c对应……

设哈希函数为多项式哈希,乘数为,模数为。例如acc对应

  1. 对于,找出两个字符串,无论为何值,这两个字符串的哈希值都相等。这个故事告诉我们不要用a aaaaaaa
  2. 对于,找出两个字符串,无论为何值,这两个字符串的哈希值都相等。这个故事告诉我们不要用。``
  3. 对于,找出两个哈希值相等的字符串。
  4. 对于,找出两个哈希值相等的字符串。
  5. ★★对于,找出两个哈希值相等的字符串。

概率(11分)

个数,每个数等概率取为范围内的整数。对于以下的取值,估算这个数中存在重复数的概率,只需要选取以下选项中的一个:

A. 几乎不可能(概率小于
B. 极小可能(概率至少为,但小于
C. 较小可能(概率至少为,但小于10%)
D. 可能(概率至少为10%,至多为90%)
E. 较大可能(概率大于90%,但不超过
F. 极大可能(概率大于,但不超过
G. 几乎必然(概率大于

  1. A

★★稍微精确地计算上述概率。计算结果保留5位有效数字。


KMP(5分)

假设要对模式串s进行KMP算法的预处理得到next

s的长度为n,且字符存放于s[1]s[n]的位置。设next[i]表示:小于i的最大的非负整数j,使得s的长度为j的前缀等于s的长度为i的前缀的长度为j的后缀的(如果不存在这样的正整数j,则next[i]为0,因为空串和空串总是相等的)。

下面是一个试图完成这项工作的程序:

  1. char s[MAXN];
  2. int n;
  3. // 假定s和n已经被处理好了
  4. int next[MAXN];
  5. memset(next, 0, sizeof(next));
  6. for(int i = 1; i <= n; i++)
  7. {
  8. int j = next[i - 1];
  9. while(j && s[j + 1] != s[i])
  10. j = next[j];
  11. if(s[j + 1] == s[i])
  12. next[i] = j + 1;
  13. else
  14. next[i] = j;
  15. }
  1. 给出一个输入串,使得这个程序能够正常结束,但是得到了错误的结果。
  2. 给出一个输入串,使得这个程序会死循环。
  3. 改正这个程序。
  4. 简要说明一个正确的处理next数组的程序的时间复杂度为
  5. 简要说明,构建完next数组后,对于某个长度为的待匹配串,KMP算法进行匹配的时间复杂度为(注意,不要只说明,要说明)。

迷思(2分)

举出两个例子,使得不一定使用哈希或KMP等高级算法,只需用暴力算法就能完成字符串匹配。


更多的字符串匹配


Trie与AC算法(4分)

给定下列字符串:


★调查问卷(0.3分)

  1. 你用了多长时间完成今天的作业?
  2. 对于昨天的考试,你的看法如何?
  3. 猜猜看今天下发的带答案的材料有什么用?

Written with StackEdit.

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注