日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java 實現LZ78壓縮算法的示例代碼

瀏覽:183日期:2022-08-13 10:17:23
LZ78 壓縮算法的 Java 實現1、壓縮算法的實現

通過多路搜索樹提高檢索速度

package com.wretchant.lz78;import java.util.*;/** 多路英文單詞查找樹 */class Trie { private TrieNode root; public Trie() {root = new TrieNode();root.wordEnd = false; } public void insert(String word) {TrieNode node = root;for (int i = 0; i < word.length(); i++) { Character c = word.charAt(i); if (!node.childdren.containsKey(c)) {node.childdren.put(c, new TrieNode()); } node = node.childdren.get(c);}node.wordEnd = true; } public boolean search(String word) {TrieNode node = root;for (int i = 0; i < word.length(); i++) { Character c = word.charAt(i); if (!node.childdren.containsKey(c)) {return false; } node = node.childdren.get(c);}return node.wordEnd; }}class TrieNode { Map<Character, TrieNode> childdren; boolean wordEnd; public TrieNode() {childdren = new HashMap<Character, TrieNode>();wordEnd = false; }}/** 編碼表 */class Output { private Integer index; private Character character; Output(Integer index, Character character) {this.index = index;this.character = character; } public Integer getIndex() {return index; } public Character getCharacter() {return character; }}class LZencode { @FunctionalInterface interface Encode {List<Output> encode(String message); } /** 構建多路搜索樹 */ static Trie buildTree(Set<String> keys) {Trie trie = new Trie();keys.forEach(trie::insert);return trie; } public static final Encode ENCODE = message -> {// 構建壓縮后的編碼表List<Output> outputs = new ArrayList<>();Map<String, Integer> treeDict = new HashMap<>();int mLen = message.length();int i = 0;while (i < mLen) { Set<String> keySet = treeDict.keySet(); // 生成多路搜索樹 Trie trie = buildTree(keySet); char messageI = message.charAt(i); String messageIStr = String.valueOf(messageI); // 使用多路樹進行搜索 if (!trie.search(messageIStr)) {outputs.add(new Output(0, messageI));treeDict.put(messageIStr, treeDict.size() + 1);i++; } else if (i == mLen - 1) {outputs.add(new Output(treeDict.get(messageIStr), ’ ’));i++; } else {for (int j = i + 1; j < mLen; j++) { String substring = message.substring(i, j + 1); String str = message.substring(i, j); // 使用多路樹進行搜索 if (!trie.search(substring)) {outputs.add(new Output(treeDict.get(str), message.charAt(j)));treeDict.put(substring, treeDict.size() + 1);i = j + 1;break; } if (j == mLen - 1) {outputs.add(new Output(treeDict.get(substring), ’ ’));i = j + 1; }} }}return outputs; };}2、解壓縮算法的實現

package com.wretchant.lz78;import java.util.HashMap;import java.util.List;import java.util.Map;public class LZdecode { @FunctionalInterface interface Decode {/** @param outputs 編碼表 @return 解碼后的字符串 */String decode(List<Output> outputs); } /** 根據編碼表進行解碼 */ public static final Decode DECODE = (List<Output> outputs) -> {StringBuilder unpacked = new StringBuilder();Map<Integer, String> treeDict = new HashMap<>();for (Output output : outputs) { Integer index = output.getIndex(); Character character = output.getCharacter(); if (index == 0) {unpacked.append(character);treeDict.put(treeDict.size() + 1, character.toString());continue; } String term = '' + treeDict.get(index) + character; unpacked.append(term); treeDict.put(treeDict.size() + 1, term);}return unpacked.toString(); };}3、測試和使用

package com.wretchant.lz78;import java.io.InputStream;import java.util.List;import java.util.Scanner;import java.util.function.ToIntFunction;public class LZpack { public static final ToIntFunction<List<Output>> DICT_PRINT = outputs -> {outputs.forEach(output -> { System.out.println('index :' + output.getIndex() + ' char :' + output.getCharacter());});return 1; }; public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println('Please input text ');String input = scanner.nextLine();LZencode.Encode encode = LZencode.ENCODE;List<Output> outputs = encode.encode(input);DICT_PRINT.applyAsInt(outputs); }}

測試結果如下

Java 實現LZ78壓縮算法的示例代碼

4、Python 版本的實現代碼

def compress(message): tree_dict, m_len, i = {}, len(message), 0 while i < m_len:# case Iif message[i] not in tree_dict.keys(): yield (0, message[i]) tree_dict[message[i]] = len(tree_dict) + 1 i += 1# case IIIelif i == m_len - 1: yield (tree_dict.get(message[i]), ’’) i += 1else: for j in range(i + 1, m_len):# case IIif message[i:j + 1] not in tree_dict.keys(): yield (tree_dict.get(message[i:j]), message[j]) tree_dict[message[i:j + 1]] = len(tree_dict) + 1 i = j + 1 break# case IIIelif j == m_len - 1: yield (tree_dict.get(message[i:j + 1]), ’’) i = j + 1def uncompress(packed): unpacked, tree_dict = ’’, {} for index, ch in packed:if index == 0: unpacked += ch tree_dict[len(tree_dict) + 1] = chelse: term = tree_dict.get(index) + ch unpacked += term tree_dict[len(tree_dict) + 1] = term return unpackedif __name__ == ’__main__’: messages = [’ABBCBCABABCAABCAAB’, ’BABAABRRRA’, ’AAAAAAAAA’] for m in messages:pack = compress(m)unpack = uncompress(pack)print(unpack == m)

到此這篇關于Java 實現LZ78壓縮算法的文章就介紹到這了,更多相關Java LZ78壓縮算法內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美成人基地| 91超碰国产精品| 欧美国产免费| 精品久久97| 中文字幕中文字幕精品| 欧美综合另类| 国产精品第十页| 国产欧美88| 久久超碰99| 四虎国产精品免费观看| 欧美不卡高清一区二区三区| 欧洲毛片在线视频免费观看| 国产亚洲激情| 日本不卡一区二区| 狠狠久久婷婷| 国产精品一区三区在线观看| 亚洲精品动态| 日韩免费高清| 欧美日韩一区二区三区四区在线观看| 久久高清国产| 四虎国产精品免费观看| 日本vs亚洲vs韩国一区三区二区| 亚洲欧美伊人| 国产免费播放一区二区| 久久精品123| 国产在线不卡一区二区三区| 91成人福利| 鲁大师成人一区二区三区| 亚洲欧洲一区| 在线视频精品| 最近高清中文在线字幕在线观看1| 日本欧美大码aⅴ在线播放| 亚洲不卡视频| 亚洲免费婷婷| 国产精东传媒成人av电影| 免费在线观看一区| 欧美一区二区三区久久| 国产精品一区二区三区美女 | 啪啪国产精品| 免费视频亚洲| 奇米亚洲欧美| 国产精品国产三级在线观看| 欧美aa在线观看| 丝袜亚洲另类欧美| 国产精品一站二站| 欧美不卡高清一区二区三区| 日韩一区二区三区免费播放| 奇米亚洲欧美| 久久99青青| 精品高清久久| 久久人人97超碰国产公开结果| 国产精品日本一区二区不卡视频| 久久一二三区| 免费在线观看不卡| 久久不卡国产精品一区二区| 国产精品天堂蜜av在线播放| 久久国产精品亚洲77777| 亚洲一区欧美| 欧美黄页在线免费观看| 欧美一区久久久| 石原莉奈一区二区三区在线观看| 7m精品国产导航在线| 精品三级国产| 亚洲欧美日韩视频二区| 中文字幕乱码亚洲无线精品一区| 亚洲激情国产| 婷婷综合在线| 老司机精品视频在线播放| 国产欧美一区二区三区国产幕精品 | 国产精品2区| 天使萌一区二区三区免费观看| 久久99蜜桃| 一区三区视频| 日本精品在线中文字幕| 国产色噜噜噜91在线精品| 欧美日韩国产探花| 久久精品系列| 日本成人中文字幕在线视频| 久久久影院免费| 视频在线观看国产精品| 欧美aa在线观看| 黄色欧美在线| av亚洲在线观看| 97久久精品| 欧美精品日日操| 中文字幕色婷婷在线视频| 日韩福利视频导航| 免费在线成人| 久久精品国产99久久| 国产亚洲人成a在线v网站| 日韩久久视频| 秋霞影院一区二区三区| 日韩一区三区| 精品五月天堂| 国产精品欧美在线观看| 国产精品13p| 欧美大黑bbbbbbbbb在线| 奇米狠狠一区二区三区| 蜜桃精品在线| 国产91在线播放精品| 国产精品对白久久久久粗| 亚洲理论在线| 亚洲欧美日本视频在线观看| 人人精品亚洲| 欧美成人基地 | 免费精品视频| 欧美日韩精品免费观看视欧美高清免费大片| 国产精品久久久久久久久久久久久久久| 亚洲人成网77777色在线播放| 美女精品一区| 亚州av乱码久久精品蜜桃| 欧美精品资源| 在线一区视频观看| 视频二区不卡| 日韩欧美另类一区二区| 日产午夜精品一线二线三线| 久久中文字幕导航| 麻豆视频一区二区| 国产精品黄色片| 国产精品4hu.www| 精品理论电影在线| 精品国产精品久久一区免费式| 欧美成人一二区| 久久精品色播| jizzjizz中国精品麻豆| 黄色欧美在线| 日韩欧美二区| 亚洲天堂成人| 亚洲一区二区三区四区五区午夜 | 狠狠色狠狠色综合日日tαg| 亚洲欧洲一区| 蜜桃久久精品一区二区| 婷婷成人av| 国产欧美三级| 亚洲激情婷婷| 亚洲狼人精品一区二区三区| 日本天堂一区| 精品中文在线| 波多野结衣久久精品| 亚洲天堂一区二区| 精品91久久久久| 亚洲精品影视| 国产精品99久久久久久董美香| 色爱综合网欧美| 99热精品久久| 久久亚洲精品伦理| 日本欧美大码aⅴ在线播放| 国产精品美女久久久久久不卡| 久久久久九九精品影院| 在线看片国产福利你懂的| 亚洲手机视频| 亚洲va久久久噜噜噜久久| 国产精品嫩模av在线| 丁香婷婷久久| 999精品色在线播放| 欧美aa国产视频| 亚洲精品影视| 福利一区和二区| 欧美美女一区| 日本精品一区二区三区在线观看视频| 国产欧美日韩亚洲一区二区三区| 久久精品一区| 91精品在线观看国产| 亚洲乱码一区| 国产成人精品一区二区免费看京 | 精品一区在线| 日韩大片免费观看| 国产亚洲在线观看| 国产日韩三级| 91精品国产自产在线观看永久∴| 亚洲一区二区小说| 国产在线观看91一区二区三区| 日韩一区二区久久| 欧美激情视频一区二区三区在线播放| 久久人人97超碰国产公开结果| 四虎精品一区二区免费| 欧美xxxx中国| 亚洲专区视频| 精品91福利视频| 国产调教一区二区三区| 精品丝袜在线| 亚洲中午字幕| 久久亚洲道色| 亚洲一区二区毛片| 激情中国色综合| 在线一区免费观看| 国际精品欧美精品| 日本大胆欧美人术艺术动态| 精品视频一区二区三区在线观看| 婷婷中文字幕一区| 精品国产一区二区三区av片| 亚洲欧美视频一区二区三区| 精品一区二区三区中文字幕 | 日本视频在线一区| 欧美jjzz| 欧美国产三级| 美女国产一区| 亚洲成av人片一区二区密柚| 国产精品一区二区精品 | 综合一区av|