Google Foo-Bar挑战Level3末日燃料:测试用例失败求助
末日燃料问题(Level3)测试用例4-7失败排查方向
核心排查点
吸收态/瞬态划分错误
确认所有终止状态(燃料耗尽的状态)都被正确标记为吸收态,没有将瞬态误判为吸收态,反之亦然。比如状态转移概率全指向自身的才是吸收态,需严格按问题定义校验。矩阵运算逻辑漏洞
马尔可夫链解法的核心是拆分转移矩阵为Q(瞬态间转移)、R(瞬态到吸收态转移),再计算N = (I - Q)^-1、N*R。需检查:- 矩阵行列索引是否完全对应,有没有出现错位或维度不匹配的情况
- 矩阵求逆实现是否正确,浮点数版本的数值稳定性问题(比如极小值处理),Fraction版本的分数运算是否存在约分/计算错误
- 矩阵乘法的实现是否符合线性代数规则,尤其是行列维度的对应关系
边界场景未覆盖
测试用例4-7大概率包含边界情况,需手动构造验证:- 初始状态即为吸收态的场景
- 仅存在单个瞬态的场景
- 部分瞬态无法到达特定吸收态的场景(对应结果应为0)
- 转移概率包含0的极端情况
结果格式化不符合要求
问题要求输出分数形式的分子数组和公共分母,需检查:- 浮点数转分数时的精度丢失(即使改用Fraction,计算过程中是否有误)
- 结果是否按吸收态的正确顺序排列
- 公共分母是否为所有分数的最小公倍数,计算是否正确
手动测试示例
可以用以下简单用例验证代码逻辑:
# 测试用例1:初始瞬态只能转移到一个吸收态 test_case = [[0, 1], [0, 1]] # 预期输出:分子[1],分母1 # 测试用例2:两个瞬态,分别能到达两个吸收态 test_case = [[0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 0, 1]] # 初始状态为索引0,预期输出:分子[1, 0],分母1
内容的提问来源于stack exchange,提问作者Guillaume
相关产品推荐
相关产品推荐

