压缩圆周率
圆周率是无穷尽的。取前面的100万位,玩玩压缩。
目标:
1、生成的文件最小。
2、程序可以根据生成的文件,打印出圆周率前面的100万位。
第一考虑的是:使用四位编码,那么,每个字节可以存储两个数字。这样,可以压缩一半。
查看圆周率小数点后一百万位
http://pi.911cha.com/3.1415926.txt
下午写了点代码对数据进行一些分析:
package test;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;
import java.util.Vector;
public class YsYzl {
private static void test01()
{
for(int i=0; i<1024; i++)
{
String s = Integer.toBinaryString(i);
int len = s.length();
for(int j=len; j<10; j++)
{
s = '0' + s;
}
System.out.println(s + " " + i);
}
}
private static void test02()
{
for(int i=0; i<256; i++)
{
String s = Integer.toBinaryString(i);
int len = s.length();
for(int j=len; j<8; j++)
{
s = '0' + s;
}
System.out.println(s + " " + i);
}
}
/**
* 从文件中获取圆周率
* @throws Exception
*/
private static void getYzl() throws Exception
{
long begin = System.currentTimeMillis();
//System.out.println(System.currentTimeMillis());
InputStream is = YsYzl.class.getResourceAsStream("yzl.txt");
int buf = 0;
StringBuffer sb = new StringBuffer();
while(true)
{
buf = is.read();
if(buf==-1)
{
break;
}
if(buf!=13 && buf!=10)
{
sb.append((char)buf);
}
}
sYzl = sb.toString();
is.close();
System.out.println(System.currentTimeMillis()-begin);
}
/**
* 打印出圆周率。
*/
private static void print()
{
System.out.println(sYzl.length());
//System.out.println(sYzl); //不能通过本方法打印出圆周率
for(int i=0; i<10000; i++)
//for(int i=0; i<10; i++)
{
for(int j=0; j<100; j++)
{
System.out.print(sYzl.charAt(i*100 + j));
}
System.out.println();
}
}
private static int doStatistics(String str)
{
int count = 0;
int fromIndex = 0;
while(true)
{
int idx = sYzl.indexOf(str, fromIndex);
if(idx==-1)
{
break;
}
count++;
fromIndex = idx+str.length();
}
//System.out.println(str + ":" + count);
return count;
}
/**
* 统计,计算长串的数量
* 比如,有如下五个数据
000:871
001:973
002:1021
003:989
004:989
将存储为
1021
002
989
003
004
973
001
871
000
*/
// private static void statistics()
// {
// int count = 0;
// String str = "";
// for(int i=0; i<1000; i++)
// {
// if(i<10)
// {
// str = "00" + i;
// }
// else if(i<100)
// {
// str = "0" + i;
// }
// else
// {
// str = "" + i;
// }
//
// count = doStatistics(str);
// Vector<String> vct = tmCount.get(count);
// if(vct==null)
// {
// vct = new Vector<String>();
// tmCount.put(count, vct);
// }
// vct.add(str);
// }
// }
// private static void statistics()
// {
// int count = 0;
// String str = "";
// for(int i=0; i<10000; i++)
// {
// if(i<10)
// {
// str = "000" + i;
// }
// else if(i<100)
// {
// str = "00" + i;
// }
// else if(i<1000)
// {
// str = "0" + i;
// }
// else
// {
// str = "" + i;
// }
//
// count = doStatistics(str);
// Vector<String> vct = tmCount.get(count);
// if(vct==null)
// {
// vct = new Vector<String>();
// tmCount.put(count, vct);
// }
// vct.add(str);
//
//// if((i/100)*100==i)
//// {
//// System.out.println("stat:" + i);
//// //System.out.flush();
//// }
// }
//
// System.out.println(tmCount.lastKey());
// }
private static void statistics()
{
int count = 0;
String str = "";
for(int i=0; i<10; i++)
{
// if(i<10)
// {
// str = "0" + i;
// }
// else
// {
// str = "" + i;
// }
str = "" + i;
count = doStatistics(str);
Vector<String> vct = tmCount.get(count);
if(vct==null)
{
vct = new Vector<String>();
tmCount.put(count, vct);
}
vct.add(str);
// if((i/100)*100==i)
// {
// System.out.println("stat:" + i);
// //System.out.flush();
// }
}
System.out.println(tmCount.lastKey());
}
private static void printCount()
{
System.out.println("*************printCount");
//Set<Integer> set = tmCount.keySet().iterator();
Iterator<Integer> keys = tmCount.keySet().iterator();
while(keys.hasNext())
{
int key = keys.next();
System.out.print(key + ":");
Vector<String> vct = tmCount.get(key);
Iterator<String> values = vct.iterator();
while(values.hasNext())
{
System.out.print(values.next());
System.out.print(",");
}
System.out.println();
}
}
public static void main(String[] args) {
try {
//test01();
getYzl();
//print();
statistics();
printCount();
} catch (Exception e) {
e.printStackTrace();
}
}
public static String sYzl; //圆周率的值
public static TreeMap<Integer, Vector<String>> tmCount = new TreeMap<Integer, Vector<String>>();
}
一些统计数据:
统计数字出现的次数:
格式:
99548:6 表示,数字 6 出现 99548 次。
每个数字出现次数
99548:6,
99758:1,
99800:7,
99959:0,
99985:8,
100026:2,
100106:9,
100229:3,
100230:4,
100359:5,
两位的数字出现的次数,前若干个
10110:21,
10112:76,
10147:60,
10148:19,
10173:08,
10188:35,
10193:46,
10194:54,
10224:27,
10239:94,
三位的数字出现的次数,前若干个
133:0714,6490,
134:0735,5452,
135:0275,6477,
136:7801,
137:3573,
138:4710,9944,
141:3391,
四位的数字出现的次数,前若干个
1073:244,270,
1075:027,
1076:944,
1077:195,
1078:136,735,
1086:934,
1089:160,453,
1092:654,
分享到:
相关推荐
标题中的"CalcPI.rar"可能是一个压缩文件,包含了一个名为"CalcPI"的程序或代码库,用于计算圆周率。"circumference_圆周率"表明这个程序与数学中的圆周率π有关,可能是通过计算圆的周长来估算π的值。圆周率是圆的...
虽然没有明确指出使用哪种编程语言,但根据文件扩展名,可以推测这可能是C++、Python或其他支持.zip和.rar压缩格式的语言。源码文件提供了实现上述算法的详细步骤,包括定义线程、生成随机数、判断点的位置以及同步...
欧拉巡回压缩 重光分解(HLD) 最低共同祖先(LCA) 欧拉巡回方法:O(log n)查询 深度方法:O(log n)查询 稀疏表:O(1)查询但很长 质心分解:求解穿过电流质心的所有路径 数据结构 稀疏表 凸包技巧(C
欧拉公式求长期率的matlab代码一维可压缩欧拉方程控制的二材料流动的幻影流体方法 剑桥大学科学计算小组的Murray Cutforth 入门 这些说明将为您提供在本地计算机上编译的项目的副本。 先决条件 Blitz ++库-在以下...
欧拉公式求长期率的matlab代码一维可压缩欧拉方程控制的二材料流动的幻影流体方法 剑桥大学科学计算小组的Murray Cutforth 入门 这些说明将为您提供在本地计算机上编译的项目的副本。 先决条件 Blitz ++库-在以下...
可压缩的Euler / Navier-Stokes方程的三维混合元非结构化有限体积求解器 #Quick Intro 1-打开终端,然后转到./src/文件夹,然后输入“ make” 2-执行生成的二进制“ ns3d”。 该代码开始在平板上运行可压缩的粘性...
从描述来看,这个压缩文件包含两个编程语言实现的计算圆周率的程序,一个是用C++编写,另一个则是用C语言编写的。这些程序可能采用了不同的算法来近似计算圆周率π,这是计算机科学中一个经典的问题。 圆周率(Pi)...
是具有基于补丁的自适应网格细化(AMR)技术的可压缩Navier-Stokes / Euler求解器。 (LLNL)的(SAMRAI)促进了代码的并行化以及所有单元的构造,管理和存储。 该代码由各种显式的高阶有限差分冲击捕捉WCNS(加权...
欧拉公式求长期率的matlab代码PyDDM-漂移扩散模型模拟器 概述 PyDDM是漂移扩散模型(DDM)的仿真器和建模框架,其重点是认知神经科学。...如果从源安装,请解压缩并执行以下操作: $ python3 setup.py install 系统要
欧拉公式求长期率的matlab代码UnstEuler2D 完全验证的非结构化二维Euler求解器 快速开始 1-确保您的计算机上安装了python和matplotlib。 2-您需要一个C ++编译器。 我建议使用Gcc编译器,但是可以通过在makefile中...
解压缩"euler205-master"文件后,你将看到完整的代码实现和可能的详细解释。 在MATLAB中,计算π还有其他方法,如Bailey–Borwein–Plouffe (BBP) 公式、Chudnovsky算法等,这些方法通常能更快地获得高精度的π值。...
综合、设计性实验这些实验鼓励学生综合运用所学知识解决实际问题,如数据压缩、数据加密存储、圆周率计算和规划论建模与求解。这些实验有助于培养学生的创新思维和问题解决能力。 实验一 数据压缩实验学生将学习...
准备好在Delphi中压缩文件,发送到PHP,通过PHP解压缩,处理数据,获取结果并再次压缩并返回Delphi以将其解压缩的功能! 我正在实现一种持久性,其中可以传递ClientDataSet并将其从几个命令发送到服务器,PHP将负责...
6. **数学和几何**:创建花朵形状可能涉及到三角函数、圆周率和几何计算。 7. **音效处理**:虽然1k的限制很严苛,但有可能通过Web Audio API压缩音频数据,实现声音与画面同步。 总的来说,"js1kdemo flower"是对...
实验步骤包括下载Spark压缩文件包,解压缩到/usr/local文件夹下,修改配置文件spark-env.sh,添加export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath),验证Spark是否安装成功。最终,我们可以...
标题中的“Pi.rar_pi值”表明这是一个与计算圆周率(Pi)相关的压缩文件,而“能算800位Pi值的超级代码”描述暗示其中包含一段程序或算法,能够高效地计算出高达800位的圆周率数字。在IT领域,计算高精度的Pi值是一...
Navier-Stokes方程(笛卡尔,可压缩,保守) 时间离散化:RK2和RK3 空间离散化:WENO3和WENO5(对流通量)+二阶中心方案(扩散通量) 边界处理:沉浸边界法 固体动力学: 主导方程:牛顿第二定律(平移),欧拉方程...
压缩的数据文件(即.dat文件)将放在./euler_data/$dataset_name/中。 训练 关于Amazon Beauty数据集的培训示例: python run_loop . py - - mode = train - - data_dir = . / euler_data / Beauty \ - - max_id = ...
步骤(解压缩后): 打开pd / controller.pd 如果您的鼠标光标是手(而不是箭头),请按ctrl + e 打开avatar_osc.blend 将鼠标放在3D面板中,然后按ctrl + p 返回到pd并使用滑块,您会看到身体部位移动。 说明:...
**压缩包子文件的文件名称列表:新建文件夹** 尽管没有具体的文件信息,但通常在压缩包中,"新建文件夹"可能包含了SUPER_PI的可执行文件和其他相关文档,如使用指南、帮助文件或日志文件。用户解压后,直接运行这个...