子数组求和问题(python)+贝叶斯

连续子数组和最大,返回子数组的开始和结束的索引

例如: a = [6,-3,-2,7,-15,1,2,2],a[0:3]的和最大为8,返回(0,3)

思路:首先,因为求和最大的连续子数组,所以子数组的第一个值不能为负;其次。如果,前面累加的和sum加上当前数值之后的和小于sum,说明当前数值不能取,如果大于或等于sum则可以继续进行。

步骤:

定义两个变量,和的最大值maxSum, 累加和sum
从S的第一个数值开始累加,如果maxSum < sum,则更新maxSum,如果sum≤0,则丢弃前面的子序列,从下一个数值重新开始累加,否则继续。
代码解析:保存求得和最大时的结束索引end,同时记录加数的个数count,如果出现之前的累加和小于0的情况,则重置count为0,继续向后加,只有当前面的累加和大于已保存的最大值时,更新end,同时更新start(end-count)

def findMaxSum(lists):
    maxSum, preSum = 0, 0
    length = len(lists)
    for i in range(0, length):
        if(preSum <= 0):
            preSum = lists[i]
            count = 0
        else:
            preSum += lists[i]
            count += 1
        if(maxSum < preSum):
            maxSum = preSum
            end = i + 1
            start = i -count
            
    return (maxSum, start, end, lists[start:end])     

给定一个增序正数数组S,找出其所有子数组中和满足和为指定值target的一种情况,返回其开始和结束的索引

思路:假设数组S = [a1,a2, a3, a4, a5, a6], 且a1 < a2 < a3 < a4 < a4 < a5 < a6

Sumlists
Sum1S[a1]
Sum2S[a1:a2]
Sum3S[a1:a3]
Sum4S[a1:a4]
Sum5S[a1:a5]
Sum6S[a1:a6]

注意:在求和过程中,只有单独的数字小于target时才进行

通过Sum之间的差运算即可求得S的任意子数组的和,将上述Sum存放在python的字典中,用于查找,另外讲和同时存放于一个list中,用于与给定的值target做减运算,从后往前遍历sum,用Sum-target,检查差值是否存在于字典中,如果存在则找到子数组,则返回下标,此时注意下标会比S中的下标小1,固得各加1.

def findIdx(lists, target):
    length = len(lists)
    preSum = 0
    sumLists = []
    d = {}  
    for i in range(length):
        if(target > lists[i]):
            preSum += lists[i]  #关键突破口
            if(preSum not in d):
                d[preSum] = i
                sumLists.append(preSum)
                print('sum', i, preSum)
                
    for j in sumLists[::-1]:
        rest = j - target
        print('rest1', rest, j, d[j])
        if(rest in d):
            start = d[rest]+1
            end = d[j]+1
            return start, end, lists[start:end]
    
    return False

已知:小明迟到的概率是0.4, 迟到情况下被批评的概率是0.7,没有迟到但是仍被批评的概率是0.2. 问:小明被批评时,迟到的概率

贝叶斯公式:

P(A|B) = P(AB)/P(B)
P(A∣B)=P(AB)/P(B)
解设:事件A为迟到,事件B为被批评

在这里插入图片描述

Hessian Matrix

黑塞矩阵(Hessian Matrix),又译作海森矩阵、海瑟矩阵、海塞矩阵等,是一个多元函数的二阶偏导数构成的方阵,描述了函数的局部曲率。黑塞矩阵最早于19世纪由德国数学家Ludwig OttoHesse提出,并以其名字命名。黑塞矩阵常用于牛顿法解决优化问题

性质:

对称性:如果函数f在D区域内二阶可导,那么f黑塞矩阵H(f)在D内为对称矩阵。原因是:如果函数f的二阶偏导连续,则二阶偏导数的求导顺序没有区别

多元函数极值判定:如果实值多元函数f(x1, x2,…, xn)二阶连续可到,并且在临界点X(xi)(其中i=1, 2, …, n,并且xi已知)处梯度(一阶可导) 等于0,, M为驻点。仅通过一阶可导数无法判断在临界点M处是极大值还是极小值。 记f在M点处的黑塞矩阵H(M),由于f在M处连续,所以H(M)是对称矩阵,对于H(M),有如下结论:

如果H(M)是正定矩阵,则临界点M处是局部极小值

如果H(M)是负定矩阵,则临界点M处是局部极大值

如果H(M)是不定矩阵,则临界点M处没有极值

在图像处理中的应用: 结合牛顿法(1求根,2最优化)进行图像特征提取

对每个像素点计算图像在X方向Y方向的二阶偏导数,计算图像的XY方向的导数
根据第一步的计算结果,有Hessian Matrix计算D(h) = IxxIyy - IxyIxy
根据第二步计算出来的值使用3×3窗口实现非最大信号压制
在不断训练过程中,验证集和训练集的损失差距不断增大,验证集损失增加,训练集损失减小,并且从刚开始训练验证集和训练集就开始偏离,为什么?(过拟合产生的原因和预防)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值