算法设计与分析(第2版)清华大学出版社 期末考点

这篇博客详细探讨了算法设计与分析的关键点,包括时间复杂度计算、KMP算法的不同实现、折半查找、回溯法解决图着色问题、分支限界法在多段图最短路径的应用,以及最大子数组和问题的多种解决方案,如暴力求解、分治和动态规划。
摘要由CSDN通过智能技术生成

一、时间复杂度计算

f ( n ) = { 1 , n = 1 , f ( n 2 ) + n , n > 1. f(n)= \left\{ \begin{aligned} 1&,&n=1, \\ f\Big(\frac{n}{2}\Big)+n&, &n>1. \\ \end{aligned} \right. f(n)=1f(2n)+n,n=1,n>1.
n > 1 n>1 n>1时,
f ( n ) = f ( n 2 ) + n = f ( n 2 2 ) + n 2 + n = f ( n 2 3 ) + n 2 2 + n 2 + n = ⋅ ⋅ ⋅ = f ( n 2 k ) + n 2 k − 1 + n 2 + ⋅ ⋅ ⋅ + n 2 0 = f ( 1 ) + n ( 1 − 1 / 2 k ) 1 − 1 / 2   ( n = 2 k ) = 2 n − 1 \begin{aligned} f(n) &=f\Big(\frac{n}{2}\Big)+n \\ &=f\Big(\frac{n}{2^2}\Big)+\frac{n}{2}+n \\ &=f\Big(\frac{n}{2^3}\Big)+\frac{n}{2^2}+\frac{n}{2}+n \\ &=\cdot\cdot\cdot \\ &=f\Big(\frac{n}{2^k}\Big)+\frac{n}{2^{k-1}}+\frac{n}{2}+\cdot\cdot\cdot+\frac{n}{2^0} \\ &=f(1)+\frac{n(1-1/2^k)}{1-1/2} \ (n=2^k) \\ &=2n-1 \end{aligned} f(n)=f(2n)+n=f(22n)+2n+n=f(23n)+22n+2n+n==f(2kn)+2k1n+2n++20n=f(1)+11/2n(11/2k) (n=2k)=2n1

二、KMP

  1. BF
int BruteForce(string &A, string &B) // A主串;B:子串
{
   
    int i = 0, j = 0;
    while (j < B.length() && i < A.length())
    {
   
        if (B[j] == A[i])
        {
   
            j++;
            i++;
        }
        else // 不相等,i,j同时移动
        {
   
            j = 0;
            i = i - j + 1;
        }
    }
    if (j == B.length())
    {
   
        return i - j;
    }
    return -1;
}
  1. KMP
void GetNext(string &B, vector<int> &next)
{
   
    next.resize(B.length());
    next[0] = -1;
    int k = -1, j = 0;
    while (j < B.length() - 1)
    {
   
        if (k == -1 || B[k] == B[j])
        {
   
            k++;
            j++;
            next[j] = k;
        }
        else
        {
   
            k = next[k];
        }
    }
}

int KMP(string &A, string &B, vector<int> &next)
{
   
    int i = 0, j = 0;
    while (j < B.length() && i < A.length())
    {
   
        if (B[j] == A[i])
        {
   
            j++;
            i++;
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值