算法题 - 贷款违约K笔的概率 - Python3实现

这是一道关于贷款违约概率的面试题,每笔贷款违约概率为p,使用动态规划求解恰好K笔贷款违约的概率。递推公式为:P(n, k) = p * P(n-1, k-1) + (1-p) * P(n-1, k),边界条件需单独处理。给出了O(kn)时间复杂度,O(k+1)空间复杂度的Python实现。" 20840189,1379942,ACM简单题:Just a Numble算法解析,"['ACM算法', '数学运算', '大数处理']
摘要由CSDN通过智能技术生成

问题描述:
有N笔贷款,每笔贷款违约的概率为 [p1、p2、p3 ... ... pn],求恰好有K笔贷款违约的概率。

问题分析:
这是研究生学长在今日头条校招遇到的面试题,想了两天才想清楚是怎么回事,本题用动态规划来做。

以下是学长给出的思路和问题分析:

现在直接给出递推方程式,然后再去解读:


*dp[k][n] = dp[k][n−1]∗(1−pn) + dp[k−1][n−1]∗pn*

dp[k][n] 表示,有n笔贷款时,恰好有k次违约的概率,这个值怎么求那?可以从子问题入手,要想得到这个值,不难发现有两个方向:

(1)dp[k][n-1]表示有n-1笔贷款时,恰好有k次违约的概率,现在已经恰好k次了,那么新来的那个贷款pn没有违约就可以继续保持k次了,所以是:

* dp[k][n−1] ∗ (1−pn) 

(2)dp[k-1][n-1]表示有n-1笔贷款时,恰好有k-1次违约的概率,现在是恰好k-1次,那么新来的那个贷款pn违约了,不就是k次了吗,所以是:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值