首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

1个掷硬币问题,4个Python解法

要么是讲的比较浅显,要么跨度比较大。 最近看到一本书,恰好把上面的问题解决了。着重讲解Python for 概率,统计,机器学习. 相比较吴恩达教授的网上课程,各有千秋。...题目: 三个硬币: 1角,2角,5角。 同时掷硬币,正面朝上的将面值加在一起求和。 只有两个硬币正面朝上的期望和是多少?...公式推导完了,下面就看看Python的四种解法吧。 解法1 :Sympy数学符号方法 上述推导公式,直接可以用数学符号语言,在Sympy中计算。...53.340141339548644 解法3:用Numpy,矩阵计算(速度快,有飞起来的感觉) ? 53.3542987559 解法4: 用笛卡尔笛卡尔乘积,过滤只有两个硬币朝上事件,计算期望 ?...在科学计算和机器学习中,采用不同的实现方法可以有助于问题解决和交叉检查。最后分享一下这本书的名字: .

1.2K90
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    约瑟夫环问题递归解法的一点理解

    但是,之后的报数将总要考虑原编号3处的空位问题。 如何才能避免已经产生的空位对报数所造成的影响呢? 可以将剩下的9个连续的数组成一个新的环(将2、4连接),这样报数的时候就不用在意3的空位了。...幸运的是,第一次出环的编号是可以直接求出的,也就是说,对于任意次出环的编号,我们可以将之一直降到第一次出环的编号问题,再一 一 递推而出。...以下是三种约瑟夫环解法(数组,链表,递归)的c语言代码,作者水平不高,将就看看吧 ╮(╯_╰)╭: #include #include #define FAIL...\n"); return SUCCESS; } //递归解法 int ysfdg(int sum,int value,int n) { if(n==1) return...约瑟夫环递归解法 for(i=1;i<=sum-alive;i++) printf("第%2d个被扔海里人的编号:%2d\n",i,ysfdg(sum,count,i)+1);

    53130

    八皇后问题的递归解法(最易理解的版本)

    八皇后问题是一个古来而著名的问题,该问题是19世纪著名的数学家高斯同学提出来的。...,第二行放置一个皇后, 第N行也放置一个皇后… 这样, 可以保证每行都有一个皇后,那么各行的皇后应该放置在那一列呢, 算法通过循环来完成,在循环的过程中, 一旦找到一个合适的列,则该行的皇后位置确定,则继续进行下一行的皇后的位置的确定...由于每一行确定皇后位置的方式相似,所以可以使用递归法。一旦最后 一行的皇后位置确定,则可以得到一组解。...QUEEN_COUNT - 1) { printQueen(++resultCount); } else // 否则递归继续排列下一行皇后...} } } if (row == 0) { System.out.println(QUEEN_COUNT + "皇后问题共有

    1.6K20

    破解大厂最难算法命面试:动态规划之硬币兑换

    在动态规划问题中,有一个很常见的问题就是最少硬币兑换。假设当前有面额为1,2,5元的硬币,然后给你一定额度,要求你将额度兑换成等值硬币,并要求兑换硬币的数量要最少。...这个问题有意思在于,它有相应的变种问题和解法值得一说,我们先看看该问题除了动态规划之外的解法。...最顶层是要兑换的面额,然后根据不同硬币数值进行兑换后得到第二层,例如当前硬币数值为[1,2,5],面额为9,那么分别兑换硬币1,2,5后所得数额分别为8,7,4,接下来分别针对第二层3个节点进行相应操作...,因此得到问题的解,那么从根节点到当前节点对应的数值就是所兑换的硬币数值。...break sub_solutions = coin_making(amount - coins[i], coins, i) # 递归的处理规模更小的子问题

    49820

    一文带你入门动态规划

    return 1; } return fib(n-1)+fib(n-2); } 注意:但凡遇到递归的问题都应该画出递归树,这对分析算法的复杂度,寻找算法低效性的原因都有巨大的帮助 递归树图解...2.解法二,备忘录解法 在解法1中我们也介绍了暴力解法中存在的问题,及其问题存在的原因,那么在解法二中我们就通过加上备忘录的方式,来避免重复计算,这样可以大大提高解题的效率 代码 class Solution...小发现 可以发现时间和空间往往二者不能兼得,要想减少时间就必须花费一定的空间开销来建立备忘录来减少时间开销 凑零钱问题进阶动态规划 题目描述 Leetcode链接 322 零钱兑换:https://leetcode-cn.com...,amount为当前还剩的钱的数量,account为所用硬币的数量*/ public int findMin(int[] coins,int amount){ /*结束递归的条件...,兑换的一个硬币 min1=temp+1; } } /*备忘录记录*/ memory[amount

    46420

    全排列(含递归和非递归的解法)

    用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列, 如 abc 的全排列: abc, acb, bca, dac, cab, cba 一、递归版本 1、算法简述...二、 非递归版本 1、算法简述 要考虑全排列的非递归实现,先来考虑如何计算字符串的下一个排列。如"1234"的下一个排列就是"1243"。只要对字符串反复求出下一个排列,全排列的也就迎刃而解了。...三、非递归还有一种方法 描述:和上一种不同的是:这种算法比较笨,但很好理解,不用按照上一种那么严格从小到大进行排列输出。...四、总结 至此我们已经运用了递归与非递归的方法解决了全排列问题,总结一下就是: 1.全排列就是从第一个数字起每个数分别与它后面的数字交换。...3.全排列的非递归就是由后向前找替换数和替换点,然后由后向前找第一个比替换数大的数与替换数交换,最后颠倒替换点后的所有数据。 本文由aCloudDeveloper投稿

    88430

    全排列(含递归和非递归的解法)

    用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列, 如 abc 的全排列: abc, acb, bca, dac, cab, cba 一、      递归版本...1、算法简述 要考虑全排列的非递归实现,先来考虑如何计算字符串的下一个排列。...3、见图知晓 2012080223435978.png 2012080223442392.png 三、非递归还有一种方法   描述:和上一种不同的是:这种算法比较笨,但很好理解,不用按照上一种那么严格从小到大进行排列输出...四、   总结 至此我们已经运用了递归与非递归的方法解决了全排列问题,总结一下就是: 1.全排列就是从第一个数字起每个数分别与它后面的数字交换。...3.全排列的非递归就是由后向前找替换数和替换点,然后由后向前找第一个比替换数大的数与替换数交换,最后颠倒替换点后的所有数据。

    2.4K90

    零钱兑换 II-----完全背包套路模板

    ---- 零钱兑换 II 题解集合 完全背包(朴素解法) 完全背包(一维优化) 注意双重for循环的顺序 动态规划注意事项总结 记忆化搜索解法 ---- 完全背包(朴素解法) 在leetcode 322...零钱兑换中,我们求的是「取得特定价值所需要的最小物品个数」。 对于本题,我们求的是「取得特定价值的方案数量」。 求的东西不一样,但问题的本质没有发生改变,同样属于「组合优化」问题。...同时硬币相当于我们的物品,每种硬币可以选择「无限次」,很自然的想到「完全背包」。...---- 记忆化搜索解法 递归的结束条件:凑出了目标钱数,找到了一种方案,返回1 , 或者枚举完了所有硬币,即越界了,说明当前没有可行方案,返回0 递归返回值:返回当前方案数 本级递归做什么:遍历硬币数组...可能存在的方案数进行累加求和 注意暴力递归会超时,这里还需要用依赖哈希表来存储已经求出来的结果,防止重复计算 其实如果用递归解,最好的方法还是把问题转化为多叉树的遍历,比较容易理解 那么重复计算是从哪里来的呢

    37740

    LeetCode中级算法-动态规划

    [输入1] m = 3, n = 7 [返回1] 28 [输入2] m = 3, n = 2 [返回2] 3 [解法] 使用递归法,枚举出所有可能的路径,路径可达就让计数器加一。...[题目] 给定不同面额的硬币 coins 和一个总金额 amount。...编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。...[输入1] coins = [1, 2, 5], amount = 11 [返回1] 3 [输入2] coins = [2], amount = 3 [返回2] -1 [解法] 使用递归法,枚举出所有可能的路径...,这个题目的解点是当前已经叠加的金额的基础上,尝试叠加给定硬币数组中的一个,要是叠加结果大于设定结果,本次方案作废,要是小于指定的总面额,则继续叠加,要是等于则计数一次,并对比记录是否为最少硬币的情况。

    46310

    【动态规划背包问题】强化「换元一维优化」技巧

    给定不同面额的硬币和一个总金额。 写出函数来计算可以凑成总金额的硬币组合数。 假设每一种面额的硬币有无限个。...5000 硬币种类不超过 500 种 结果符合 32 位符号整数 完全背包(朴素解法) 在上一题 322....零钱兑换 中,我们求的是「取得特定价值所需要的最小物品个数」。 对于本题,我们求的是「取得特定价值的方案数量」。 求的东西不一样,但问题的本质没有发生改变,同样属于「组合优化」问题。...因为后者更为常用,所以我们再来回顾一下如何进行 换元一维优化 : 在二维解法的基础上,直接取消「物品维度」 确保「容量维度」的遍历顺序为「从小到大」(适用于「完全背包」) 将形如 的式子更替为...零钱兑换」 和 本篇的「518. 零钱兑换 II」本质是一样的。 之所将两题分开成两篇【练习】,主要是为了加强大家对于「一维优化」的熟练度。

    1.1K62

    从零钱兑换再看动态规划的套路

    在昨天的文章关于背包问题的一点发散[1]之后,有小伙伴说感觉跟LeetCode上一道题零钱兑换[2]很像,但是又好像有点不一样,简单的暴力递归跟缓存优化都能做出来,就是自下而上的方法不怎么有思路。...我们来看两个例子: 输入: coins = [1, 2, 5], amount = 11 输出: 3 输入: coins = [2], amount = 3 输出: -1 每次遇到这样的问题我们总是本能地用暴力递归来做...暴力递归无需过多分析了,无非是递归地做选择,选择硬币,然后选择硬币最少的那个方案。 咱们直接上递归代码,咱们主要思考分析工作在后期的算法优化上。...当我们有面值为1,2两种的硬币时,当我们对5进行兑换时,不选择2这个面值的话,dp[0][5]是5,也就是我们需要5个面值为1的硬币,而dp[1][3]是是2,那这种情况兑换硬币就只要3个。...最终兑换5所需最少硬币数就是3. 好了,思路都解释清楚了,剩下来的就是代码实现了。

    45520

    零钱兑换----完全背包套路解法详细再探

    零钱兑换完全背包套路解法再探 引言 完全背包(朴素解法) 无效状态的定义问题--顺带滚动数组优化 完全背包(一维优化) ---- 引言 leetcode 322....零钱兑换本篇文章题解之前已经发过,但是对完全背包的解法只是模棱解释一番,今天再写一篇文章来详细探讨一下本题套用完全背包公式的解法 完全背包套路题目: leetcode 279....完全平方数 LintCode 440 · 背包问题 III—完全背包问题 本人目前刷题数量较少,先列举两道,O(∩_∩)O哈哈~ ---- 完全背包(朴素解法) 硬币相当于我们的物品,每种硬币可以选择...这本质上其实是一个组合问题:被选物品之间不需要满足特定关系,只需要选择物品,以达到「全局最优」或者「特定状态」即可。 再根据物品的「选择次数限制」来判断是何种背包问题。...因此,我们这次站在一个「更高」的角度去看「完全背包」问题。

    65220

    查找第k小的元素(O(n)递归解法)

    今天分享一个小技巧,虽然是小技巧但是还是很有价值的,曾经是微软的面试题。...题目是这样的,一个无序的数组让你找出第k小的元素,我当时看到这道题的时候也像很多人一样都是按普通的思维,先排序在去第K个,但是当数组非常大的时候,效率不高,那有没有简单的方法了,其实我们早就学过,只是我们不善于思考和变通...分析:快速排序选择一个pivot对数组进行划分,左边小于pivot,右边大于等于pivot,所以我们计算左边小于pivot(加上pivot)的个数count总共有多少,如果等于k,正是我们所要的,如果大于...k,说明第k小的数在左边,那就在左边进行我们的递归;否则,在右边,那么说明右边的第k-count小的数就是我们所要的,在右边进行我们的递归。

    1.3K50

    经典博弈问题的动态规划解法

    问题 亚历克斯和李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] 。 游戏以谁手中的石子最多来决出胜负。石子的总数是奇数,所以没有平局。...思路 如果一个问题可以分解成一个子问题,而子问题又可以分解成一个更小的子问题,那么我们就可以考虑用递归的方式来实现,比如斐波拉契数列。不过递归的方式有个严重问题就是会存在大量子问题额重复计算。...动态规划也采用了类似的思路,不过和递归相反,是自底向上从子问题一步步计算到最终问题,通过额外的空间来记录状态,避免了子问题的重复计算,不过相比递归而言更难理解。...2.状态转移 思考一下要求解dp[i,j]可否根据子问题来求解,答案是肯定的,我们要求dp[i,j]的2个值first和second。...dp[i][j]=(right,dp[i][j-1][0]) return dp[0][-1][0]-dp[0][-1][1]>0 彩蛋 到这里还没有结束,上面的解法可以应对一般的博弈问题

    44320

    架构设计的问题与解法

    面前的系统到底有什么复杂度导致的问题?只有知道了问题才能选择解法,不能拿着锤子找钉子。 当知道了当前面临的问题后,就要利用前人的智慧和自身的经验,设计出合理的架构方案来解决问题。...因此对整本书的内容,分成以下四节,第一节主要描述我们通常面临的系统复杂度及问题在哪,后面三节则是对常见的三个问题下的常用解法进行阐述。...既然有数据的同步,就一定存在复制延迟导致的从机数据不一致问题,针对这个问题有几种常见的解法,如: 写操作后同一用户一段时间内的读操作都发给主机,避免数据还没同步到从机,但这个逻辑容易遗漏。...上面说的几个问题解法也涉及了一些分配机制的细节。具体到分配机制的实现来说,有两种思路: 程序代码封装:实现简单,可对业务定制化,但每个语言都要自己实现一次,且很难做到同步修改,因此适合小团队。...既然是缓存更新时重复生成所导致的问题,那么一种解法就是在缓存重新生成前给这个KEY加锁,加锁期间出现的请求都等待或返回默认值,而不去都尝试重新生成缓存。

    90142

    动态规划详解(修订版)

    这就是动态规划问题的第一个性质:重叠子问题。下面,我们想办法解决这个问题。 2、带备忘录的递归解法 明确了问题,其实就已经把问题解决了一半。...解决一个子问题的时间,同上,没有什么循环,时间为 O(1)。 所以,本算法的时间复杂度是 O(n)。比起暴力算法,是降维打击。 至此,带备忘录的递归解法的效率已经和迭代的动态规划一样了。...实际上,带备忘录的递归解法中的「备忘录」,最终完成后就是这个 DP table,所以说这两种解法其实是差不多的,大部分情况下,效率也基本相同。...比如你想求amount = 11时的最少硬币数(原问题),如果你知道凑出amount = 10的最少硬币数(子问题),你只需要把子问题的答案加一(再选一枚面值为 1 的硬币)就是原问题的答案,因为硬币的数量是没有限制的...3、dp 数组的迭代解法 当然,我们也可以自底向上使用 dp table 来消除重叠子问题,dp数组的定义和刚才dp函数类似,定义也是一样的: dp[i] = x表示,当目标金额为i时,至少需要x枚硬币

    59750

    零钱兑换

    零钱兑换解法汇总 3.BFS---广度优先遍历 2.动态规划 3.记忆化递归 4.套「完全背包」问题的公式 总结 原题链接: leetcode 322....零钱兑换 ---- 3.BFS—广度优先遍历 具体在纸上画一下,就知道这其实是一个在「图」上的最短路径问题,「广度优先遍历」是求解这一类问题的算法。广度优先遍历借助「队列」实现。...事实上,可以 直接面对问题求解 ,即「自顶向下」,但是这样的问题有 重复子问题,需要缓存已经求解过的答案,这叫 记忆化递归。...但是与「完全」背包问题不一样的地方是: 要求恰好填满容积为 amount 的背包,重点是「恰好」、「刚刚好」,而原始的「完全背包」问题只是要求「不超过」; 题目问的是总的硬币数最少,原始的「完全背包」问题让我们求的是总价值最多...因此,这个问题的背景是「完全背包」问题。 可以使用「完全背包」问题的解题思路(「0-1 背包」问题也是这个思路): 一个一个硬币去看,一点点扩大考虑的价值的范围(自底向上考虑问题的思想)。

    37610
    领券