算法导论习题解答Chapter4(学习笔记)

4.1-1:

当数组A的元素均为负数时, FIND_MAXIMUM_SUBARRAY返回整个数组中最大的那个负数,理由如下:

因为递归到底层, 当数组中只有一个元素的时候,开始回升, 最后会回升到数组中有两个值,这两个值就是数组中的前两个值,然后会执行查找只含有这两个数的数组的越过中间的最大子数组, 而此时就是这个数组本身, 最后会比较左、右、越过中间的三个最大子数组的值, 取最大的那个, 因为全为负数, 所以越加越小, 只能是前两个中较大的那个,然后继续回升,重复执行上面的操作,因为在每一次的分解和合并的过程中, 都只选择了几个数中较大的那个,所以当整个数组都比较完成之后,得出的那个最大子数组一定是这个数组中最大的那个负数

 

4.1-2:

伪代码如下:

find_max_subarray(A):
    max_sum=负无穷;  //记录最大子数组的值
    max_left=max_right = 1;  //记录最大子数组的边界
    for low=1 to A.length:  //让low和high来标记最大子数组的边界
        sum=0;          //记录所扫描过的区域的和
        for high=low to A.length:
            sum = sum + A[high];
            if sum > sub_sum:
                max_sum = sum;
                max_left = low;
                max_right = high;
    return (max_left, max_right, max_sum);

4.1-3:

在我的电脑上,这个n值不确定

递归算法和暴力破解结合后可以提高效率

 

4.1-5:

根据练习上的提示, 记录数组A[1, j]中的最大子数组, 当数组扩展为A[1, j+1]时, 要么

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值