最近需要做一个正态分布的函数图像所以要处理一段double序列

写了这个算法 

先上效果图:

核心思想:

1先根据步长计算每一个区间

2循环进行判断序列中每个数属于哪个区间

3用一个数组来保存每一个区间中 数的个数

这样就可以得到整个分布函数了 当然效率值得考虑 我的机器1百万以上的数据就会有问题了

这是一个double类型的例子 int型就更容易啦

上代码!

 package com.huang.distribution;

 import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections; public class DistributeDoubleList { /**
* @authr huanglizhe 2014-08-09
* 对若干个double值进行范围统计
*/
static int length=100;//随机生成多少个数据 1百万时效率有所下降
static int effective_number=3;//决定要保留的小数点后有效位数
static BigDecimal temp;
static ArrayList<Double> list;//原始数据
static double add_data;
static double max;
static double min;
static double range;//等间隔值=(max-min)/space
static int space =10;//步长 你要分为几个区间 public static void main(String[] args) {
generatedata();
getrange();
showdata();
distribute();
} //生成length个随机double序列 并添加到list中
public static void generatedata()
{
list=new ArrayList<Double>();
for(int i=0;i<length;i++)
{
temp =new BigDecimal(Math.random()*100);//取0-100随机数
//取effective_number=3位有效位
add_data=temp.setScale(effective_number, BigDecimal.ROUND_HALF_UP).doubleValue();
list.add(add_data);
} System.out.println("生成数据");
showdata();
} //打印已添加好的数据
public static void showdata()
{
System.out.println("list数据---------");
for(int i=0;i<list.size();i++)
{
System.out.print(" "+list.get(i));
}
System.out.println();
System.out.println("list数据---------");
System.out.println();
} //得到等间隔的值
public static void getrange()
{ Collections.sort(list);//排序 以方便得到最大最小值
min=list.get(0);
max=list.get(list.size()-1);
range=(max-min)/space;
temp =new BigDecimal(range);
range=temp.setScale(effective_number, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println("2:排序并计算min,max,range");
System.out.print("序列min="+min+"\t");
System.out.print("序列max="+max+"\t");
System.out.println("序列range="+range+"\t"); } public static void distribute()
{
int[] arr=new int[space+1];//用来保存这些值分布个数的数组
int k=0; //j执行j=add(j,range)的时候会有精度损失所以加到最后个range的时候往往<max 所以要多循环一次 所以会产生多一个k值
for(double j=min;j<=add(max,range);j=add(j,range))
{
//执行j=add(j,range)后 j就前进了一个范围
System.out.print("区间"+k+" ["+j+","+add(j,range)+"] ");//输出范围
//循环去除list中的值进行比较 如果j<值<j+range的话则属于这个范围
//然后领arr[k]的值+1
for(int i=0;i<list.size();i++)
{
if(list.get(i)>=j&&list.get(i)<add(j,range))
{
arr[k]++;
}
} k++;//因为j每次挪动一个范围所以k判断完后也要++
}
System.out.println();
System.out.println("----分布情况arr-------");
for(int i=0;i<=space;i++)
{ System.out.print(" "+arr[i]);//最后输出的分布个数 }
System.out.println(); //简易图像
for(int i=0;i<=space;i++)
{
System.out.print("区间"+i);
for(int j=0;j<arr[i];j++)
{ System.out.print("▊");
} System.out.println();
} } //处理2个double数相加 避免出现2个相加后等于.013999999999999等情况
public static double add(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();
} }

求一组数字序列的分布情况(java)的更多相关文章

  1. 求数组的最小数、最大值,求一组数的平均数,sort函数详解,类数组转数组

    求数组的最小值和最大值 //求数组当中最大值和最小值 var arr=[3,2,6,1,45,23,456,23,2,6,3,45,37,89,30]; //第一种方法 根据排序方法来求最大值和最小值 ...

  2. 【BZOJ1049】 [HAOI2006]数字序列

    BZOJ1049 [HAOI2006]数字序列 dp好题? 第一问 第一问我会做!令\(b_i=a_i-i\),求一个最长不下降子序列. \(n-ans\)就是最终的答案. 第二问 好难啊.不会.挖坑 ...

  3. 洛谷P4331 [BOI2004] Sequence 数字序列 [左偏树]

    题目传送门 数字序列 题目描述 给定一个整数序列 a1​,a2​,⋅⋅⋅,an​ ,求出一个递增序列 b1​<b2​<⋅⋅⋅<bn​ ,使得序列 ai​ 和 bi​ 的各项之差的绝对 ...

  4. 【BZOJ 1049】 1049: [HAOI2006]数字序列 (LIS+动态规划)

    1049: [HAOI2006]数字序列 Description 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变 ...

  5. 洛谷 P2501 [HAOI2006]数字序列 解题报告

    P2501 [HAOI2006]数字序列 题目描述 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变的幅度太大. ...

  6. luogu 4331 [BalticOI 2004]Sequence 数字序列

    LINK:数字序列 这是一道论文题 我去看了一眼论文鸽的论文. 发现讲的还算能懂.可并堆的操作也讲的比较清晰. 对于这道题首先有一个小trick 我们给a数组全部减去其对应的下标这样我们求出来的b数组 ...

  7. 剑指 Offer 44. 数字序列中某一位的数字 + 找规律 + 数位

    剑指 Offer 44. 数字序列中某一位的数字 Offer_44 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author Wale ...

  8. 【总结】matlab求两个序列的相关性

    首先说说自相关和互相关的概念.  自相关 在统计学中的定义,自相关函数就是将一个有序的随机变量系列与其自身作比较.每个不存在相位差的系列,都与其都与其自身相似,即在此情况下,自相关函数值最大. 在信号 ...

  9. 【BZOJ】【1049】【HAOI2006】数字序列

    DP 第一问比较水……a[i]-=i 以后就变成最长不下降子序列问题了,第二问这个结论好神奇,考试的时候怎么破?大胆猜想,不用证明?TAT 题解:http://pan.baidu.com/share/ ...

随机推荐

  1. Oracle自治事务

    定        义: Autonomous transactions are independent transactions that can be called from within anot ...

  2. IOS Block 反向传值

    1.在需要像上一个界面传值的.h 文件实现代理方法 @property (nonatomic, copy) void(^isOpenHandler)(BOOL) ; 2.在执行操作的时候需要江操作的结 ...

  3. Spark集群搭建简要

    Spark集群搭建 1 Spark编译 1.1 下载源代码 git clone git://github.com/apache/spark.git -b branch-1.6 1.2 修改pom文件 ...

  4. PHP PSR-2 代码风格规范 (中文版)

    代码风格规范 本篇规范是 PSR-1 基本代码规范的继承与扩展. 本规范希望通过制定一系列规范化PHP代码的规则,以减少在浏览不同作者的代码时,因代码风格的不同而造成不便. 当多名程序员在多个项目中合 ...

  5. php过滤iphone的emoji表情

    public static function removeEmoji($text) { $clean_text = ""; // Match Emoticons $regexEmo ...

  6. CentOS 6.4 下安装 Apache

    下载地址:http://mirror.bit.edu.cn/ 参数 描述 prefix 安装目录 enable-rewrite 开启 rewrite 模块 sysconfdir 配置文件目录 ./co ...

  7. Python计算机视觉3:模糊,平滑,去噪

    我是一名初学者,如果你发现文中有错误,请留言告诉我,谢谢 图像的模糊和平滑是同一个层面的意思,平滑的过程就是一个模糊的过程. 而图像的去噪可以通过图像的模糊.平滑来实现(图像去噪还有其他的方法) 那么 ...

  8. 纯js实现积木(div)拖动效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. T-SQL 运算符

    运算符 1.算术运算符 算术运算符 说明 + 加法 - 减法 * 乘法 / 除法 % 取模,两个整数相除后的余数 2.位运算符 位运算符 说明 &(与.and) 按位逻辑与运算 |(或.OR) ...

  10. 2013Q1全球网速排名 韩国第1美国第9 中国呐?(图)

    德国著名统计公司Statista,最近公布了2013 Q1季度全球互联网网速排名数据.其中,韩国以平均14.2Mbps的网速继续排名世界第一. 此外,第二至第十名的国家和地区分别为:日本(11.7 M ...