首页 > 教育培训

java如何截取最后一个字符 java怎么使用随机抽取数组里的数据?

java怎么使用随机抽取数组里的数据?

randomrn

java一段字符串中,如何得到大括号内的字符?

1.可以使用常规匹配检查来做到这一点。

2、是使用字符串的截取,首先(

java如何截取最后一个字符 java怎么使用随机抽取数组里的数据?

java中,哪种压缩算法可以对30m左右的文件做到较大的压缩率,解压后文件md5值要保持不变?

分析主体的需求如下:

1.高压缩比

保持不变

对应于技术语言,目标压缩算法必须满足两个条件:

1.高压缩效率

2.无损压缩

1.什么是无损压缩?无损压缩是指数据压缩后,信息不丢失,可以完全恢复到压缩前的原始状态。

无损压缩技术主要包括两个步骤:

(1)建模

(2)根据模型,高频部分用短码表示,低频部分用长码表示。

步骤(2)中使用的常见编码技术是霍夫曼编码(也用于d:low0,high1。

(4)不断读取原始数据的字符,找到这个字符所在的区间,比如[l,h],更新:。

低低(高-低)*l

高-低(高-低)*h

(5)最后,将得到的区间[低,高]中的任意小数以二进制形式输出,得到编码数据。

具体例子如下:

阿尔伯

统计它们出现的频率和概率:

将这些字符的区间按照概率逐一排列,我们得到一个[0,1]的划分区间:开始编码,初始区间为[0,1]。注意这里又用到了区间这个词,但是这个区间和上面代表每个字符的概率区间不一样。这里我们可以称之为编码间隔,这个间隔会变,确切的说会越来越小。循序渐进:

(1)初始编码间隔为[0,1],即

低0

高1

(2)第一个字符a的概率区间是[0,0.2],那么l0,h0.2,更新:

低低(高-低)*l0

高-低(高-低)*h0.2

(3)如果第二个字符r的概率区间是[0.6,1],那么l0.6,h1,更新:

低低(高-低)*l0.12

高-低(高-低)*h0.2

(3)第三个字符b的概率区间是[0.2,0.4],那么l0.2,h0.4,更新:

低低(高-低)*l0.136

高-低(高-低)*h0.152

(4)......

根据以上描述,不难看出这种算法的特点:

每次编码时,在现有区间上找到子区间,形成"区间集":比如一开始a落在0到0.2上,那么编码区间就缩小到[0,0.2],第二个字符是r,那么r对应的子区间[0.12,0.2]就在[0,0.2]上按比例取出,以此类推。最后,我们得到一个长十进制数,它神奇地包含了所有的原始数据。

3.算术编码的解码过程是编码过程的逆过程。从编码的小数开始,通过不断寻找小数落在哪个概率区间,就可以一个一个地找出原来的字符。比如十进制数是0.14432,第一个字符显然是a,因为落在[0,0.2]上。然后看[0,0.2]区间0.14432落在哪个相对子区间上,发现是[0.6,1],这样就可以发现第二个字符是r,以此类推。

是如何实现算术编码的?/***算术编码**/公共类算术{//charact:{a,b,c,d,e,f,$}}私有char[]symbolchars//p:{0.2,0.1,0.2,0.05,0.3,0.05,0.1}私有double[]概率公共算术(char[]symbolchars,double[]概率){symbolcharsprobability}/****@paramsymbols*/publicdoublecoding(字符串符号){char[]cs()doublesymbolrangelow[]newdouble[probability.length]for(inti0iltsymbolrangelow.lengthi){symbolrangelow[i]for(intj0jltij){symbolrangelow[i]probability[j]}}intcurrentsymboldoublelow0.0doublehigh1.0doublerange1.0for(inti0iltcs.lengthi){currentsymbolsymbol(chars,cs[i])低低范围*symbolrangelow[currentsymbol]高低范围*概率[currentsymbol]范围高-低}返回低(高-低)/2}/****@paramcodenumber*/公共字符串解码(doublecodenumber){stringsymbolrangelow[]newdouble[probability.length]for(inti0iltsymbolrangelow.lengthi){symbolrangelow[i]0for(intj0jltij){symbolrangelow[i]概率[j]}}hi){subsymbolrangelow[i]symbolrangelow[i]subsymbolrangelow[i]probability[i]}intcurrentsymbol0do{for(inti0iltsymbolchars.lengthi){if(codenumbergtsubsymbolrangelow[i]ampampcodenumberltsubsymbolrangelow[i]subsymbolrange[i])

subrangesubsymbolrangelow[i]subrangesubsymbolrange[i]currentsymboli}}doublesubsymbolprobsumsubrangefor(inti0iltsymbolchars.lengthi){

subsymbolrange[i]subrange*probability[i]subsymbolrangelow[i]subsymbolprobsumsubsymbolprobsumsubsymbolrange[i]}symbolchars[currentsymbol]}while(symbolchars[currentsymbol]!$)returnsymbols}publicintgetindex(char[]cs,charc){for(inti0iltcs.lengthi){if(cs[i]c){return-1}//testpublicstaticvoidmain(stringargs[]){char[]symbolchars{a,b,c,d,e,f,$}double[]probability{0.2,0.1,0.2,0.05,0.3,0.05,0.1}算术算术新算术(symbolchars,probabilitycodenumber)((codenumber))}}

概率编码区间

原文标题:java如何截取最后一个字符 java怎么使用随机抽取数组里的数据?,如若转载,请注明出处:https://www.wmyjt.com/tag/9618.html
免责声明:此资讯系转载自合作媒体或互联网其它网站,「共道号」登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。