卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

java如何截取最后一個(gè)字符 java怎么使用隨機(jī)抽取數(shù)組里的數(shù)據(jù)?

java怎么使用隨機(jī)抽取數(shù)組里的數(shù)據(jù)?Random r njava一段字符串中,如何得到大括號(hào)內(nèi)的字符?1.可以使用常規(guī)匹配檢查來(lái)做到這一點(diǎn)。2、是使用字符串的截取,首先(Java中,哪種壓縮算法可以

java怎么使用隨機(jī)抽取數(shù)組里的數(shù)據(jù)?

Random r n

java一段字符串中,如何得到大括號(hào)內(nèi)的字符?

1.可以使用常規(guī)匹配檢查來(lái)做到這一點(diǎn)。

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

Java中,哪種壓縮算法可以對(duì)30M左右的文件做到較大的壓縮率,解壓后文件MD5值要保持不變?

分析主體的需求如下:

1.高壓縮比

保持不變

對(duì)應(yīng)于技術(shù)語(yǔ)言,目標(biāo)壓縮算法必須滿足兩個(gè)條件:

1.高壓縮效率

2.無(wú)損壓縮

1.什么是無(wú)損壓縮?無(wú)損壓縮是指數(shù)據(jù)壓縮后,信息不丟失,可以完全恢復(fù)到壓縮前的原始狀態(tài)。

無(wú)損壓縮技術(shù)主要包括兩個(gè)步驟:

(1)建模

(2)根據(jù)模型,高頻部分用短碼表示,低頻部分用長(zhǎng)碼表示。

步驟(2)中使用的常見(jiàn)編碼技術(shù)是霍夫曼編碼(也用于D:low0,high 1。

(4)不斷讀取原始數(shù)據(jù)的字符,找到這個(gè)字符所在的區(qū)間,比如[L,H],更新:。

低低(高-低)* L

高-低(高-低)* H

(5)最后,將得到的區(qū)間[低,高]中的任意小數(shù)以二進(jìn)制形式輸出,得到編碼數(shù)據(jù)。

具體例子如下:

阿爾伯

統(tǒng)計(jì)它們出現(xiàn)的頻率和概率:

將這些字符的區(qū)間按照概率逐一排列,我們得到一個(gè)[0,1]的劃分區(qū)間:開(kāi)始編碼,初始區(qū)間為[0,1]。注意這里又用到了區(qū)間這個(gè)詞,但是這個(gè)區(qū)間和上面代表每個(gè)字符的概率區(qū)間不一樣。這里我們可以稱(chēng)之為編碼間隔,這個(gè)間隔會(huì)變,確切的說(shuō)會(huì)越來(lái)越小。循序漸進(jìn):

(1)初始編碼間隔為[0,1],即

低0

高1

(2)第一個(gè)字符A的概率區(qū)間是[0,0.2],那么L 0,H 0.2,更新:

低低(高-低)* L0

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

(3)如果第二個(gè)字符r的概率區(qū)間是[0.6,1],那么L 0.6,H 1,更新:

低低(高-低)* L0.12

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

(3)第三個(gè)字符B的概率區(qū)間是[0.2,0.4],那么L 0.2,H 0.4,更新:

低低(高-低)* L0.136

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

(4) ......

根據(jù)以上描述,不難看出這種算法的特點(diǎn):

每次編碼時(shí),在現(xiàn)有區(qū)間上找到子區(qū)間,形成 "區(qū)間集 ":比如一開(kāi)始A落在0到0.2上,那么編碼區(qū)間就縮小到[0,0.2],第二個(gè)字符是R,那么R對(duì)應(yīng)的子區(qū)間[0.12,0.2]就在[0,0.2]上按比例取出,以此類(lèi)推。最后,我們得到一個(gè)長(zhǎng)十進(jìn)制數(shù),它神奇地包含了所有的原始數(shù)據(jù)。

3.算術(shù)編碼的解碼過(guò)程是編碼過(guò)程的逆過(guò)程。從編碼的小數(shù)開(kāi)始,通過(guò)不斷尋找小數(shù)落在哪個(gè)概率區(qū)間,就可以一個(gè)一個(gè)地找出原來(lái)的字符。比如十進(jìn)制數(shù)是0.14432,第一個(gè)字符顯然是a,因?yàn)槁湓赱0,0.2]上。然后看[0,0.2]區(qū)間0.14432落在哪個(gè)相對(duì)子區(qū)間上,發(fā)現(xiàn)是[0.6,1],這樣就可以發(fā)現(xiàn)第二個(gè)字符是R,以此類(lèi)推。

是如何實(shí)現(xiàn)算術(shù)編碼的?/** *算術(shù)編碼* */公共類(lèi)算術(shù){ // Charact:{ A,B,C,D,E,F(xiàn),$}}私有char[] symbolchars // P: { 0.2,0.1,0.2,0.05,0.3,0.05,0.1 }私有double[]概率公共算術(shù)(char[] symbolchars,double[]概率){ symbolchars probability }/* * * * @ param symbols */public double coding(字符串符號(hào)){ char[]cs()double symbolRangeLow[]new double[probability . length]for(int I 0 I lt symbolRangeLow . length I){ symbolRangeLow[I]for(int j 0j lt I j){ symbolRangeLow[I]probability[j]} } int current symbol double low 0.0 double high 1.0 double range 1.0 for(int I 0 I lt cs . length I){ current symbol symbol(chars, cs[i])低低范圍* symbolRangeLow[currentSymbol]高低范圍*概率[currentSymbol]范圍高-低}返回低(高-低)/ 2 } /** * * @param codeNumber */公共字符串解碼(double codeNumber){ String symbolRangeLow[]new double[probability . length]for(int I 0 I lt symbolRangeLow . length I){ symbolRangeLow[I]0 for(int j 0j lt I j){ symbolRangeLow[I]概率[j] } }h I){ subSymbolRangeLow[I]symbolRangeLow[I]subSymbolRangeLow[I]probability[I]} int current symbol 0 do { for(int I 0 I lt symbol chars . length I){ if(codeNumber gt subSymbolRangeLow[I]ampamp codeNumber lt subSymbolRangeLow[I]subSymbolRange[I])

sub range sub symbolrangelow[I]sub range sub symbolrange[I]current symbol I } } double sub symbolprobsum sub range for(int I 0 I lt symbol chars . length I){

subSymbolRange[I]subRange * probability[I]subSymbolRangeLow[I]subSymbolProbSum subSymbolProbSum subSymbolRange[I]} symbol chars[current symbol]} while(symbol chars[current symbol]!$)return symbols } public int getIndex(char[]cs,char C){ for(int I 0 I lt cs . length I){ if(cs[I]C){ return-1 }//Test public static void main(String args[]){ char[]symbolchars { A,B,C,D,E,F(xiàn),$ } double[] probability { 0.2,0.1,0.2,0.05,0.3,0.05,0.1 }算術(shù)算術(shù)新算術(shù)(symbol chars,probabilitycodeNumber) ((codeNumber)) } }