霍纳法则

Jul 18, 2017 pm 05:28 PM
分析 基础

 

产生随机数

package cn.xf.algorithm.ch02;

import java.util.ArrayList;
import java.util.List;

/**
 * 生产随机数
 * @author xiaof
 *
 */
public class Random {

	/**
	 * 生产一个随机数的数列
	 * @param n  生成n个数列
	 * @param m  数据在0和m-1之间
	 * @param seed  随机初始种子
	 * @param a		参数
	 * @param b		参数
	 * @return
	 */
	public static List<Integer> randomNum(int n, int m, int seed, int a, int b)
	{
		List<Integer> numbers = new ArrayList<Integer>();
		int initData = (a * seed + b) % m;
		numbers.add(Math.abs(initData));	//初始化一个数据
		
		for(int i = 1; i < n; ++i)
		{
			int newData = (a * numbers.get(i - 1) + b) % m;
			numbers.add(Math.abs(newData));
		}
		
		return numbers;
	}
	
	/**
	 * 生产一个随机数的数列
	 * @param n 生成n个数列
	 * @param m  数据在0和m-1之间
     * @param seed  随机初始种子
     * @param a     参数
     * @param b     参数
     * @return
	 */
	public static List<Double> randomNumDouble(int n, int m, int seed, int a, int b) {
	    //创建结果数组
	    List<Double> numbers = new ArrayList<Double>();
	    int initData = (a * seed + b) % m; //取出一个初始值,在0到m之间
	    numbers.add((double) Math.abs(initData));   //加入第一个值
	    //后续数值以前一个数据作为基础种子进行变换
	    for(int i = 1; i < n; ++i) {
	        double newData = (a * numbers.get(i - 1) + b) % m;
	        numbers.add(Math.abs(newData));
	    }
	    
	    return numbers;
	}
	
	public static void main(String[] args) {
//		List<Integer> res = Random.randomNum(10, 10, 998, 58797676, 1);
		List<Double> res = Random.randomNumDouble(10, 10, 998, 58797676, 1);
		for(Double a : res)
		{
			System.out.print(a + "\t");
		}
 	}
}
登录后复制

  

随机的取值系数

求值

package cn.xf.algorithm.ch06ChangeRule;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.junit.Test;

import cn.xf.algorithm.ch02.Random;

/**
 * 
 * 功能:霍纳法则
 * @author xiaofeng
 * @date 2017年7月13日
 * @fileName HornerRule.java
 *
 */
public class HornerRule {
	/**
	 * 用霍纳法则求一个多项式在一个给定点的值
	 * 输入:一个n次多项式的系数数组P【0...n】(从低到高存储),以及一个数字x
	 * 输出:多项式在x点的值
	 * @param p
	 * @param x
	 */
	public Double horner(List<Double> p, int x) {
		if(p == null || p.size() <=0) {
			return 0d;
		}
		//求结果集
		Double result = p.get(p.size() - 1);
		for(int i = p.size() - 2; i >= 0; --i) {
			//累计往后添加系数数据
			//一次从大到小吧X的系数乘以X,  然后加上下一个次数等级的系数,然后求和,作为新的下一个次数的系数乘数
			result = result * x + p.get(i);
		}
		
		return result;
	}
	
	/**
	 * 普通计算方式
	 * @param p
	 * @param x
	 * @return
	 */
	public Double notHorner(List<Double> p, int x) {
	    if(p == null || p.size() <=0) {
            return 0d;
        }
	    
	    //p是系数存储列表
	    Double result = 0d;  //0次幂的
	    for(int i = 0; i < p.size(); ++i) {
	        result += p.get(i) * doublePow(x, i);
	    }
	    
	    return result;
	}
	
	//求x的n次幂
	public static Double doublePow(double x, int n) {
	    if(x == 0) 
	        return 0d;
	    
	    if(n == 0)
	        return 1d;
	    Double result = 1d;
	    for(int i = 0; i < n; ++i) {
	        result *= x;
	    }
	    
	    return result;
	}
	
	@Test
	public void test1() {
	    //定义的一个数组是方程式的系数,第二个参数是未知数的值
	    //方程:y=5x^5 + 3x^4 + 2x^2 + 3
	    //当x为4的时候
	    HornerRule hr = new HornerRule();
	    List<Double> xishus = new ArrayList<Double>();
	    //这个数组的顺序要按照,0次幂到N次幂的顺序来
	    xishus.addAll(Arrays.asList(3d, 0d, 2d, 0d, 3d, 5d));
	    System.out.println(hr.horner(xishus, 4));
	    //一般方式计算
	    System.out.println(hr.notHorner(xishus, 4));
	    System.out.printf("JOB START OUTPUT: %tF %<tT%n", System.currentTimeMillis());
	}
	
	@Test
    public void compare() {
        // 当x为4的时候
        HornerRule hr = new HornerRule();
        // 建造100个随机数
        List<Double> xishus = Random.randomNumDouble(600, 3, 998, 58797676, 1);
        //求值
        System.out.printf("JOB HORNER START OUTPUT: %tF %<tT%n", System.currentTimeMillis());
        System.out.println(hr.notHorner(xishus, 3));
        System.out.printf("JOB HORNER END OUTPUT: %tF %<tT%n", System.currentTimeMillis());
        System.out.println("######################################################################################");
        System.out.printf("JOB NOTHORNER START OUTPUT: %tF %<tT%n", System.currentTimeMillis());
        System.out.println(hr.notHorner(xishus, 3));
        System.out.printf("JOB NOTHORNER END OUTPUT: %tF %<tT%n", System.currentTimeMillis());
        
    }
}
登录后复制

  

 

