Algorithms - 离散概率值(discrete) 和 重置\洗牌(shuffle) 算法 及 代码

原创 2013年12月04日 16:32:18

离散概率值(discrete) 和 重置\洗牌(shuffle) 算法 及 代码


本文地址: http://blog.csdn.net/caroline_wendy/article/details/17120687


离散概率值, 是根据离散分布的概率(归一化), 计算出一个随机的值, 概率越大, 离散值出现的可能性就越大;

原理: 随机生成一个0-1的值,顺次累加概率值, 大于等于随机值输出, 由于概率值越大, 相加之后跨度越大, 越有可能输出;


重置(洗牌)(shuffle), 是随机打乱数组的值, 保持原值不变, 更换位置;

原理:遍历数组, 随机生成一个当前值, 之后的值, 即[当前值, 之后的值], 交换位置;


代码如下:

/*
 * Algorithms.java
 *
 *  Created on: 2013.12.03
 *      Author: Wendy
 */

/*eclipse std kepler, jdk 1.7*/

public class Algorithms 
{
	//根据输入的概率数组, 随机输出离散的值
	public static int discrete(double[] a)
	{
		double r = StdRandom.uniform();
		double sum = 0.0;
		for(int i=0; i<a.length; i++)
		{
			sum += a[i];
			if(sum >= r) return i;
		}
		return -1;
	}
	
	//重置(洗牌), 把数组值的顺序打乱
	public static void shuffle(double[] a)
	{
		int N = a.length;
		for(int i=0; i<N; ++i)
		{
			int r = i + StdRandom.uniform(N-i); //"[ )"不能达到N-i, 最大N-i-1
			double temp = a[i];
			a[i] = a[r];
			a[r] = temp;
		}
	}
	
	public static void main(String[] args) 
	{
		double[] a = {0.1, 0.4, 0.3, 0.2};
		StdOut.println("discrete value = " + discrete(a));
		shuffle(a);
		for(int i=0; i<a.length; ++i){
			StdOut.print(a[i] + " ");
		}
		StdOut.println();
	}
}

输出:

discrete value = 2
shuffle : 0.3 0.2 0.4 0.1 


版权声明:本文为博主原创文章,未经博主允许不得转载。

根据离散概率随机返回int值java代码&理解

public static int discrete(double[] a) { double r = StdRandom.random(0); double sum = 0....
  • u013781952
  • u013781952
  • 2014年12月15日 22:40
  • 203

抽奖概率-三种算法

最近接触到一个抽奖需求,加上平时玩的暗黑3很少掉暗金装备,就抽空学习下这类概率问题,暂时按网络称为掉宝类型概率。 例如游戏中打败一个boss,会掉落下面其中一个物品,而每个物品都有一定概率: 1. 靴...
  • woshixiongjin
  • woshixiongjin
  • 2014年03月03日 17:28
  • 8074

统计学:离散型和连续型随机变量的概率分布

1. 离散型和连续型随机变量的定义离散型随机变量(discrete random variable):取值是可数的个值的随机变量, 比如投掷一枚骰子的朝上的点数,可能是1,2,3,4,5,6;比如南京...
  • moxigandashu
  • moxigandashu
  • 2016年05月18日 11:16
  • 8976

基于Python的朴素贝叶斯算法实现

本文主要介绍了贝叶斯算法的基本原理以及基于Python的朴素贝叶斯分类算法的实现...
  • Hater_Wu
  • Hater_Wu
  • 2016年05月16日 22:37
  • 1473

机器学习: 离散变量的概率分布

二元分布 先介绍最简单的一种二元概率分布,比如抛硬币,只有两种可能。假设随机变量为xx,那么x∈{0,1}x \in \{0, 1 \}, x=1x=1 表示硬币是字朝上,x=0x=0 表示硬币是 ...
  • shinian1987
  • shinian1987
  • 2016年06月10日 15:42
  • 4084

洗牌算法之Knuth Shuffle

洗牌这种技术活,我相信大家都有玩过,虽然手法各不相同,但是目的大部分应该是一样的,就是把牌的顺序打乱,创造一个公平的玩牌氛围。 洗牌算法(Shuffling Algorithm),顾名思义,...
  • Dwyane_mys
  • Dwyane_mys
  • 2012年10月09日 22:57
  • 3916

STL经典算法集锦<七>之随机洗牌(random_shuffle)

将一个数组中的元素序列打算顺序进行重排,并需要保证重排后的每一种结果是等概率且随机的。下面的两种算法哪一种是正确的?(注:random(a,b)返回一个a~b的随机整数) 1. for i=1 to...
  • xinhanggebuguake
  • xinhanggebuguake
  • 2012年05月08日 13:31
  • 6728

A Simple In-Place Algorithm for In-Shuffle 一种简单的原地洗牌算法

只是把这篇文章前3部分翻译了,由于是学通信的,很多计算机术语可能翻译的不对,对文章内容理解偏差也可能会导致翻译错误,若发现,请指正,方便我更正!  1引文 通过把一副牌均分为两半,让后一半交错插...
  • lmdyyh5722756
  • lmdyyh5722756
  • 2014年01月11日 15:27
  • 1387

洗牌算法 数组打乱顺序 Fisher-Yates shuffle

http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle 大公司面试题见过几次 今天实现以下 其实MODERN算法很简单 1. 实...
  • leo524891010
  • leo524891010
  • 2012年07月11日 12:06
  • 2287

洗牌算法shuffle

对这个问题的研究始于一次在群里看到朋友发的洗牌面试题。当时也不知道具体的解法如何,于是随口回了一句:每次从剩下的数字中随机一个。过后找相关资料了解了下,洗牌算法大致有3种,按发明时间先后顺序如下: ...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年04月29日 12:53
  • 773
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Algorithms - 离散概率值(discrete) 和 重置\洗牌(shuffle) 算法 及 代码
举报原因:
原因补充:

(最多只允许输入30个字)