算法设计与分析第二章作业

题目:
在这里插入图片描述

AC代码:

#include<bits/stdc++.h>
using namespace std;
int a[100010],s[100010];
//分治
int solve(int l,int r){
    if(l==r){
        if(a[l]<0)return 0;
        return a[l];
    }
    int mid=(l+r)/2;
    int sl=solve(l,mid),sr=solve(mid+1,r);
    //向左
    int s1=0,t=0;
    for(int i=mid;i>=l;i--){
        t+=a[i];
        s1=max(t,s1);
    }
    //向右
    int s2=0;t=0;
    for(int i=mid+1;i<=r;i++){
        t+=a[i];
        s2=max(t,s2);
    }
    int sm=s1+s2;
    return max(sm,max(sl,sr));
}
int main(){
    int n;
    cin>>n;
    bool f=1;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        // if(a[i]>=0){
        //     f=0;
        // }
    }
    cout<<solve(1,n);
    // int ma=-1,now=0;
    // for(int i=1;i<=n;i++){
    //     if(now+a[i]>0){
    //         now+=a[i];
    //         ma=max(ma,now);
    //     }else{
    //         now=0;
    //     }
    // }
    // if(f){
    //     cout<<0;
    // }else{
    //     cout<<ma;
    // }
    return 0;
}

作业:

1. 请以伪代码描述最大子段和的分治算法

//数组的最大子段和有三种可能:
//1.与左半部分的最大子段和相同,为sl
//2.与右半部分的最大子段和相同,为sr
//3.最大子段和跨越了两部分,为sm=s1+s2,s1和s2分别为从中间开始向左右两边计算最大子段和
int solve(int l,int r){
    //递归终止条件
    if(l==r){
        //最小子问题,l==r,此时若该数>0则返回改数,否则返回0
    }
    //将数组从中间(mid=(l+r)/2)切开,分为a[1:mid]和a[mid+1:n],递归调用solve得到sl和sr,分别代表左边和右边的最大子段和
    for(int i=mid;i>=l;i--){
        //从中间向左累计s1,得最大值
    }
    for(int i=mid+1;i<=r;i++){
        //从中间向右累计s2,得最大值
    }
    return //三种情况的最大值
}

2. 分析该算法的时间复杂度

由公式及以下分析:

1.划分:时间复杂度为O(1);

2.求解子问题:每次将问题规模为n的数组划分成2个规模为n/2的子问题,分别对这两个子数组进行递归操作,时间复杂度为2T(n/2);

3.合并:对两个子数组进行合并,时间复杂度为O(n);

得:

T(n) = O(1) n<=1;

​ 2T(n/2) + O(n) n>1;

得该算法的时间复杂度为O(nlogn)。

3. 结合本章的学习,你对分治法的体会和思考

分治法就是 **将大问题分解成小问题,再从小问题入手,分而治之,最后再合并子问题的解 **的一种基本的算法思想0

分治法的三个基本步骤:

1、分解子问题

2、求解子问题(递归调用)

3、合并子问题的解

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。
《知到app算法设计分析》是一本讲述算法设计分析的教材。通过阅读这本教材,我们可以了解到算法设计的基本概念、算法的分类、算法分析的方法以及常见的数据结构和算法问题。 在第二章中,主要介绍了算法的基本概念和算法分析的方法。首先,算法的定义是一组完成特定任务的有限步骤集合。算法要具备以下特点:明确性、有限性、确定性和有效性。然后,根据算法的执行顺序,可以将算法分为序列、选择和循环结构。序列结构是指算法按照一定顺序执行,选择结构是根据条件选择执行不同的代码块,循环结构是重复执行某段代码。 接下来,教材介绍了算法分析的方法。算法分析主要用于评估和比较不同算法的性能。常见的算法分析方法包括时间复杂度和空间复杂度。时间复杂度表示算法执行所需的时间,可以通过估计算法中基本操作的执行次数来进行评估。空间复杂度表示算法执行所需的额外存储空间,也可以通过估计变量和数据结构的存储量来进行评估。我们通常关注算法的最坏情况时间复杂度,即算法在最差情况下执行所需的时间。 此外,第二章还介绍了算法思维和算法设计的一些基本原则。算法思维是指通过分析问题、抽象问题和抽象解决方法来解决问题的能力。而算法设计的基本原则包括自顶向下的设计、递归和迭代的设计、模块化设计算法的优化等。 总之,第二章主要介绍了算法的基本概念、算法分析的方法以及算法设计的一些基本原则。通过阅读和理解这些内容,我们可以更好地了解和应用算法设计分析的知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值