以上是霍纳法则的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何在uniapp中实现数据统计和分析 如何在uniapp中实现数据统计和分析 Oct 24, 2023 pm 12:37 PM

如何在uniapp中实现数据统计和分析一、背景介绍数据统计和分析是移动应用开发过程中非常重要的一环,通过对用户行为的统计和分析,开发者可以深入了解用户的喜好和使用习惯,从而优化产品设计和用户体验。本文将介绍如何在uniapp中实现数据统计和分析的功能,并提供一些具体的代码示例。二、选择合适的数据统计和分析工具在uniapp中实现数据统计和分析的第一步是选择合

织梦CMS二级目录打不开的原因分析 织梦CMS二级目录打不开的原因分析 Mar 13, 2024 pm 06:24 PM

标题:解析织梦CMS二级目录打不开的原因及解决方案织梦CMS(DedeCMS)是一款功能强大的开源内容管理系统,被广泛应用于各类网站建设中。然而,有时候在搭建网站过程中可能会遇到二级目录无法打开的情况,这给网站的正常运行带来了困扰。在本文中,我们将分析二级目录打不开的可能原因,并提供具体的代码示例来解决这一问题。一、可能的原因分析:伪静态规则配置问题:在使用

Python在智能交通系统中的应用案例分析 Python在智能交通系统中的应用案例分析 Sep 08, 2023 am 08:13 AM

Python在智能交通系统中的应用案例分析摘要:随着智能交通系统的快速发展,Python作为一种多功能、易于学习和使用的编程语言,被广泛应用于智能交通系统的开发和应用中。本文通过分析Python在智能交通系统中的应用案例,并给出相关的代码示例,展示了Python在智能交通领域中的优势和应用潜力。引言智能交通系统是指利用现代通信、信息、传感等技术手段,通过对交

ThinkPHP6代码性能分析:定位性能瓶颈 ThinkPHP6代码性能分析:定位性能瓶颈 Aug 27, 2023 pm 01:36 PM

ThinkPHP6代码性能分析:定位性能瓶颈引言:随着互联网的快速发展,更高效的代码性能分析对于开发者来说变得越发重要。本文将介绍如何使用ThinkPHP6进行代码性能分析,以便定位和解决性能瓶颈问题。同时,我们还将通过代码示例来帮助读者更好地理解。性能分析的重要性代码性能分析是开发过程中不可或缺的一环。通过分析代码的性能,我们可以了解到哪些地方消耗了大量资

分析腾讯主要的编程语言是否为Go 分析腾讯主要的编程语言是否为Go Mar 27, 2024 pm 04:21 PM

标题:腾讯主要的编程语言是否为Go:一项深入分析腾讯作为中国领先的科技公司,在编程语言的选择上一直备受关注。近年来,有人认为腾讯主要采用Go作为主要的编程语言。本文将对腾讯主要的编程语言是否为Go进行深入分析,并给出具体的代码示例来支持这一观点。一、Go语言在腾讯的应用Go是一种由Google开发的开源编程语言,它的高效性、并发性和简洁性受到众多开发者的喜

分析静态定位技术的优缺点 分析静态定位技术的优缺点 Jan 18, 2024 am 11:16 AM

静态定位技术的优势与局限性分析随着现代科技的发展,定位技术已经成为我们生活中不可或缺的一部分。而静态定位技术作为其中的一种,具有其特有的优势和局限性。本文将对静态定位技术进行深入分析,以便更好地了解其应用现状和未来的发展趋势。首先,我们来看一下静态定位技术的优势所在。静态定位技术是通过对待定位对象进行观测、测量和计算来实现位置信息的确定。相较于其他定位技术,

TP6 Think-Swoole RPC服务的性能分析与优化策略 TP6 Think-Swoole RPC服务的性能分析与优化策略 Oct 12, 2023 am 10:34 AM

TP6Think-SwooleRPC服务的性能分析与优化策略摘要:本文主要对TP6和Think-SwooleRPC服务的性能进行了分析,并提出了一些优化策略。首先,通过性能测试评估了RPC服务的响应时间、并发能力和吞吐量。接着,从服务端性能优化和客户端性能优化两个方面提出了相应的解决方案和实践,包括代码示例。关键词:TP6、Think-Swoole、R

如何利用C++进行实时图像处理和分析? 如何利用C++进行实时图像处理和分析? Aug 26, 2023 am 10:39 AM

如何利用C++进行实时图像处理和分析?随着计算机视觉和图像处理的发展,越来越多的应用需要对实时图像进行处理和分析。而C++作为一种高效且强大的编程语言,被广泛应用于图像处理领域。本文将介绍如何利用C++进行实时图像处理和分析,同时提供一些代码示例。一、图像读取和显示在进行图像处理前,首先需要从文件或摄像头中读取图像数据,同时还需要将处理后的图像显示出来。首先

See all articles