`
临渊一跃
  • 浏览: 1274 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

一个有关组合公式的算法的java实现

阅读更多
/**
 * 组合公式的求和C(m,n),求平均数;
 * 用户输入一个数m,并给出含有m个元素的float数组,再输入一个数n。
 * 求m个数里选出n个数相乘的所有情况,并求出这些情况的结果的平均值。
 * 用遍历树的方法
 * @author yuantao
 *
 */
public class 组合公式 {
	/**
	 * 按层遍历函数,并实现递归求值。从本质上说,每一个递归函数可看作一个对列状集合中的一部分元素(从任一个节点开始到最后那个元素)的循环遍历,并进行相应的操作。
	 * cache=float[2],cache[0]存放所有情况的总和,cache[1]存放可能的情况的总数	 
	 * parentValue存放当到前层父节点为止的中间乘积结果,开始时的初始值设为1
	 * @param levelStart 当前层遍历的起始元素。其值与该层的最左节点对应的datas数组元素的序数相同
	 * @param depthRemain 该次深度遍历还要遍历的深度,其值初始为n.
	 * @param datas 用户给出的n个数的存放地点
	 * @param cache 中间结果的存放地点 cache=float[2],cache[0]存放所有情况的总和,cache[1]存放可能的情况的总数。
	 * @param parentValue 存放当到前层父节点为止的中间乘积结果
	 */
	public void levelResult(int levelStart,int depthRemain,float[] datas,float[] cache,float parentValue){			
		/**
		 * 对当前循选定的集合元素进行遍历。在for循环内为对当前的操作;在for循环外为与当前核心数据状态有关的操作
		 */
		for(int i = levelStart;i<datas.length;i++){					
			float nextParentValue = parentValue*datas[i];//设定下一层遍历(下一次递归)的父节点的值				
			int nextDepthRemain = depthRemain-1;//设定下一层的剩余深度
			/**
			 * 一次深度遍历完成的标志
			 */
			if(nextDepthRemain==0){					
				cache[0]+=nextParentValue;//将该次结果累加进总结果
				cache[1]++;//情况总数加一
				int t = (int)cache[1];
				System.out.print("第"+t+"种情况的积为:"+nextParentValue+"	");
				if(i%5==0)
					System.out.println();
				continue;//不再进入下一层,而是继续本层的操作
			}
			//此处为进入下一的通道入口。
			levelResult(i+1,nextDepthRemain,datas,cache,nextParentValue);
		}
		//此处为返回上层的通道的入口
		/**
		 * 所有情况遍历完成的标志,即进入进入最顶层的通道的标志
		 */
		if(levelStart==0){
			System.out.println("\n所有情况的总和是:"+cache[0]+"	");
			System.out.println("所有情况总和的平均数是:"+cache[0]/cache[1]);
		}				
		//此处为返回上层的通道的出口
	}
	
	public static void main(String[] args){
		//求C(m,n)的情况。
		
		//模拟用户的初始化输入
		int m=4,n=3;
		float[] datas=new float[m];
		for(int i=0;i<m;i++)
			datas[i] =(float)i;
		
		//最开始时的parentValue
		float rootValue = 1f;
		//第一次循环时的起始元素序号
		int startLevel = 0;		
		//记录结果的数组,将其的引用传入运行函数中
		float[] cache = {0f,0f};
		
		AssemblePlus1 ap = new AssemblePlus1();
		ap.levelResult(startLevel, n, datas, cache,rootValue);
	}
}

2
0
分享到:
评论

相关推荐

    实现数学公式C(n,m)的java程序

    该代码实现功能为数学中的C(n,m),n为下标,m为上标。

    Java开发技术大全(500个源代码).

    FileList.java 自己实现的一个文件名称枚举类 MyDataIO.java 数据输入输出示例 MyFileOutput.java 将键盘读入的文字保存到文件 MyPipedIO.java 管道流示例 MySequenceIn.java 顺序输入流示例 ObjectFileTest....

    粒子群优化算法及其在SAT问题matlab源码

    组合优化问题一直是科学研究领域中的一个重要问题。目前解决组合优化问题的方法可以分为两类。Non-Population based 方法和Population based 方法。本文主要讨论属于Population based 方法的粒子群优化算法(PSO)....

    Java开发技术大全 电子版

    1.3一个简单的Java应用程序14 1.4一个简单的Java小程序16 1.5本章小结18 第2章Java语言基础19 2.1Java语言的特点19 2.2Java程序的构成21 2.3数据类 型23 2.3.1基本数据类型23 2.3.2常量25 2.3.3变量26 ...

    Java基础实验报告图形用户界面设计.doc

    二、实验题目 用表格存储并显示个人所得税税率表,给定一个月收入值,计算应缴的个人所得税。 实验方法与步骤(需求分析、算法设计思路、流程图等) 算法设计思路:本次实验题目为计算个人所得税,所以本人从网上...

    大数据分析报告与挖掘实验报告材料.doc

    sunil已成功地开发了一个基于遗传算法的数据挖掘工具,利用该 工具对两个飞机失事的真实数据库进行了数据挖掘实验,结果表明遗传算法是进行数据 挖掘的有效方法之一。遗传算法的应用还体现在与神经网络、粗糙集等...

    数据分析与挖掘实验报告(2).doc

    sunil已成功地开发了一个基于遗传算法的数据挖掘工具,利用该 工具对两个飞机失事的真实数据库进行了数据挖掘实验,结果表明遗传算法是进行数据 挖掘的有效方法之一。遗传算法的应用还体现在与神经网络、粗糙集等...

    数据分析与挖掘实验报告.doc

    sunil已成功地开发了一个基于遗传算法的数据挖掘工具,利用该 工具对两个飞机失事的真实数据库进行了数据挖掘实验,结果表明遗传算法是进行数据挖 掘的有效方法之一。遗传算法的应用还体现在与神经网络、粗糙集等技术...

    数据分析与挖掘实验报告(1).doc

    sunil已成功地开发了一个基于遗传算法的数据挖掘工具,利用该工 具对两个飞机失事的真实数据库进行了数据挖掘实验,结果表明遗传算法是进行数据挖 掘的有效方法之一。遗传算法的应用还体现在与神经网络、粗糙集等...

    欧拉公式求圆周率的matlab代码-GyroscopeExplorer:实现陀螺仪的Android应用示例

    Java实现的,但算法的原理可以应用于几乎任何硬件/语言组合,以确定线性旋转。 由FSensor支持 最新版本的Gyroscope Explorer受到的支持。 如果您有兴趣实施传感器融合,那么您想去那里。 FSensor(FusionSensor)是...

    matlab源文件 gear.m

    它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并...

    数独自动计算及自动生成不同难易程度题目的源码

    3、求唯余法:对于存在多个可能值的空格,循环取其中一个作为假设值,然后反复利用方法1和方法2去测试,如果出错冲突或导致别的空格无值可填时,说明假设的值是错误的。并对别剩余未找到唯一值的空格进行同样操作,...

    problog:ProbLog是一种概率逻辑编程语言,用于具有概率的逻辑程序

    ProbLog是一个Python软件包,可以嵌入到Python或Java中。 通过在主机环境中实现的功能或其组合,可以将其知识库表示为Prolog / Datalog事实, CSV文件, SQLite数据库表。 ProbLog 2.1在使用Python的系统上开箱即...

    ACM巨全模板 .pdf

    5.主席树(静态求区间第k小) (区间中小于k的数量和小于k的总和) (区间中第一个大于或等于k的值) 6.权值线段树 (求逆序对) 7.动态主席树 (主席树+树状数组) (区间第k大带修改) 8.树上启发式合并 (查询子树的优化) 9,...

    nosql 入门教程

    第一印象——两个简单的例子 17 2.1.1 简单的位置偏好数据集 17 2.1.2 存储汽车品牌和型号数据 22 2.2 使用多种语言 30 2.2.1 MongoDB驱动 30 2.2.2 初识Thrift 33 2.3 小结 34 第3章 NoSQL接口与交互 36 ...

    易语言程序免安装版下载

     静态编译后的易语言EXE/DLL之间不能再共享譬如窗口、窗口组件等类似资源,对于已经静态连接到一个EXE/DLL中的支持库,该支持库中的数据或资源将不能再被其它EXE/DLL中所使用的同名支持库访问。这是因为代码被分别...

Global site tag (gtag.js) - Google Analytics