这算法是通过蒙特卡洛模拟来估计收集卡片直到每种都至少 m 张所需的期望次数。
算法步骤:
collect_cards 函数: 该函数模拟了一次收集卡片的过程。通过生成随机数模拟抽卡的过程,直到每种卡片数量至少为 m 为止。函数返回收集的总次数。
monte_carlo_simulation 函数: 该函数运行多次 collect_cards 模拟,然后计算平均值作为期望值的估计。它通过迭代调用 collect_cards 来模拟多次抽卡的过程,然后计算总的抽卡次数。
运行蒙特卡洛模拟: 最后,通过调用 monte_carlo_simulation(5, 9) 来运行蒙特卡洛模拟,模拟了 200,000 次抽卡过程,然后计算平均值,得到的结果就是期望值的估计。
这个算法的本质是通过多次模拟来估计期望值,而不是通过数学公式直接计算。蒙特卡洛模拟是一种基于随机抽样的数值计算方法,通过大量的模拟次数,可以逼近真实的期望值。这种方法的优势在于可以处理一些复杂的问题,但缺点是计算成本可能较高,尤其是在需要大量模拟次数时。