霍纳法则
产生随机数
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中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

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

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

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

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

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

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

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

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