압축 원주율
원주율 은 무궁무진 하 다.앞 에 있 는 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,
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다른 사람의 웹사이트 편집: contenteditable 및 designMode그래도 우리가 그렇게 할 수 있다고 생각하는 것은 멋진 일입니다. 제가 강조하고 싶었던 일종의 관련 API가 실제로 몇 개 있기 때문에 오늘 그것을 가져왔습니다. contenteditable는 "true" 값이 할당...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.