算法设计与分析第二章作业_计科2201徐彬

0zxm 2022级 2023-10-27 21:14:38
#include <iostream>  
#include <algorithm>  
using namespace std;

int maxCrossingSubArray(int arr[], int left, int mid, int right);
int maxSubArray(int arr[], int left, int right) {
    if (left == right) {
        return arr[left];
    }

    int mid = left + (right - left) / 2;

    int leftMax = maxSubArray(arr, left, mid);
    int rightMax = maxSubArray(arr, mid + 1, right);
    int crossMax = maxCrossingSubArray(arr, left, mid, right);

    return max(max(leftMax, rightMax), crossMax);
}

int maxCrossingSubArray(int arr[], int left, int mid, int right) {
    int leftSum = INT_MIN;
    int sum = 0;
    for (int i = mid; i >= left; i--) {
        sum += arr[i];
        leftSum = max(leftSum, sum);
    }

    int rightSum = INT_MIN;
    sum = 0;
    for (int i = mid + 1; i <= right; i++) {
        sum += arr[i];
        rightSum = max(rightSum, sum);
    }

    // 计算交叉和的最大值  
    int crossSum = leftSum + rightSum;
    return crossSum;
}
int main() {
    int n;
    cin >> n;
    int* nums = new int[n];
    for (int i = 0; i < n; i++) {
        cin >> nums[i];
    }

    int result = maxSubArray(nums, 0, n - 1); // 调用maxSubArray函数求解最大子段和  
    cout << result << endl;
    delete[] nums; // 释放内存空间,防止内存泄漏问题出现。
}

时间复杂度分析

该算法不断二分子问题,直到子问题可直接求解,主定理求解,

在每一次递归中,问题的规模缩小为原来的一半,需要线性时间O(n)来计算子问题的最大子数组和和交叉子数组和,划分子问题O(1)

因此,我们可以得出递归式:T(n) = 2T(n/2) + O(n) + O(1)  = O(nlogn)

 

思考与体会

分治法的思想就是不断划分子问题,把问题变简单,直到足够简单能直接求解为止,在一层一层倒推回去原问题的解,在日常生活中,也可以用这种思想,把目前棘手的事分成几个小任务,一个个完成.

...全文
33 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文提出了一种基于快速稀疏辅助信号分解与非凸增强技术的轴承故障诊断方法,并提供了完整的Matlab代码实现。该方法旨在从复杂的机械设备振动信号中高效、准确地提取故障特征,通过优化信号分解过程克服传统方法在噪声干扰下敏感、分辨率不足的问题,结合非凸优化策略增强微弱故障信号的辨识能力,从而提升早期故障诊断的准确性与鲁棒性。研究涵盖了算法原理、模型构建、仿真验证及结果分析,展示了其在旋转机械状态监测中的实际应用价值。; 适合人群:具备一定信号处理基础和Matlab编程能力,从事机械故障诊断、状态监测、智能运维等相关领域的科研人员及工程技术人员,尤其适合研究生和从事相关项目研发的工程师。; 使用场景及目标:①应用于旋转机械(如电机、风机、齿轮箱)的轴承早期故障检测;②用于复杂噪声环境下微弱故障信号的提取与增强;③为开发高精度智能诊断系统提供算法支持和技术参考;④辅助完成科研论文复现、毕业课题或工业项目开发。; 阅读建议:此资源以算法实现为核心,强调理论与实践结合,建议读者在学习过程中同步运行Matlab代码,深入理解信号分解与优化增强的每一步处理逻辑,并尝试在不同数据集上进行测试与调参,以掌握算法的适应性与优化技巧。

434

社区成员

发帖
与我相关
我的任务
社区描述
广东外语外贸大学信息科学与技术学院
算法 高校
社区管理员
  • brisksea
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