<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=LZ77</id>
	<title>LZ77 - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=LZ77"/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=LZ77&amp;action=history"/>
	<updated>2026-05-12T04:42:26Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=LZ77&amp;diff=137526&amp;oldid=prev</id>
		<title>Unknown user: Új oldal, tartalma: „{{GlobalTemplate|Infoalap|LZ77}}  ==LZ77==  ===LZ77 kódolás===  Az információforrás vizsgálata egy &lt;math&gt; h_a &lt;/math&gt; hosszúságú csúszóablakon keresztül tö…”</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=LZ77&amp;diff=137526&amp;oldid=prev"/>
		<updated>2012-10-21T20:02:16Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Infoalap|LZ77}}  ==LZ77==  ===LZ77 kódolás===  Az információforrás vizsgálata egy &amp;lt;math&amp;gt; h_a &amp;lt;/math&amp;gt; hosszúságú csúszóablakon keresztül tö…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GlobalTemplate|Infoalap|LZ77}}&lt;br /&gt;
&lt;br /&gt;
==LZ77==&lt;br /&gt;
&lt;br /&gt;
===LZ77 kódolás===&lt;br /&gt;
&lt;br /&gt;
Az információforrás vizsgálata egy &amp;lt;math&amp;gt; h_a &amp;lt;/math&amp;gt; hosszúságú csúszóablakon keresztül történik.&amp;lt;BR&amp;gt;&lt;br /&gt;
Ez két részre van bontva:&amp;lt;BR&amp;gt;&lt;br /&gt;
	 * a &amp;#039;&amp;#039;keresőpufferen&amp;#039;&amp;#039; a már kódolt &amp;lt;math&amp;gt; h_k &amp;lt;/math&amp;gt; betűt tartalmazó rész &amp;lt;BR&amp;gt;&lt;br /&gt;
	 * az &amp;#039;&amp;#039;előretekintő puffer&amp;#039;&amp;#039;, ami a következő &amp;lt;math&amp;gt; h_e &amp;lt;/math&amp;gt; betűt tartalmazza.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; h_a = h_k + h_e &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO: ÁBRA&lt;br /&gt;
&lt;br /&gt;
A kódoló a keresőpufferben megkeresi az előretekintő puffer első karakterének előfordulásait. Megnézi, hogy megtalált pozíciókkal kezdődően, a keresőpufferben lévő szimbólumok milyen hosszan egyeznek az előretekintő puffer szimbólumaival, és a találatok közül azt választja ki, amelytől kezdve a leghosszabb az egyezés.&lt;br /&gt;
&lt;br /&gt;
A kódoló ezután elküld egy &amp;lt;math&amp;gt; &amp;lt; t,h,c &amp;gt; &amp;lt;/math&amp;gt; hármast, ahol&lt;br /&gt;
 * &amp;lt;math&amp;gt; t &amp;lt;/math&amp;gt; a keresőpufferben megtalált szimbólum távolsága az előretekintő puffertől (offset),&lt;br /&gt;
 * h a kereső- és az előretekintő puffer egyező szimbólumainak legnagyobb hosszúsága,&lt;br /&gt;
 * c pedig az első, az előretekintő pufferben lévő nem egyező szimbólum kódszava.&lt;br /&gt;
