`
yiminghe
  • 浏览: 1460454 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

绝妙取样之javascript实现

阅读更多

More Programming pearls

 

做习题:用你最喜欢的编程语言实现Floyd算法。

 

1 - n 中随机取m个数组成集合

1 - n 中随机取m个数组成序列

 

演示@google code

 

 

 

javascript实现以及证明,更简洁优雅

 

<script type="text/javascript">

if(!window.console) {
	window.console={};
	window.console.log=function(v){
		alert(v);
	};
}

if(!Array.prototype.indexOf) {
	Array.prototype.indexOf = function(v){
		for(var i=0;i<this.length;i++)
			if(this[i] === v) return i;
		return -1;
	}
}
	
	function randIt(l,u){
		return l+Math.floor(Math.random()*(u-l+1));
	}
	
	
	/*
		1 - n 中随机取m个数组成集合
	*/
	function randomSet(m,n) {
		
		var start=n-m+1;
		var holder={};
		
		for(var i=start;i<=n;i++) {
			//random 1~i not 1~i-1
			var cur=randIt(1,i);
			
			if(holder[cur]) {
				holder[i]=1;				
			} else {
				holder[cur]=1;				
			}
		}
		
		return holder;
		
	}
	
	/*
		1 - n 中随机取m个数组成序列
	*/
	function randomList(m,n) {
		var start=n-m+1;
		var holder=[];
		
		for(var i=start;i<=n;i++) {
			//random 1~i not 1~i-1
			var cur=randIt(1,i);
			//trick tick
			var position=holder.indexOf(cur)+1;		
			var insert=position?i:cur;
			holder.splice(position,0,insert);				
		}
		
		return holder;
	}
	
	
	
	(function main(){
		
	
		var set=randomSet(5,10);
		var t=[];		
		for(var i in set) {
			t.push(i);			
		}
		console.log("*******************Random Set :\n"+t);
				
		
		var list=randomList(5,10);
		console.log("*******************Random List :\n"+list);
	})();
	
	/*
		证明:
		list :
		对于任何一个序列,有且仅有一种途径来生成它,因为算法是可以逆推的。
		例如M=5,n=10,且最终序列为
		7 2 9 1 5
		由于 10 (i的最终值)不在s中出现,所以之前的序列为 2 9 1 5,且之前随机数为 7 ,
		类似可以推出之前每步产生的随机数,
		由于假定随机数的序列是随机产生的,则该程序算法所生成的序列也是随机生成的。
		
		set:
		每一个m元集合都有m!的序列生成,序列是等概率的,则集合也是等概率的。
		
	*/

</script>
 

Java 实现 : 序列随机采样问题

 

 

 

  • 大小: 2.8 KB
分享到:
评论

相关推荐

    8个绝妙的JavaScript WebGL应用实验

    4. **WebGL Aquarium**:这个水族馆实验不仅展示了3D模型的精细度,还利用WebGL实现了纹理映射、场景动画、反射和折射效果,这些都是创建真实感水下环境的关键要素。 5. **Fractal Lab**:该实验利用WebGL来探索和...

    Gauss绝妙定理论文英译版

    在描述高斯绝妙定理时,我们不能忽视与之相关的其他重要概念,如高斯曲率、第一基本形式和第二基本形式等。高斯曲率是一个量度曲面在某一点的弯曲程度的数学概念,它决定了曲面上的局部几何特性。第一基本形式描述了...

    绝妙好词-------------------------------.pdf

    根据提供的文件信息,我们可以看出文件的标题为“绝妙好词”,而描述和标签也是同样的内容。文件内容似乎是一系列的符号和乱码,这可能是OCR(光学字符识别)技术扫描识别错误的结果。由于内容提供的是一串字符而非...

    通达信指标公式源码绝妙箱体主图指标.doc

    通达信指标公式源码绝妙箱体主图指标 通达信指标公式源码绝妙箱体主图指标是基于通达信软件平台的技术指标,用于股票、期货、外汇等金融市场的分析和预测。本指标包括多种技术指标,例如移动平均线、相对强弱指标、...

    Excel模板绝妙企业通讯录.zip

    《Excel模板绝妙企业通讯录》 在企业管理中,一个高效、整洁的通讯录是必不可少的工具,它能够帮助企业员工迅速找到所需联系人,提高工作效率。Excel作为一款强大的电子表格软件,提供了丰富的功能,使得创建和管理...

    0欧姆电阻绝妙之处

    0欧姆电阻是一种在标称阻值为0欧姆的电阻器,它并不具有电阻器的一般功能,比如限流或电压分压,但它在电子电路中有其特殊...它们用起来既简单又经济,并且能够在电路中扮演多种角色,是电子工程师不可或缺的工具之一。

    世界营销绝妙点子.doc

    世界营销绝妙点子.doc

    企业公司的绝妙工资条

    企业公司的绝妙工资条

    绝妙贪吃蛇源代码

    ### 绝妙贪吃蛇源代码解析 #### 概述 本篇将深入解析一个用C语言编写的经典游戏——贪吃蛇的源代码。该程序利用了`graphics.h`库来实现图形界面,使玩家能够在一个设定好的区域内控制一条蛇去吃随机出现的食物,并...

    绝妙企业通讯录

    绝妙企业通讯录

    企业公司的绝妙工资条.xls

    企业公司的绝妙工资条.xls

    绝妙企业通讯录Excel 模板

    【作品名称】:绝妙企业通讯录Excel 模板 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。

    绝妙企业通讯录excel模版下载.xlsx

    绝妙企业通讯录excel模版下载.xlsx

    风河工程师写的绝妙嵌入式系统书籍

    风河工程师写的绝妙嵌入式系统书籍

    绝妙的VFP高级指南、普通指南

    绝妙的VFP高级指南、普通指南,对你的编程也许有些帮助吧,O(∩_∩)O哈哈~

    古今绝妙对联大全.doc

    本文中提到的古今绝妙对联,不仅体现了创作者的机智和幽默,也反映了当时社会的风俗与人物性格。 【对联解析】 1. 第一对联讽刺了两位官员,上联以“王不出头”暗指王文勤缺乏领导力,下联以“吴虽有口只谈天”...

    小学数学数学神探绝妙判决

    标题中的“小学数学数学神探绝妙判决”可能是指一个涉及数学思维的谜题或者案例,而实际上,描述和部分内容并没有直接提及数学问题,而是讲述了一个法律判决的故事。这个故事虽然不是数学问题,但它可以引发关于公正...

    绝妙的营销案例,高手赚钱的秘诀。

    绝妙的营销案例,高手赚钱的秘诀。

Global site tag (gtag.js) - Google Analytics