精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

LZ77壓縮算法編碼Python實現原理圖解

開發 后端 算法
LZ77算法是無損壓縮算法,由以色列人Abraham Lempel發表于1977年。LZ77是典型的基于字典的壓縮算法,現在很多壓縮技術都是基于LZ77。鑒于其在數據壓縮領域的地位,本文將結合圖片和源碼詳細介紹其原理。

前言

LZ77算法是無損壓縮算法,由以色列人Abraham Lempel發表于1977年。LZ77是典型的基于字典的壓縮算法,現在很多壓縮技術都是基于LZ77。鑒于其在數據壓縮領域的地位,本文將結合圖片和源碼詳細介紹其原理。

原理介紹:

首先介紹幾個專業術語。

1.lookahead buffer(不知道怎么用中文表述,暫時稱為待編碼區):

等待編碼的區域

2. search buffer:

已經編碼的區域,搜索緩沖區

3.滑動窗口:

指定大小的窗,包含“搜索緩沖區”(左) + “待編碼區”(右)

接下來,介紹具體的編碼過程:

為了編碼待編碼區, 編碼器在滑動窗口的搜索緩沖區查找直到找到匹配的字符串。匹配字符串的開始字符串與待編碼緩沖區的距離稱為“偏移值”,匹配字符串的長度稱為“匹配長度”。編碼器在編碼時,會一直在搜索區中搜索,直到找到***匹配字符串,并輸出(o, l ),其中o是偏移值, l是匹配長度。然后窗口滑動l,繼續開始編碼。如果沒有找到匹配字符串,則輸出(0, 0, c),c為待編碼區下一個等待編碼的字符,窗口滑動“1”。算法實現將類似下面的:

while( lookAheadBuffer not empty )
 {
 get a pointer (position, match) to the longest match  in the window for the lookAheadBuffer;
output a (position, length, char());
 shift the window length+1 characters along;
 }

主要步驟為:

1.設置編碼位置為輸入流的開始

2.在滑窗的待編碼區查找搜索區中的***匹配字符串

3.如果找到字符串,輸出(偏移值, 匹配長度), 窗口向前滑動“匹配長度”

4.如果沒有找到,輸出(0, 0, 待編碼區的***個字符),窗口向前滑動一個單位

5.如果待編碼區不為空,回到步驟2

描述實在是太復雜,還是結合實例來講解吧

實例:

現在有字符串“AABCBBABC”,現在對其進行編碼。

一開始,窗口滑入如圖位置

由圖可見,待編碼緩沖區有“AAB”三個字符,此時搜索緩沖區還是空的。所以編碼***個字符,由于搜索區為空,故找不到匹配串,輸出(0,0, A),窗口右移一個單位,如下圖

此時待編碼區有“ABC”。開始編碼。***編碼”A”,在搜索區找到”A”。由于沒有超過待編碼區,故開始編碼”AB”,但在搜索區沒有找到匹配字符串,故無法編碼。因此只能編碼”A”。

輸出(1, 1)。即為相對于待編碼區,偏移一個單位,匹配長度為1。窗口右滑動匹配長度,即移動1個單位。如下圖

一樣,沒找到,輸出(0, 0, B),右移1個單號,如下圖

輸出(0, 0, C),右移1個單位,如下圖

輸出(2, 1),右移1個單位,如下圖

輸出(3, 1), 右移1個單位,如下圖

開始編碼”A”,在搜索緩沖區查找到匹配字符串。由于待編碼緩沖區沒有超過,繼續編碼。開始編碼”AB”,也搜索到。不要停止,繼續編碼“ABC”,找到匹配字符串。由于繼續編碼,則超過了窗口,故只編碼“ABC”,輸出(5, 3),偏移5,長度3。右移3個單位,如下圖

此時待編碼緩沖區為空,停止編碼。

最終輸出結果如下

python代碼實現:

