拒绝采样

470. 用 Rand7() 实现 Rand10()

难度中等55收藏分享切换为英文关注反馈

已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。

不要使用系统的 Math.random() 方法。

示例 1:

输入: 1
输出: [7]

示例 2:

输入: 2
输出: [8,4]

示例 3:

输入: 3
输出: [8,1,10]

提示:

  1. rand7 已定义。
  2. 传入参数: n 表示 rand10 的调用次数。

进阶:

  1. rand7()调用次数的 期望值 是多少 ?
  2. 你能否尽量少调用 rand7() ?

 1 # The rand7() API is already defined for you.
 2 # def rand7():
 3 # @return a random integer in the range 1 to 7
 4
 5 class Solution:
 6     def rand10(self):
 7         """
 8         :rtype: int
 9         """
10         res = 0
11         while True:
12             res = rand7() + (rand7()-1)*7
13             if res <= 40:
14                 break
15
16         return (res-1)//4 + 1

478. 在圆内随机生成点

难度中等13收藏分享切换为英文关注反馈

给定圆的半径和圆心的 x、y 坐标,写一个在圆中产生均匀随机点的函数 randPoint 。

说明:

  1. 输入值和输出值都将是浮点数
  2. 圆的半径和圆心的 x、y 坐标将作为参数传递给类的构造函数。
  3. 圆周上的点也认为是在圆中。
  4. randPoint 返回一个包含随机点的x坐标和y坐标的大小为2的数组。

示例 1:

输入:
["Solution","randPoint","randPoint","randPoint"]
[[1,0,0],[],[],[]]
输出: [null,[-0.72939,-0.65505],[-0.78502,-0.28626],[-0.83119,-0.19803]]

示例 2:

输入:
["Solution","randPoint","randPoint","randPoint"]
[[10,5,-7.5],[],[],[]]
输出: [null,[11.52438,-8.33273],[2.46992,-16.21705],[11.13430,-12.42337]]

输入语法说明:

输入是两个列表:调用成员函数名和调用的参数。Solution 的构造函数有三个参数,圆的半径、圆心的 x 坐标、圆心的 y 坐标。randPoint 没有参数。输入参数是一个列表,即使参数为空,也会输入一个 [] 空列表。

 1 import random
 2
 3
 4 class Solution:
 5
 6     def __init__(self, radius: float, x_center: float, y_center: float):
 7         self.radius = radius
 8         self.x_center = x_center
 9         self.y_center = y_center
10
11
12     def randPoint(self) -> List[float]:
13         while True:
14             delta_x = random.uniform(-1.0,1.0)*self.radius
15             delta_y = random.uniform(-1.0,1.0)*self.radius
16             if pow(delta_x,2)+pow(delta_y,2) <= pow(self.radius,2):
17                 return [self.x_center+delta_x, self.y_center+delta_y]
18
19
20 # Your Solution object will be instantiated and called as such:
21 # obj = Solution(radius, x_center, y_center)
22 # param_1 = obj.randPoint()

原文地址:https://www.cnblogs.com/dede-0119/p/12557282.html

时间: 2024-08-02 00:06:54

拒绝采样的相关文章

蒙特卡洛采样之拒绝采样(Reject Sampling)

引子 蒙特卡洛(Monte Carlo)方法是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为基础的数值计算方法.它的核心思想就是使用随机数(或更常见的伪随机数)来解决一些复杂的计算问题. 当所求解问题可以转化为某种随机分布的特征数(比如随机事件出现的概率,或者随机变量的期望值等)时,往往就可以考虑使用蒙特卡洛方法.通过随机抽样的方法,以随机事件出现的频率估计其概率,或者以抽样的数字特征估算随机变量的数字特征,并将其作为问题的解.这种方法多用于求解复杂的高

470. Implement Rand10() Using Rand7() (拒绝采样Reject Sampling)

问题 已提供一个Rand7()的API可以随机生成1到7的数字,使用Rand7实现Rand10,Rand10可以随机生成1到10的数字. 思路 简单说: (1)通过(Rand N - 1) % 10 + 1的方法,可以求出Rand10,当N是10的倍数的时候. (2)用( Rand7 - 1 ) * 7 + Rand7可以随机生成1-49,记作Rand49. (3)如果可以通过Rand49计算出Rand40,即随机生成1-40,就可以通过Rand40 % 10来取得Rand10. (4)如何通过

拒绝采样 Rejection Sampling

