求一组数字序列的分布情况(java)
最近需要做一个正态分布的函数图像所以要处理一段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)的更多相关文章
- 求数组的最小数、最大值,求一组数的平均数,sort函数详解,类数组转数组
求数组的最小值和最大值 //求数组当中最大值和最小值 var arr=[3,2,6,1,45,23,456,23,2,6,3,45,37,89,30]; //第一种方法 根据排序方法来求最大值和最小值 ...
- 【BZOJ1049】 [HAOI2006]数字序列
BZOJ1049 [HAOI2006]数字序列 dp好题? 第一问 第一问我会做!令\(b_i=a_i-i\),求一个最长不下降子序列. \(n-ans\)就是最终的答案. 第二问 好难啊.不会.挖坑 ...
- 洛谷P4331 [BOI2004] Sequence 数字序列 [左偏树]
题目传送门 数字序列 题目描述 给定一个整数序列 a1,a2,⋅⋅⋅,an ,求出一个递增序列 b1<b2<⋅⋅⋅<bn ,使得序列 ai 和 bi 的各项之差的绝对 ...
- 【BZOJ 1049】 1049: [HAOI2006]数字序列 (LIS+动态规划)
1049: [HAOI2006]数字序列 Description 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变 ...
- 洛谷 P2501 [HAOI2006]数字序列 解题报告
P2501 [HAOI2006]数字序列 题目描述 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变的幅度太大. ...
- luogu 4331 [BalticOI 2004]Sequence 数字序列
LINK:数字序列 这是一道论文题 我去看了一眼论文鸽的论文. 发现讲的还算能懂.可并堆的操作也讲的比较清晰. 对于这道题首先有一个小trick 我们给a数组全部减去其对应的下标这样我们求出来的b数组 ...
- 剑指 Offer 44. 数字序列中某一位的数字 + 找规律 + 数位
剑指 Offer 44. 数字序列中某一位的数字 Offer_44 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author Wale ...
- 【总结】matlab求两个序列的相关性
首先说说自相关和互相关的概念. 自相关 在统计学中的定义,自相关函数就是将一个有序的随机变量系列与其自身作比较.每个不存在相位差的系列,都与其都与其自身相似,即在此情况下,自相关函数值最大. 在信号 ...
- 【BZOJ】【1049】【HAOI2006】数字序列
DP 第一问比较水……a[i]-=i 以后就变成最长不下降子序列问题了,第二问这个结论好神奇,考试的时候怎么破?大胆猜想,不用证明?TAT 题解:http://pan.baidu.com/share/ ...
随机推荐
- Oracle自治事务
定 义: Autonomous transactions are independent transactions that can be called from within anot ...
- IOS Block 反向传值
1.在需要像上一个界面传值的.h 文件实现代理方法 @property (nonatomic, copy) void(^isOpenHandler)(BOOL) ; 2.在执行操作的时候需要江操作的结 ...
- Spark集群搭建简要
Spark集群搭建 1 Spark编译 1.1 下载源代码 git clone git://github.com/apache/spark.git -b branch-1.6 1.2 修改pom文件 ...
- PHP PSR-2 代码风格规范 (中文版)
代码风格规范 本篇规范是 PSR-1 基本代码规范的继承与扩展. 本规范希望通过制定一系列规范化PHP代码的规则,以减少在浏览不同作者的代码时,因代码风格的不同而造成不便. 当多名程序员在多个项目中合 ...
- php过滤iphone的emoji表情
public static function removeEmoji($text) { $clean_text = ""; // Match Emoticons $regexEmo ...
- CentOS 6.4 下安装 Apache
下载地址:http://mirror.bit.edu.cn/ 参数 描述 prefix 安装目录 enable-rewrite 开启 rewrite 模块 sysconfdir 配置文件目录 ./co ...
- Python计算机视觉3:模糊,平滑,去噪
我是一名初学者,如果你发现文中有错误,请留言告诉我,谢谢 图像的模糊和平滑是同一个层面的意思,平滑的过程就是一个模糊的过程. 而图像的去噪可以通过图像的模糊.平滑来实现(图像去噪还有其他的方法) 那么 ...
- 纯js实现积木(div)拖动效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- T-SQL 运算符
运算符 1.算术运算符 算术运算符 说明 + 加法 - 减法 * 乘法 / 除法 % 取模,两个整数相除后的余数 2.位运算符 位运算符 说明 &(与.and) 按位逻辑与运算 |(或.OR) ...
- 2013Q1全球网速排名 韩国第1美国第9 中国呐?(图)
德国著名统计公司Statista,最近公布了2013 Q1季度全球互联网网速排名数据.其中,韩国以平均14.2Mbps的网速继续排名世界第一. 此外,第二至第十名的国家和地区分别为:日本(11.7 M ...