#z61. 动态规划-最长公共子序列(LCS)

动态规划-最长公共子序列(LCS)

[题目描述]

{{ 动态规划解决 LCS 问题的核心思想是: }} {{ select(1) }}

  • [选项1] 暴力枚举所有可能序列
  • [选项2] 递归求解不存储中间结果
  • [选项3] 利用子问题重叠性,存储中间结果
  • [选项4] 随机猜测最优解

[题目描述]

{{ 定义二维数组dp[m+1][n+1]存储 LCS 长度时,dp[i][j]表示: }} {{ select(2) }}

  • [选项1] 前 i 个和前 j 个字符的 LCS 长度(下标从 0 开始)
  • [选项2] 前 i 个和前 j 个字符的 LCS 长度(下标从 1 开始)
  • [选项3] 第 i 个和第 j 个字符是否相等
  • [选项4] 最长公共子串的长度

[题目描述]

{{ 以下哪段代码正确实现了 LCS 的状态转移方程? }} {{ select(3) }}

  • [选项1]
if (s1[i-1] == s2[j-1])  
    dp[i][j] = dp[i-1][j-1] + 1;  
else  
    dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
  • [选项2]
if (s1[i] == s2[j])  
    dp[i][j] = dp[i-1][j-1] + 1;  
else  
    dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
  • [选项3]
if (s1[i-1] == s2[j-1])  
    dp[i][j] = dp[i-1][j] + 1;  
else  
    dp[i][j] = dp[i-1][j-1];
  • [选项4]
if (s1[i] == s2[j])  
    dp[i][j] = dp[i][j-1] + 1;  
else  
    dp[i][j] = max(dp[i-1][j], dp[i][j-1]);

[题目描述]

{{ 计算字符串 "ABCBDAB" 和 "BDCABA" 的 LCS 长度,结果是: }} {{ select(4) }}

  • [选项1] 3
  • [选项2] 4
  • [选项3] 5
  • [选项4] 6

[题目描述]

{{ 若 LCS 问题中两个字符串长度分别为 m 和 n,动态规划解法的时间复杂度是: }} {{ select(5) }}

  • [选项1] O(m+n)
  • [选项2] O(m*n)
  • [选项3] O(2^(m+n))
  • [选项4] O(m^n)

[题目描述]

{{ 递归求解 LCS 时未使用记忆化会导致: }} {{ select(6) }}

  • [选项1] 结果错误
  • [选项2] 大量重复计算
  • [选项3] 空间复杂度降低
  • [选项4] 时间复杂度变为多项式级

[题目描述]

{{ 以下哪种数据结构最适合存储 LCS 中间结果? }} {{ select(7) }}

  • [选项1] 一维数组
  • [选项2] 二维数组
  • [选项3] 栈
  • [选项4] 哈希表

[题目描述]

{{ 动态规划求解 LCS 时,初始化dp[0][j]和dp[i][0]的值为: }} {{ select(8) }}

  • [选项1] 随机值
  • [选项2] 1
  • [选项3] 0
  • [选项4] 字符串长度

[题目描述]

{{ 判断:LCS 问题中,子序列必须连续出现。 }} {{ select(9) }}

  • [选项1] A正确
  • [选项2] B错误

[题目描述]

{{ 判断:动态规划解法一定比递归解法效率高。 }} {{ select(10) }}

  • [选项1] A正确
  • [选项2] B错误

[题目描述]

{{ 判断:若两个字符串没有公共字符,LCS 长度为 0。 }} {{ select(11) }}

  • [选项1] A正确
  • [选项2] B错误

[题目描述]

{{ 判断:计算 LCS 时,dp[m][n]即为最终结果,其中 m 和 n 是字符串长度。 }} {{ select(12) }}

  • [选项1] A正确
  • [选项2] B错误