对链表进行插入排序( 二 )


是一个专业的小偷,计划偷窃沿街的房屋 。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。
给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下,一夜之内能够偷窃到的最高金额 。
示例 1:
输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3) 。偷窃到的最高金额 = 1 + 3 = 4。
示例 2:
输入:[2,7,9,3,1]输出:12解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1) 。偷窃到的最高金额 = 2 + 9 + 1 = 12。
提示:
任务:
找到一串序列,使得其金额最大化,要求序列中的元素不相邻
对于某个房子,有两种可能:偷和不偷
1、偷 。意味着他的前一个房子不能被偷,此时的最大金额是,不偷前一个房子的最大金额加上他自己本身 。
2、不偷 。意味着他的前一个房子可以被偷或者不被偷 。此时的最大金额是,前一个房子的能承受的最大金额
所以考虑到这些,可以使用动态规划的方法 。
维护一个数组dp 。dp[i]表示,前i个房子能偷到的最大金额 。
对于dp[i]来说,有两种选择:偷和不偷 。
偷:dp[i-2]+nums[i] 不偷:dp[i-1] 选择两者最大值就好了
边界条件为:
i==1时,只有一间房子,必然偷 dp[0]=nums[0]
i==2时,只有两间房子,选择最贵的一间偷 max(nums[0],nums[1])
class Solution:def rob(self, nums: List[int]) -> int:if not nums:return 0n = len(nums) #有几间房屋if n==1:return nums[0]dp = [0]*ndp[0]=nums[0]dp[1]=max(nums[0],nums[1])for i in range(2,n):dp[i]=max(dp[i-2]+nums[i],dp[i-1])return dp[n-1]
李沐深度学习笔记

对链表进行插入排序

文章插图
函数将线性模型输出的实数域映射到[0, 1]表示概率分布的有效实数空间
=多标签分类问题=多个正确答案=非独占输出(例如胸部X光检查、住院) 。构建分类器,解决有多个正确答案的问题时,用函数分别处理各个原始输出值 。
函数是一种函数,它将任意的值转换到[0,1]之间 。
=多类别分类问题=只有一个正确答案=互斥输出(例如手写数字,鸢尾花) 。构建分类器,解决只有唯一正确答案的问题时,用函数处理各个原始输出值 。函数的分母综合了原始输出值的所有因素,这意味着,函数得到的不同概率之间相互关联 。
函数是二分类函数在多分类上的推广,目的是将多分类的结果以概率的形式展现出来 。如图2所示,直白来说就是将原来输出是3,1,-3通过函数一作用,就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标 。
的含义就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性 。
引入指数函数:指数函数的曲线斜率逐渐增大虽然能够将输出值拉开距离,但是也带来了缺点,当输出值非常大的话,计算得到的数值也会变的非常大,数值可能会溢出 。
逻辑回归:两分类问题,是单一输出的回归,只输出1(有时候是-1),那么剩下的就是n-(1的个数),他是回归的一个特例 。
为什么不在函数中除以len?
在读batch的时候,最后一批的样本很有可能是缺斤少两的(=100,但最后一批只有20个样本) 。此时,除以len(y)是除以20,之前都是除以100的 。所以,应该要得到所有正负例之后,再除以总数 。