#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void main()
{
ifstream infile("c:\\1.txt");//自己改文件名
ofstream outfile("c:\\2.txt");
char cCurrent,cPre;
int iCount=0;
cPre=-1;
while(infile>>cCurrent)
{
if(cCurrent=='\n') continue;
if(cPre==-1) cPre=cCurrent;
if(cPre==cCurrent)
{
iCount++;
}
else
{
if(cPre>='0'&&cPre<='9')
outfile<<iCount<<'*'<<cPre<<' ';
else
outfile<<iCount<<cPre<<' ';
cPre=cCurrent;
iCount=1;
}
}
if(cPre>='0'&&cPre<='9')
outfile<<iCount<<'*'<<cPre<<' ';
else
outfile<<iCount<<cPre<<' ';
infile.close();
outfile.close();
}
B. 如何用哈夫曼演算法實現簡單的文件壓縮
我使用兩種方法從zip文件中讀取數據,第一種的代碼是從「UTF開始」到「UTF結束」,看到有人(http://www.csdn.net/develop/article/6839.shtm)介紹過這種用法,但是我用的時候,出現java.io.UTFDateFormatException異常,我跟蹤調試的時候,發現問題出現在讀取的時候,寫是可以的。
第二種的代碼是從「int開始」到「int結束」,可以正確解壓縮各種文件(二進制讀取,應該也沒問題的),但是速度很慢,請問各位大蝦,有沒有什麼辦法解決?
代碼如下:
……
String doc="";
zin = new ZipInputStream(new FileInputStream(待解壓縮文件));
while(((entry = zin.getNextEntry()) != null)&&!entry.isDirectory())
{
FileOutputStream fout =
new FileOutputStream(解壓縮後的文件名);
DataOutputStream dout = new DataOutputStream(fout);
DataInputStream in = new DataInputStream(zin);
/*
//UTF開始
doc=in.readUTF();
in.close();
dout.writeUTF(doc);
dout.close();
//UTF結束
*/
//int開始
int c;
while((c = in.read()) != -1)
dout.write(c);
dout.close();
//int結束
fout.close();
zin.closeEntry();
System.out.println("Close entry successful!");
}
zin.close();
……
C. 怎樣壓縮文件!要最快最詳細簡單的
WinRAR壓縮功能強大,其獨特的多媒體壓縮演算法和緊固式壓縮法更是有針對性地提高了壓縮率。2.50版開始完全兼容RAR和ZIP格式;易用性也大大提高。WinRAR的最大優點是壓縮率大,速度快。當設置成最快壓縮方式的時候,壓縮包比ZIP小,而速度卻與PKZIP不相上下,更可支持非RAR壓縮文件。 1、軟體下載 下載軟體,我們最好到它的老家www.rarsoft.com下載。因為在這里可以下載到最新的版本(筆者當前使用的是2.71版本),當然是英文版本。如果你想使用中文的WinRAR,你可以去 http://www.newhua.com下載它的漢化包。 2、軟體安裝 安裝WinRAR非常簡單,執行下載回來的可執行文件,一路[確認]就可以了。設置WinRAR的文件關聯窗口,為了能發揮它的效能,最好選擇"Select all",因為這樣才能讓WinRAR管理它可以識別的壓縮文件類型。並勾選旁邊的"Put WinRAR to Desktop"、"Put WinRAR to Start Menu"、"Creat WinRAR program group",在桌面、開始菜單、程序組創建WinRAR快捷方式。如果你下載了漢化包,接著再執行漢化安裝文件將WinRAR漢化就可以了。 3、壓縮文件 要對某個文件夾下所有的文件進行壓縮打包時,我們不需要打開WinRAR的主程序窗口,而可以選定該文件夾圖標,單擊滑鼠右鍵,在彈出的菜單中選"Add to Archive"命令,然後會彈出窗口,在"General"頁面中輸入壓縮後的文件名,默認擴展名為"?.rar"。在Advanced中設置保存路徑,其他的使用默認設置即可。單擊[確定]後屏幕上還會出現壓縮進度狀態條;如果要對某個文件夾下的一個或數個文件進行壓縮打包,則進入該文件夾,按住[Ctrl]鍵的同時,選定文件,隨後再進行以上操作。 在壓縮文件夾的時候,如果要在當前路徑創建同名壓縮文件,方法則更簡單,在該文件夾上單擊滑鼠右鍵,在彈出的菜單中選擇"Add to『***.rar'",其中***為當前文件夾名稱。這樣操作,比打開WinRAR壓縮窗口,然後再逐一地添加文件要快捷得多了。 4、解壓縮文件 對於使用WinRAR壓縮的RAR壓縮文件,雙擊它就可以使用WinRAR進入壓縮文件內部,感覺和打開普通文件夾沒什麼兩樣。這時的按鈕會比選中一般文件多一些,分別為:解壓縮至當前文件夾,解壓縮至指定文件夾,檢測壓縮文檔,預覽文檔,刪除文檔,為壓縮文檔寫備注,生成自解壓文件。你只需選中文檔,再按所需功能的按鈕就可以實現,非常簡便。 WinRAR也提供了更簡單的解壓縮方法:使用滑鼠右鍵單擊壓縮文件,在系統右鍵菜單中包括了兩個WinRAR提供的命令,其中"Extract files"表示擴展壓縮包文件到當前路徑,"Extract to XXX\"表示在當前路徑下創建與壓縮包名字相同的文件夾,然後將壓縮包文件擴展到這個路徑下,可見無論使用哪個,都是很方便的。 5、創建自解壓文件 有的時候,我們更需要的是創建自解壓文件,這樣就可以隨時隨地地調用它,而不需要壓縮軟體的支持。創建自解壓文件的方法也很簡單,在設置壓縮文件屬性的圖2窗口的"General"頁面中,勾選"Create SFX archive"(創建自解壓文件),你會發現剛才的*.rar變成了*.exe! 6、生成分卷自解壓文件 在進行數據備份或大文件交換時,通常採取用壓縮軟體分卷壓縮到軟盤上的辦法,而在復原的時候則需要用到該壓縮軟體,否則這些壓縮文件便無法復原。WinRAR開了生成分卷自解壓文件的先河,製作的分卷壓縮文件,離開WinRAR照用不誤! 首先在主界面中選定欲壓縮的文件夾或文件,單擊滑鼠右鍵,從快捷菜單中選"Add to Archive"命令,出現小窗口,先將壓縮文檔名稱填入,需要帶路徑(如A:\文件名)。然後從容量(Volume size)下拉菜單中選擇與軟盤對應的數值。有360KB、720KB、1.2MB、1.44MB、2.88MB和自動檢測六個備選項,也可以輸入自己設定的數值。在文檔選項區內選中"自解壓"(SFX archive)方式,最後單擊[OK],則開始進行分卷壓縮,生成的第一個文件擴展名為.exe,第二個文檔擴展名為.r00,第三個為.r01,依此類推。復原時,先插入第一張軟盤,執行?.exe文件,隨後會提示依次插入其他軟盤,則順利地完成解壓縮。 7、轉換壓縮格式 WinRAR提供了將擴展名為.rar的壓縮包文件轉換為.exe文件功能(也就是創建自解壓文件),使用該功能,可以方便地將以前創建的普通壓縮格式轉換為自解壓文件,這樣一來就為用戶進行軟體的解壓縮提供了極大的方便。如果想進行該項操作,可採用如下的方法:首先在程序界面中打開相應的RAR壓縮包,然後在文件列表中單擊滑鼠右鍵,並從關聯的菜單中選擇"Convert archive to SFX"命令,程序會給出對話框"Select SFX mole",在其中選擇生成的EXE文件格式,然後單擊[OK]按鈕確定就可以了。
D. 深入淺出lz4壓縮演算法
lz4是目前綜合來看效率最高的壓縮演算法,更加側重壓縮解壓速度,壓縮比並不是第一。在當前的安卓和蘋果操作系統中,內存壓縮技術就使用的是lz4演算法,及時壓縮手機內存以帶來更多的內存空間。本質上是時間換空間。
lz4壓縮演算法其實很簡單,舉個壓縮的栗子
其中兩個括弧內的便代表的是壓縮時檢測到的重復項,(5,4) 代表向前5個byte,匹配到的內容長度有4,即"bcde"是一個重復。當然也可以說"cde"是個重復項,但是根據演算法實現的輸入流掃描順序,我們取到的是第一個匹配到的,並且長度最長的作為匹配。
壓縮後的數據是下面的格式
其他情況也可能有連續的匹配:
Literals 指沒有重復、首次出現的位元組流,即不可壓縮的部分
Match 指重復項,可以壓縮的部分
Token 記錄literal長度,match長度。作為解壓時候memcpy的參數
可以想到,如果重復項越多或者越長,壓縮率就會越高。上述例子中"bcde"在壓縮後,用(5,4)表示,即從4個bytes壓縮成了3個bytes來表示,其中offset 2bytes, match length 1byte,能節省1個byte。
大致流程,壓縮過程以至少4個bytes為掃描窗口查找匹配,每次移動1byte進行掃描,遇到重復的就進行壓縮。
由於offset用2bytes表示,只能查找到到2^16(64kb)距離的匹配,對於壓縮4Kb的內核頁,只需要用到12位。
掃描的步長1byte是可以調整的,即對應LZ4_compress_fast機制,步長變長可以提高壓縮解壓速度,減少壓縮率。
我們來看下 apple的lz4實現
壓縮理解了其實解壓也很簡單
根據解壓前的數據流,取出token內的length,literals直接復制到輸出,即memcpy(src,dst,length)
遇到match,在從前面已經拷貝的literals復制到後面即可
E. 壓縮文件如何達到高壓縮率
壓縮文件達到高壓縮率的方法有:
1、首先,我們對我們需要進行壓縮操作的文件擊右鍵,選擇「添加到壓縮文件」。
2、由於我們在進行壓縮文件的時候,如果我們將文件格式選擇為.rar,一般來說這樣壓縮的文件的壓縮比率是較高的。如果我們選擇了.zip文件格式,那麼一般情況下壓縮比率是比較小的,所以我推薦大家還是選擇為.rar的文件格式。
3、接下來,我們需要進行的操作就是,將「創建固實壓縮文件」和「測試壓縮文件」兩個選項勾選,這樣我們下來壓縮的文件就會比較小,大家可以看看自己文件屬性裡面的壓縮比率,如果文件很大的話,會很明顯。希望大家勾選「測試壓縮文件」,因為我們可能會在壓縮文件的過程中遇到某些未知錯誤。
4、接下來,我們就可以點擊「確定」,軟體就會自動進行壓縮操作,然後看看我們的文件的壓縮比率吧。
5、如果我們需要壓縮的文件的體積很大,那麼為了節約時間,一般情況下也是可以將文件格式選擇為.zip,畢竟這樣可以節約很多時間的。
(5)簡單壓縮演算法擴展閱讀:
常用的圖像壓縮軟體有:
①JPEG Optimizer
JPEG Optimizer是一個可以按照指定的壓縮比壓縮JPEG格式圖片的工具軟體,它使用Magic Compress技術,能對 JPEG圖形文件壓縮50%而不損失畫質,自定壓縮比,能即時顯現壓縮後的圖片,比較差異,效果相當不錯。而所有這一切,只需要通過調整桿進行壓縮比調整即可。
②The JPEG Wizard
The JPEG Wizard可以在不影響圖像質量的情況下對圖片進行最大限度的壓縮,同時支持對圖片的局部壓縮、剪切、旋轉,調整圖片的對比度、亮度和色度。另外,The JPEGWizard還具有較強的批處理功能,避免重復性操作。
③7-Zip
7-Zip是一款號稱有著現今最高壓縮比的壓縮軟體,它不僅支持獨有的7z文件格式,而且還支持各種其他壓縮文件格式,其中包括ZP、RAR、CAB、GZIP、BZP2和TAR。此軟體壓縮的壓縮比要比普通ZIP文件30%~50%。因此,它可以把經 Winzip壓縮的文件再壓縮2%~10%。
F. 簡述JPEG壓縮演算法
首先你需要了解幾個概念,有損壓縮,量化,行程編碼。
對一副圖片來說,bitmap就是原始格式,沒經過任何壓縮的。
量化就是把所有0-255的像素值進行歸類,然後分成盡量少的積累,這要存儲量就小很多了,對於JEPG來說量化是有損壓縮的起源。
最後就是對所有的已經歸類過的點進行行程編碼,然後就壓縮完了
G. 怎樣壓縮500KB的照片到100KB
圖片壓縮可以用在線的一些工具比較方便,比如用這個在線智能圖片壓縮工具,你就可以把圖片文件壓縮到你想要的體積大小,例如你設置壓縮數值到100kb,等待幾秒鍾,在線圖片壓縮工具自動把圖片的文件大小壓縮到最高100kb了。通俗點說,也就是你想要設定壓縮到多少kb文件大小,他壓縮完的輸出圖片就是多少kb了,這應該是已經很方便了。在線智能圖片壓縮,壓縮圖片體積大小,JPG|PNG大圖壓縮
在線圖片智能壓縮使用步驟:
一、首先點擊加號添加需要壓縮的圖片。目前已知支持對jpg、png、webp、bmp等多種常見的圖片格式進行壓縮,如果選擇圖片後正常顯示並能夠壓縮成功,則代表支持該圖片格式。
二、可以自行修改圖片需要被壓縮到的最大寬高尺寸,默認為圖片原始的寬高尺寸,並且寬高比例是自動鎖定的,確保圖片不會變形。
三、必須設置圖片被壓縮後,期望輸出的壓縮之後圖片文件的最大佔用空間,該選項是必填的。
四、選擇圖片壓縮的演算法。默認為智能混合壓縮演算法,絕大多數情況下使用默認演算法進行圖片壓縮即可。
五、當你設置壓縮後的大小單位為」Kb「時,壓縮大小的設定值不能小於1Kb,但圖片壓縮後的最終文件大小是可以小於1Kb的。
H. 二進制壓縮演算法有哪些
二進制數據壓縮演算法二進制是計算技術中廣泛採用的一種數制。二進制數據是用0和1兩個數碼來表示的數。它的基數為2,進位規則是「逢二進一」,借位規則是「借一當二」,由18世紀德國數理哲學大師萊布尼茲發現。當前的計算機系統使用的基本上是二進制系統,數據在計算機中主要是以補碼的形式存儲的。計算機中的二進制則是一個非常微小的開關,用「開」來表示1,「關」來表示0。
20世紀被稱作第三次科技革命的重要標志之一的計算機的發明與應用,因為數字計算機只能識別和處理由『0』。『1』符號串組成的代碼。其運算模式正是二進制。19世紀愛爾蘭邏輯學家喬治布爾對邏輯命題的思考過程轉化為對符號「0『』。『』1『』的某種代數演算,二進制是逢2進位的進位制。0、1是基本算符。因為它只使用0、1兩個數字元號,非常簡單方便,易於用電子方式實現。
二進制壓縮
在編程時遇到每個數據只有兩種狀態,且 dfs 或者 bfs 時遍歷時間復雜度高時,可以採用二進制壓縮數據,尤其是二維數組。LZFSE
1,zlib和gzip都對deflate進行了封裝,比deflate多了數據頭和尾
1,蘋果開源了新的無損壓縮演算法 LZFSE ,該演算法是去年在iOS 9和OS X 10.10中 引入 的。按照蘋果公司的說法,LZFE的壓縮增益和ZLib level 5相同,但速度要快2~3倍,能源效率也更高。
LZFSE基於Lempel-Ziv,並使用了 有限狀態熵編碼,後者基於Jarek Duda在
非對稱數字系統(ANS)方面所做的熵編碼工作。簡單地講,ANS旨在「終結速度和比率的平衡」,既可以用於精確編碼,又可以用於快速編碼,並且具有數據加密功能。使用ANS代替更為傳統的
Huffman和 算術編碼方法的壓縮庫 越來越多,LZFSE就位列其中。
顯然,LZFSE的目標不是成為最好或最快的演算法。事實上,蘋果公司指出,
LZ4的壓縮速度比LZFSE快,而 LZMA提供了更高的壓縮率,但代價是比Apple
SDK提供的其他選項要慢一個數量級。當壓縮率和速度幾乎同等重要,而你又希望降低能源效率時,LZFSE是蘋果推薦的選項。
GitHub上提供了LZFSE的參考實現。在MacOS上構建和運行一樣簡單:
$ xcodebuild install DSTROOT=/tmp/lzfse.dst
如果希望針對當前的iOS設備構建LZFSE,可以執行:
xcodebuild -configuration 「Release」 -arch armv7 install DSTROOT=/tmp/lzfse.dst
除了 API文檔之外,蘋果去年還提供了一個 示例項目,展示如何使用LZFSE 進行塊和流壓縮,這是一個實用的LZFSE入門資源。
LZFSE是在谷歌 brotli之後發布的,後者在去年開源。與LZFSE相比,brotli 似乎是針對一個不同的應用場景進行了優化,比如壓縮靜態Web資產和Android APK,在這些情況下,壓縮率是最重要的。