&lt;br /&gt;
TODO: ÁBRA&lt;br /&gt;
&lt;br /&gt;
Azért küldjük el az első nem egyező karakter kódját is, hogy kezeljük azt az esetet, amikor az előretekintő puffer szimbólumait nem találjuk a keresőpufferben. Ilyenkor t és h értéke 0.&lt;br /&gt;
&lt;br /&gt;
Egy hármas kódolásához állandó hosszúságú kód használatával&lt;br /&gt;
&amp;lt;math&amp;gt; \lceil log h_k \rceil + \lceil log h_e \rceil + \lceil log |\chi| \rceil &amp;lt;/math&amp;gt;	&lt;br /&gt;
bit szükséges, ahol &amp;lt;math&amp;gt; | \chi | &amp;lt;/math&amp;gt; a forrásábécé mérete.&lt;br /&gt;
Megmutatható, hogy az eljárás hatékonysága aszimptotikusan megközelíti az optimális algoritmusét, amely előzetesen ismeri a forráseloszlást, azaz stacionárius és ergodikus forrás esetén az átlagos kódszóhossz konvergál &amp;lt;math&amp;gt;\frac{H(X)}{log s}&amp;lt;/math&amp;gt;-hez, ha (&amp;lt;math&amp;gt; h_e, h_k \rightarrow \infty &amp;lt;/math&amp;gt;) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===LZ77 dekódolás===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; t, h, c &amp;gt; alakú hármasokat fogadunk, majd ez alapján bővítjük a keresőpuffert a dekódoló oldalon.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
t: keresőpufferbeli illeszkedés kezdete (jobbról számított ennyi karakter)&amp;lt;br&amp;gt;&lt;br /&gt;
h: keresőpufferbeli illeszkedés hossza karakterben&amp;lt;br&amp;gt;&lt;br /&gt;
c: az illeszkedés utáni első karakter kódja&lt;br /&gt;
&lt;br /&gt;
A dekódolás során csak a keresőpufferben levő karakterek ismertek, az előretekintő pufferben lévőkről csak a kódoló tud. Először, amíg a keresőpuffer üres, &amp;lt;0, 0, f(x)&amp;gt; alakú hármasok érkeznek csak, ahol x a forrásábécé eleme, f(x) pedig a kódja - f(x) a kódábécé eleme.&lt;br /&gt;
&lt;br /&gt;
Ha már van olyan elem a keresőpufferben, amely az előretekintő pufferben épp érkezik, akkor van értelme illeszkedést vizsgálni a kódoló oldalon. A dekódoló oldali illeszkedésekre ekkor az alábbi két eset lehetséges:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
a) nincs átlógás&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tegyük fel, hogy már dekódoltuk a ccabrar sztringet. Ha ekkor jön egy &amp;lt;4, 2, f(c)&amp;gt; hármas, akkor ez azt jelenti, hogy a 2 dekódolandó karakter a keresőpuffer jobb oldalától 4 karakter távolságnyira kezd és 2 hosszú az illeszkedés, majd pedig az illeszkedést egy c karakter zárja. Így tehát a &amp;quot;ccabrar&amp;quot; keresőpuffer alapján a következőt dekódoljuk: &amp;quot;brc&amp;quot;, hiszen jobbról a 4. karakter a &amp;#039;b&amp;#039; és kettő hosszan a &amp;quot;br&amp;quot; sztring illeszkedik, ezt pedig lezárjuk a &amp;#039;c&amp;#039; karakterrel. A keresőpuffer ezután tehát a következő lesz: ccabrarbrc.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) van átlógás a keresőpufferből az előretekintő pufferbe&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Térjünk vissza a jó kis ccabrar tartalmú keresőpufferünkhöz. Előfordulhat, hogy a kódoló oldalon egy olyan illeszkedés van, amely átnyúlik a keresőpufferből az előretekintő pufferbe. Tehát pl. ccabrar|rarrad, ahol  jelöli a két puffer közti választóvonalat. Ez esetben nem csak a &amp;lt;3, 3, f(r)&amp;gt; -t fogjuk kódolni, hiszen ha megfigyeljük, akkor az illeszkedés ennél hosszabb is lehet: &amp;quot;rarra&amp;quot;. Ilyenkor tehát előfordulhat, hogy olyan &amp;lt; t, h , c &amp;gt; hármast küldünk át, ahol h értéke meghaladja t értékét, jelen esetben &amp;lt;3, 5, f(d)&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
A dekódolásnál azt gondolhatnánk, hogy zsákutcába értünk, hiszen honnan tudhatnánk mi az a fennmaradó 2 karakter, ami átnyúlt a kódoló oldalon az előretekintő pufferbe. Szerencsére van rá módszer, hogy ezt kitaláljuk, ugyanis ez a két karakter nem lehetett más, mint a keresőpufferben illeszkedő minta első két karaktere, vagyis a &amp;quot;rar&amp;quot; szting első két karaktere. Hogy miért van így? Azért, mert máskülönben nem csak 5 hosszan, de semmilyen hosszan nem tudott volna illeszkedni a kódoló oldalon az előretekintő puffer első (néhány) karaktere a keresőpufferbeli betűkkel. Vegyük pl. ccabrar|rarrad helyett a ccabrarefrrad példát, vagyis most a &amp;quot;két átlógó karakter&amp;quot; nem egyezik a keresőpufferbeli illeszkedés első 2 karakterével. Jól látszik, hogy ebben az esetben semmilyen illeszkedés sem lenne, tehát &amp;lt;0, 0, f(e)&amp;gt; -t küldenénk el.&amp;lt;br&amp;gt;&lt;br /&gt;
Így tehát lefedtünk minden esetet, tehát a dekódolás lehetséges kizárólag az átküldött hármasok segítségével.&lt;br /&gt;
&lt;br /&gt;
-- [[NeoXon|NeoXon]] - 2005.12.01.&lt;br /&gt;
-- [[SzelessZoltanTamas|Sales]] - 2006.06.24.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Infoalap]]&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>