class Lz77:
    def __init__(self, inputStr):
        self.inputStr = inputStr #輸入流
        self.searchSize = 5    #搜索緩沖區(已編碼區)大小
        self.aheadSize = 3     #lookAhead緩沖區(待編碼區)大小 
        self.windSpiltIndex = 0 #lookHead緩沖區開始的索引
        self.move = 0
        self.notFind = -1   #沒有找到匹配字符串

    #得到滑動窗口的末端索引
    def getWinEndIndex(self):
        return self.windSpiltIndex + self.aheadSize

    #得到滑動窗口的始端索引
    def getWinStartIndex(self):
        return self.windSpiltIndex - self.searchSize

    #判斷lookHead緩沖區是否為空
    def isLookHeadEmpty(self):
        return True if self.windSpiltIndex + self.move> len(self.inputStr) - 1   else False

    def encoding(self):
        step = 0
        print("Step   Position   Match   Output")
        while not self.isLookHeadEmpty():
            #1.滑動窗口
            self.winMove()
            #2. 得到***匹配串的偏移值和長度
            (offset, matchLen) = self.findMaxMatch()
            #3.設置窗口下一步需要滑動的距離
            self.setMoveSteps(matchLen) 
            if matchLen == 0:
                #匹配為0,說明無字符串匹配,輸出下一個需要編碼的字母
                nextChar = self.inputStr[self.windSpiltIndex]
                result = (step, self.windSpiltIndex, '-',  '(0,0)' + nextChar)
            else:
                result = (step, self.windSpiltIndex, self.inputStr[self.windSpiltIndex - offset: self.windSpiltIndex - offset + matchLen], '(' + str(offset) + ',' + str(matchLen) + ')')
            #4.輸出結果
            self.output(result)    
            step = step + 1        #僅用來設置第幾步

    #滑動窗口(移動分界點)
    def winMove(self):
        self.windSpiltIndex = self.windSpiltIndex + self.move

    #尋找***匹配字符并返回相對于窗口分界點的偏移值和匹配長度
    def findMaxMatch(self):
        matchLen = 0
        offset = 0
        minEdge = self.minEdge() + 1  #得到編碼區域的右邊界
        #遍歷待編碼區,尋找***匹配串
        for i in range(self.windSpiltIndex + 1, minEdge):
            #print("i: %d" %i)
            offsetTemp = self.searchBufferOffest(i)
            if offsetTemp == self.notFind: 
                return (offset, matchLen)
            offset = offsetTemp #偏移值

            matchLen = matchLen + 1  #每找到一個匹配串,加1

        return (offset, matchLen)

    #入參字符串是否存在于搜索緩沖區,如果存在,返回匹配字符串的起始索引
    def searchBufferOffest(self, i):
        searchStart = self.getWinStartIndex()
        searchEnd = self.windSpiltIndex 
        #下面幾個if是處理開始時的特殊情況
        if searchEnd < 1:
            return self.notFind
        if searchStart < 0:
            searchStart = 0
            if searchEnd == 0:
                searchEnd = 1
        searchStr = self.inputStr[searchStart : searchEnd]  #搜索區字符串
        findIndex = searchStr.find(self.inputStr[self.windSpiltIndex : i])
        if findIndex == -1:
            return -1
        return len(searchStr) - findIndex

    #設置下一次窗口需要滑動的步數
    def setMoveSteps(self, matchLen):
        if matchLen == 0:
            self.move = 1
        else:
            self.move = matchLen

    def minEdge(self):
        return len(self.inputStr)  if len(self.inputStr) - 1 < self.getWinEndIndex() else self.getWinEndIndex() + 1

    def output(self, touple):
        print("%d      %d           %s     %s" % touple)

if __name__ == "__main__":
    lz77 = Lz77("AABCBBABC")
    lz77.encoding()

只是簡單的寫了下,沒有過多考慮細節,請注意,這不是最終的代碼,只是用來闡述原理,僅供參考。輸出結果就是上面的輸出(格式由于坑爹的博客園固定樣式,代碼位置有偏移,請注意)

責任編輯:張燕妮 來源: 轉瞬之夏的博客
相關推薦

2023-02-09 09:38:32

算法壓縮

2011-08-11 16:41:09

bzip2中文man

2011-08-12 11:15:27

gzip中文man

2010-06-24 10:25:55

Linux Bzip2

2017-05-08 11:41:37

WebGLThree.js

2022-07-01 12:00:56

Kubernete網絡模型

2024-04-29 08:53:10

大數據存儲數據

2022-04-20 21:06:24

LZ 算法鴻蒙操作系統

2024-09-13 10:11:38

2012-04-11 15:41:48

JavaNIO

2025-01-16 07:10:00

2023-01-04 13:43:24

讀寫鎖AQS共享模式

2020-12-09 10:29:53

SSH加密數據安全

2020-05-19 14:00:09

人工智能機器學習AI