2018-12-09 16:40:30 一.使用Rand7()来生成Rand10() 问题描述: 问题求解: 这个问题字节跳动算法岗面试有问到类似的,有rand6,求rand8,我想了好久,最后给了一个特殊解法,就进行三次,每次取前三个数和后三个数的概率相等为1 / 2,那么最后需要得到的概率是1 / 8,就可以通过取三次得到.问题就转变成了映射的问题,当然映射的方式是很简单的,类似二进制的方法,很容易就可以进行映射. 但是,上述的解法在本题中是没有办法使用的,就需要更通用的解法,说实话,之前也

七月算法-12月机器学习在线班--第十六次课笔记—采样和变分

七月算法-12月机器学习--第十六次课笔记—采样和变分 七月算法(julyedu.com)12月机器学习在线班学习笔记http://www.julyedu.com 第一部分 采样 引言 为什么要研究采样? 根据采样结果估算分布的参数,完成参数学习. 前提:模型已经存在,但参数未知: 方法:通过采样的方式,获得一定数量的样本,从而学习该系统的参数. 1 采样算法 现需要对概率密度函数f(x)的参数进行估计,若已知的某概率密度函数g(x)容易采样获得其样本,可以如何估计f(x)的参数? g(x)很容

MCMC(三)MCMC采样和M-H采样

MCMC(一)蒙特卡罗方法 MCMC(二)马尔科夫链 MCMC(三)MCMC采样和M-H采样 MCMC(四)Gibbs采样(待填坑) 在MCMC(二)马尔科夫链中我们讲到给定一个概率平稳分布$\pi$, 很难直接找到对应的马尔科夫链状态转移矩阵$P$.而只要解决这个问题,我们就可以找到一种通用的概率分布采样方法,进而用于蒙特卡罗模拟.本篇我们就讨论解决这个问题的办法:MCMC采样和它的易用版M-H采样. 1. 马尔科夫链的细致平稳条件 在解决从平稳分布$\pi$, 找到对应的马尔科夫链状态转移矩

Hulu机器学习问题与解答系列 | 十四:如何对高斯分布进行采样

欢迎回到"采样"系列~ 今天的内容是 [如何对高斯分布进行采样] 场景描述 高斯分布,又称正态分布,是一个在数学.物理及工程领域都非常重要的概率分布.在实际应用中,我们经常需要对高斯分布进行采样.虽然在很多编程语言中,直接调用一个函数就可以生成高斯分布随机数,但了解其中的具体算法能够加深我们对相关概率统计知识的理解:此外,高斯分布的采样方法有多种,通过展示不同的采样方法在高斯分布上的具体操作以及性能对比,我们会对这些采样方法有更直观的印象. 问题描述 如果让你来实现一个高斯分布随机数生

机器学习之采样和变分(八)

摘要: 当我们已知模型的存在,想知道参数的时候我们就可以通过采样的方式来获得一定数量的样本,从而学习到这个系统的参数.变分则是在采样的基础上的一次提升,采用相邻结点的期望.这使得变分往往比采样算法更高效:用一次期望计算代替了大量的采样.直观上,均值的信息是高密(dense)的,而采样值的信息是稀疏(sparse)的. 预备知识: 隐马尔科夫模型.EM算法 一.采样 1.为何要采样? 前提:模型已经存在,但参数未知:  n方法:通过采样的方式,获得一定数量的样本,从而学习该系统的参数.    现需

马尔科夫链蒙特卡洛采样(MCMC)入门

1.从随机变量分布中采样 研究人员提出的概率模型对于分析方法来说往往过于复杂.越来越多的研究人员依赖数学计算的方法处理复杂的概率模型,研究者通过使用计算的方法,摆脱一些分析技术所需要的不切实际的假设.(如,正态和独立) 大多数近似方法的关键是在于从分布中采样的能力,我们需要通过采样来预测特定的模型在某些情况下的行为,并为潜在的变量(参数)找到合适的值以及将模型应用到实验数据中,大多数采样方法都是将复杂的分布中抽样的问题转化到简单子问题的采样分布中. 本章,我们解释两种采样方法:逆变换方法(the

逆变换采样

逆变换采样(英语:inverse transform sampling),又称为逆采样(inversion sampling).逆概率积分变换(inverse probability integral transform).逆变换法(inverse transformation method).斯米尔诺夫变换(Smirnov transform).黄金法则(golden rule)等,是伪随机数采样的一种基本方法.在已知任意概率分布的累积分布函数时,可用于从该分布中生成随机样本. Inverse