2023-08-07 08:20:27

圖解算法工具

2021-03-18 11:45:49

人工智能機器學習算法

2011-05-20 14:03:31

哈夫曼

2023-05-29 08:31:48

Redis散列表

2020-04-02 09:58:26

Kubernetes容器開發

2021-02-05 15:01:41

GitLinux命令
點贊
收藏

51CTO技術棧公眾號

中文字幕天天干| 蜜桃狠狠色伊人亚洲综合网站| 国内毛片毛片毛片毛片毛片| 午夜精品在线| 五月天欧美精品| 亚洲不卡一卡2卡三卡4卡5卡精品| 中文字幕在线网址| 亚洲国产专区校园欧美| 中文字幕欧美日韩精品| 麻豆av免费看| 国产福利一区二区三区在线播放| 一区二区三区在线高清| 欧美亚洲一级二级| 人妻va精品va欧美va| 日韩在线一区二区| 欧美极品第一页| 激情五月深爱五月| 欧美一级全黄| 欧美一级午夜免费电影| 欧美亚洲另类色图| 黄色美女视频在线观看| 中文一区二区完整视频在线观看| 国产视频一区二区不卡| 一区二区三区精| 国产精品一级| 久久久久久久国产| 手机在线免费看片| 不卡视频在线| 亚洲毛片在线观看| 精品国产一区在线| 88久久精品| 制服视频三区第一页精品| 日本熟妇人妻xxxxx| 97蜜桃久久| 亚洲一区二区不卡免费| 手机成人av在线| av资源在线观看免费高清| 2021国产精品久久精品| 好吊色欧美一区二区三区四区| 国产乱码精品一区二三区蜜臂 | 亚洲永久精品一区| 国产偷自视频区视频一区二区| 欧美大片在线免费观看| 欧美h片在线观看| 天天射综合网视频| 色伦专区97中文字幕| 91精品国自产在线| 日韩在线综合| 中文字幕在线看视频国产欧美在线看完整| 国产ts丝袜人妖系列视频| 国内精品麻豆美女在线播放视频| 日韩欧美国产一区二区三区| 免费国偷自产拍精品视频| 免费看日产一区二区三区| 91精品国产综合久久小美女 | 国产成人免费视| 亚洲综合视频1区| 精品人妻无码一区二区三区蜜桃一 | 精品国产一区二区在线| 99自拍偷拍视频| 99精品在线观看| 久久视频在线看| 青青青在线视频| 雨宫琴音一区二区在线| 97国产精品免费视频| 亚洲国产综合久久| 性欧美暴力猛交另类hd| 日韩av日韩在线观看| 日本欧美www| 久久精品久久综合| 91福利入口| 色婷婷av一区二区三区之红樱桃 | 欧美电影网站| 欧美日韩三级一区| 亚洲一区二区图片| 国产精东传媒成人av电影| 日韩av在线不卡| 91久久免费视频| 日韩理论电影院| 欧美理论电影在线播放| 国产精品第108页| 国产一区二区精品| 国产啪精品视频| 亚洲高清视频网站| 久久―日本道色综合久久| 亚洲精品一卡二卡三卡四卡| 性直播体位视频在线观看| 激情成人在线视频| 亚洲最大天堂网| 五月国产精品| 色婷婷久久av| 日韩免费观看一区二区| 日本不卡在线视频| 国产精品久久7| 福利片在线观看| 一区二区在线观看av| 日本精品免费在线观看| 亚洲精品一区二区在线播放∴| 精品粉嫩超白一线天av| 影音先锋制服丝袜| 亚洲精品1区2区| 国产日韩欧美影视| 嫩草在线播放| 亚洲综合色噜噜狠狠| 日日摸天天爽天天爽视频| 精品国产18久久久久久二百| 亚洲女人天堂网| 久久久久99精品成人片毛片| 日本一不卡视频| 国产精品三区四区| 精品美女在线观看视频在线观看 | 国产精品免费久久久久| 欧美 国产 综合| 免费观看亚洲天堂| 日韩在线视频观看正片免费网站| 久草视频在线资源站| 麻豆精品视频在线观看免费| 鲁鲁视频www一区二区| 天天色天天射天天综合网| 欧美色综合网站| 噜噜噜在线视频| 国产精品vip| 成人性生交xxxxx网站| 国产天堂素人系列在线视频| 五月天精品一区二区三区| 被黑人猛躁10次高潮视频| 成人激情视频| 国产成人一区二区三区| 亚洲精品久久久蜜桃动漫 | 成人免费高清视频在线观看| 一道本在线观看视频| 草莓视频成人appios| 亚洲少妇激情视频| 麻豆成人免费视频| www.成人在线| 欧美又粗又长又爽做受| 日韩精品三级| 欧美理论电影在线观看| av资源免费看| 亚洲乱码日产精品bd| 亚洲色图欧美自拍| 天天天综合网| 成人激情视频小说免费下载| 欧美日韩欧美| 91麻豆精品国产91久久久使用方法| 中国1级黄色片| 蜜臀久久久久久久| 一区二区三区在线视频111| 丁香婷婷久久| 最近中文字幕2019免费| 在线播放亚洲精品| 成人欧美一区二区三区视频网页| 狠狠躁狠狠躁视频专区| 欧美gvvideo网站| 国产主播精品在线| 操你啦在线视频| 精品国产91乱码一区二区三区 | 性xx色xx综合久久久xx| 欧美性xxxx69| 78精品国产综合久久香蕉| 亚洲欧洲激情在线| 在线播放成人av| 一区二区三区日韩欧美精品| 国产亚洲精品成人a| 亚洲乱码久久| 人禽交欧美网站免费| 国产成人a视频高清在线观看| 日韩亚洲成人av在线| av天堂一区二区三区| 亚洲激情综合网| 免费成人蒂法网站| 日本不卡视频在线| 亚洲av首页在线| 噜噜噜天天躁狠狠躁夜夜精品| 欧洲亚洲在线视频| 2017亚洲天堂1024| 欧美成人vr18sexvr| 麻豆成人免费视频| 亚洲丝袜精品丝袜在线| 捆绑裸体绳奴bdsm亚洲| 日韩成人伦理电影在线观看| 男女激烈动态图| 久久成人福利| 国产日韩欧美在线看| 福利网站在线观看| 在线日韩日本国产亚洲| 亚洲精品久久久蜜桃动漫| 色狠狠色狠狠综合| 欧美交换国产一区内射| 久久久久久9999| 国产精品一区二区小说| 亚洲激情一区| 亚洲砖区区免费| 女人抽搐喷水高潮国产精品| 国产精品自产拍在线观看中文| 免费av不卡在线观看| 国产亚洲精品久久久久久| 成人免费视频国产| 欧美日韩不卡在线| 天天操天天摸天天干| 亚洲视频免费在线| 女女互磨互喷水高潮les呻吟| 国产传媒一区在线| 日日躁夜夜躁aaaabbbb| 国产手机视频一区二区| 日本天堂免费a| 精品一二三区| 久久免费一区| 大桥未久女教师av一区二区| 成人午夜在线视频一区| 亚洲欧美在线成人| 欧美中文在线字幕| av伦理在线| 久久综合伊人77777蜜臀| av网站在线免费观看| 日韩av在线天堂网| 亚洲AV无码一区二区三区性| 欧美丰满少妇xxxbbb| 亚洲无码精品一区二区三区| 精品福利在线看| 国产亚洲精久久久久久无码77777| 欧美高清在线精品一区| 人妻大战黑人白浆狂泄| 成人动漫中文字幕| 日本精品一二三区| 国产成人精品aa毛片| 黄色a级三级三级三级| 狠狠色狠狠色综合日日91app| 91极品尤物在线播放国产| 国产日韩欧美一区| 成人性免费视频| 激情婷婷亚洲| 久久精品无码中文字幕| 欧美国产精品| 国产成人一二三区| 亚洲欧美综合| 日本人妻伦在线中文字幕| 欧美一区激情| 91大学生片黄在线观看| 午夜欧美精品| 97视频在线免费| 国产精品99一区二区| 成人在线观看毛片| 韩日在线一区| 欧美一区二区中文字幕| 中日韩男男gay无套| 国产免费毛卡片| 久久精选视频| 波多野结衣作品集| 免费高清在线一区| 五月天婷婷影视| 国产激情一区二区三区| 精品无码av一区二区三区不卡| 国产99久久久国产精品| 青青草视频网站| 99精品桃花视频在线观看| a级大片在线观看| 欧美极品美女视频| 国产精品白丝喷水在线观看| 一区二区三区国产| 日本va欧美va国产激情| 日韩欧中文字幕| 亚洲网站免费观看| 精品少妇一区二区三区| 无码精品在线观看| 亚洲天堂开心观看| 久久日韩视频| 97色在线观看免费视频| 欧美艳星kaydenkross| 国产免费成人av| 在线观看视频一区二区三区| 久久亚裔精品欧美| 欧美电影《睫毛膏》| 中国丰满熟妇xxxx性| 男人的天堂亚洲在线| gai在线观看免费高清| 国产成人高清视频| xxxx日本免费| 亚洲欧美日本在线| 欧美成人精品欧美一级乱黄| 欧美综合欧美视频| 亚洲第一视频在线播放| 亚洲最新中文字幕| 污视频在线看网站| 国产不卡av在线| 中文字幕久久精品一区二区| 蜜桃91精品入口| 91精品一区国产高清在线gif | 日日骚一区二区三区| 色综合久久天天| 999av视频| 亚洲欧洲视频在线| 免费在线国产视频| 国产精品wwwwww| 国产成人澳门| 正在播放一区二区三区| 免费日韩av| 制服.丝袜.亚洲.中文.综合懂| 久久精品夜色噜噜亚洲aⅴ| 国产十六处破外女视频| 日本电影亚洲天堂一区| 黄色片一区二区三区| 色阁综合伊人av| 国产免费拔擦拔擦8x在线播放 | 久久久国产精品免费| 成人欧美大片| 成人高清在线观看| 91久久夜色精品国产按摩| 成人av一级片| 懂色av噜噜一区二区三区av| 欧美性猛交xxxx乱大交少妇| 欧美日韩国产中文精品字幕自在自线| 中文天堂在线播放| 亚洲视频在线播放| 超碰成人av| 99超碰麻豆| 68国产成人综合久久精品| 色婷婷综合久久久久中文字幕| caoporn国产一区二区| 欧美成人综合色| 337p亚洲精品色噜噜噜| 97人人在线| 国产精品高潮呻吟久久av无限 | 致1999电视剧免费观看策驰影院| 老司机午夜精品视频| 日本黄色免费观看| 亚洲夂夂婷婷色拍ww47| 99久久久无码国产精品免费| 中文字幕亚洲综合| 青娱乐极品盛宴一区二区| 日韩精品国内| 日韩黄色一级片| 性高潮久久久久久久| 日韩欧美成人网| 全色精品综合影院| 91超碰caoporn97人人| 久久久久97| 自慰无码一区二区三区| av不卡免费电影| 一级免费在线观看| 亚洲国产精品久久久久秋霞蜜臀| 丰满大乳少妇在线观看网站| 粉嫩av一区二区三区免费观看| 欧美fxxxxxx另类| 色诱av手机版| 亚洲超碰精品一区二区| 天堂在线视频免费| 欧美有码在线观看| 精品久久精品| 国产永久免费网站| 亚洲欧美日韩成人高清在线一区| 99在线精品视频免费观看软件 | 劲爆欧美第一页| 欧美变态tickling挠脚心| 成人女同在线观看| 久久伊人一区二区| 视频一区欧美精品| 国产精品夜夜夜爽阿娇| 日韩欧美在线123| 华人av在线| 日韩高清在线播放| 国产资源在线一区| 久久国产免费观看| 国产婷婷97碰碰久久人人蜜臀 | 国产精品免费一区二区三区在线观看| 国产精品jizz在线观看美国| 成人做爰www看视频软件| 精品国产乱码久久久久酒店| 国产在线一二| 亚洲自拍av在线| 国产日韩1区| 国产精品一区二区亚洲| 欧美一区国产二区| 秋霞伦理一区| 中文字幕黄色大片| 北条麻妃国产九九精品视频| 国产又大又黄又粗| 久久精品人人做人人爽| 国产乱论精品| 午夜在线观看av| 亚洲一区二区三区爽爽爽爽爽| 天堂中文资源在线| 成人精品在线视频| av成人天堂| 91香蕉视频网| 亚洲国产精品成人av| 欧美成人福利| 成人免费观看cn| 亚洲欧洲国产日韩| 亚欧洲精品视频| 91色视频在线导航| 久久五月激情| 久久国产一级片| 日韩中文字幕免费| 任你躁在线精品免费| 中文字幕第66页| 日本乱人伦aⅴ精品| 好久没做在线观看| 亚洲欧美电影在线观看| 99re热视频这里只精品|