Даменнае імя гэтага сайта ад алгарытму майго дзядзькі. У батанік колах, яго алгарытм даволі добра вядомыя. Часта ВНУ падручніках інфарматыкі будзе спасылацца на алгарытм, як напрыклад, калі выкладанне праграмавання. Я хацеў, каб імя дамена ў сям'і, таму я павінен быў заплаціць некаторую вобласць скваттерных для правоў на яго.
Яшчэ ў пачатку 1950-х, адзін з прафесараў майго дзядзькі яму выклік, каб прыдумаць алгарытм, які б вылічыць найбольш эфектыўны спосаб прадстаўлення даных, зводзячы да мінімуму аб'ём памяці, неабходны для захоўвання гэтай інфармацыі. Гэта простае пытанне, але без відавочнага рашэння. На самай справе, мой дзядзька прыняў выклік ад свайго прафесара, каб выйсці з прыняцця канчатковага. Ён не сказаў, што ніхто не вырашана праблема яшчэ.
Я напісаў простую праграму для дэманстрацыі кадаваньне Хаффмана ў Java. Таму што ў мяне гэты сайт, некалькі разоў у год я атрымліваю вар'ят электроннай пошце ад студэнта аб тым, у асноўным, "У мяне ёсць хатняе заданне, каб код Хаффмана Алгарытм і ён павінен на наступным тыдні. Я занадта лянівы, або невежественны, каб зрабіць працу сам, так што вы можаце проста даслаць мне зыходны код, каб я мог выдаць гэта за мае ўласныя. "Звычайна я не змясціць іх, але, магчыма, гэта дапаможа ім зрабіць сваю ўласную хатнюю працу.
Кампутары захоўваць інфармацыю ў нулі і адзінкі: двайковы "выключана" і S "на" s. Стандартны спосаб захоўвання знакаў на кампутар, каб даць кожнаму сімвалу паслядоўнасць з 8 біт (ці "Бі Нари Digi TS"), які можа быць 0 або 1 ст. Гэта дазваляе на 256 магчымых сімвалаў (так як 2 да 8-га ўлады 256). Напрыклад, літара "А" даецца унікальны код 01000001. Unicode вылучае 16 біт на знак і апрацоўвае нават не выкарыстоўваюць лацінскі алфавіты. Гэта проста лягчэй кампутараў для апрацоўкі сімвалаў, калі ўсе яны аднолькавага памеру. Больш біт вы дазволіце на знак больш сімвалаў вы можаце падтрымаць у алфавіце.
Але калі вы робіце кожны знак таго ж памеру, ён можа марнаваць прастору. У пісьмовым тэксце, усе сімвалы не створаны роўнымі. Літара "Е" даволі распаўсюджана ў тэксце на англійскай мове, але рэдка ўбачыш "З." Але так як гэта можна сустрэць як у тэкставым, кожны павінен быць прысвоены унікальны паслядоўнасць бітаў. Але калі "Е", быў 7-бітнай паслядоўнасці і "Z" было 9 біта, то, у сярэднім, паведамленне будзе крыху менш, чым у адваротным выпадку, таму што было б больш кароткія паслядоўнасці, чым доўгія паслядоўнасці. Вы можаце злучэння эканоміі, рэгулюючы памер кожнага сімвала і больш чым на 1 біт.
Яшчэ да кампутараў, Сэмюэл Морзэ прыняў гэта пад увагу пры назначэнні літар у свой код. Вельмі часта літара "Е" з'яўляецца кароткай паслядоўнасці "·" і незвычайныя літары "Q" з'яўляецца больш паслядоўнасці "- - · -." Ён прыйшоў з азбукай Морзэ, гледзячы на ??размеркаванне прыроднага літар у англійская альфабэт і варажыць адтуль. Азбука Морзе не з'яўляецца дасканалым, паколькі некаторыя найбольш часта сустракаемыя літары маюць больш доўгія коды, чым менш распаўсюджаныя з іх. Напрыклад літара "О", якая даўно "- - -", часцей, чым літара "я", якое з'яўляецца больш кароткі код ". · ·" Калі гэтыя два заданні, дзе месцамі, то яна будзе трохі хутчэй, у сярэднім, для перадачы азбукі Морзэ. Кадаванне Хаффмана з'яўляецца метадычным спосабам для вызначэння, як лепш за ўсё прызначыць нулёў і адзінак. Гэта быў адзін з першых алгарытмаў кампутарнай эры. Дарэчы, азбукі Морзэ на самай справе не двайковы код, паколькі ён ставіць паўзаў паміж літарамі і словамі. Калі б мы былі паставіць некаторыя біты паміж кожнай літарай прадстаўляць паўзы, гэта не прывяло б у найкарацейшыя магчымыя паведамлення.
Гэта рэгуляванне кодаў называецца сціскам, а часам і вылічальных намаганняў у сціску дадзеных (для захоўвання), а пазней яго распакавання (для выкарыстання) варта непрыемнасцяў. Больш месца, тэкставы файл займае робіць гэта павольней перадаваць з аднаго камп'ютэра на іншы. Іншыя тыпы файлаў, якія яшчэ больш зменлівасці, чым англійская мова, сціснуць нават лепш, чым тэкст. Несжатого гуку (. WAV) і малюнкі (. BMP) файлаў, як правіла, па крайняй меры ў дзесяць разоў вялікія, як іх эквіваленты сціснутага (. MP3 і. JPG адпаведна). Вэб-старонак б у дзесяць разоў больш часу на загрузку, калі мы не скарысталіся сціску дадзеных. Факс старонак зойме больш часу для перадачы. Вы атрымліваеце ідэю. Усе гэтыя сціснутыя фарматы скарыстацца кадаваньне Хаффмана.
Зноў жа, трэба выбраць кароткія паслядоўнасці бітаў для прадстаўлення агульных элементаў (літары, гукі, колеры, любы іншы) і больш паслядоўнасці элементаў, якія сустракаюцца радзей. Пры сярэднім з усяго, паведамленне будзе патрабаваць менш месца, калі вы сутыкнецеся з добрай кадоўцы слоўніка.
Вы не можаце проста пачаць прызначэння лісты унікальных паслядоўнасцяў з 0 і 1, таму што ёсць магчымасць неадназначнасці, калі вы не зробіце гэта правільна. Напрыклад, чатыры найбольш распаўсюджаных літары ангельскага алфавіту "Е", "T", "O", і "А." Вы не можаце проста прысвоіць 0 да "E", з 1 па "Т", ад 00 да "O, "01 на", "таму што, калі вы сутыкнуліся"... 01... "ў паведамленне, вы не маглі сказаць, калі арыгінальнае паведамленне, якое змяшчаецца" "ці паслядоўнасць" ET ". код для ліста не могуць быць такімі ж, як Пярэдняя частка іншай літарай. Каб пазбегнуць гэтай нявызначанасці, мы павінны спосаб арганізацыі літар і іх коды, што перашкаджае гэтаму. Добры спосаб прадстаўлення гэтай інфармацыі праграмісты што-то кампутар выкліку бінарнага дрэва.
Аляксандр Колдер з'яўляецца амерыканскі мастак, які будуе мабільных тэлефонаў і сапраўды любіць чырвонага і чорнага колеру. Адна з яго вялікіх работ вісіць з Усходу Атрыум будынка ў Нацыянальнай галерэі, але ён зрабіў некалькі падобных яму. Мабільны вісіць ад адной кропкі ў сярэдзіне полюса. Ён павольна пампуецца, як паветра цыркулюе ў пакоі. На кожным канцы полюс вы ўбачыце альбо ўзважаных вясло ці падключэнне да сярэдзіны іншага полюса. Акрамя таго, тым, хто ніжэй полюса рэчы вісіць у іх таксама. На самым нізкім узроўні, усе палякі вагаў на іх канцах.

Праграмісты хацеў бы паглядзець на гэты мабільны і думаць аб бінарных дрэў, агульная структура для захоўвання дадзеных праграмы. Гэта таму, што кожны мабільны полюс мае роўна два канца. Дзеля гэтага алгарытму, адзін канец полюс лічыцца "0", а канец "1." Вагі на канцах полюса ёсць лісты, звязаныя з імі. Калі inchworm былі падарожнічаць з верхняй частцы мабільнага тэлефона на ліст, яно будзе ісці ўніз некалькі палюсоў, часам сутыкаюцца з "0", а часам і "1". Паслядоўнасці двайковых лічбаў ліст заканчваецца адпаведныя кадоўкі ад гэтай літары.
Так як жа мы будуем, што ідэальна збалансаванае мабільных прылад? Першы крок кадаваньне Хаффмана з'яўляецца падлік частот ўсіх літар у тэксце. Устаўляць з мабільнага аналогіі, мы павінны стварыць кучу свабодныя лопасці, кожны з якіх афарбаваны літары ў алфавіце. Вага кожнай лопасці прапарцыйна колькасць разоў, што ліст з'яўляецца ў тэксце. Напрыклад, калі літара "д" з'яўляецца двойчы, то яе вясло павінна вага дзве унцыі і "е" вясло будзе важыць 10 унцый, калі што шматлікія "E" з прысутнічалі. Кожная лопасць мае пятлю для падвешвання.
Для нашага прыкладу, давайце выкажам здагадку, што ў нашай невялікай файл было два "д", тры "W" S, шэсць "S" S, і дзесяць "E" s.
Зараз давайце падрыхтаваць некалькі палюсоў. Нам трэба на адну менш, чым полюса унікальных персанажаў. Напрыклад, з 4 унікальных персанажаў нам спатрэбіцца 3 полюса. Адзін канец кожнага палюсы "0", а іншы канец "1." Кожны полюс будзе мець крук на абодвух канцах для правядзення рэчаў і завесы ў сярэдзіне для падвешвання сябе. На мой уяўны свет, палякі важыць нічога.
Цяпер лінія ўвесь вёслы, то выявім, што гэтыя лёгкія з іх і падлучыць іх да процілеглым канцах полюса. У прыведзеным ніжэй прыкладзе, "д" і "W" былі лёгкія (меней часта). З гэтага моманту, мы будзем разглядаць гэтыя два вёслы і іх полюса, як адно непарыўнае рэч. Вага "Q + W" аб'ект сума двух асобных вёслы. Памятаеце полюса сама важыць нічога. Мы паклаў аб'ект, то мы будзем паўтараць працэс. Дзве лёгкія рэчы ў пакоі, зараз могуць быць асобныя вясло ці, магчыма, раней звязаных хітрае. На малюнку ніжэй, "Q + W" (з вагой 5) і "S" (з вагой 6) былі наступныя два лёгкіх аб'ектаў. Тады мы засталіся з "Q + W + S" (з вагой 11) і "Е" (з вагой 10), апошнія дзве групы. Мы надаём гэтых двух разам. Мы надаём палюсоў знізу ўверх. Мы падключылі два лёгкіх рэчаў, пакуль у нас ёсць роўна адна штуковіна, якая ўтрымлівае вага ўсяго тэксту.

Зараз давайце трубку мабільнага і захапляцца нашай працай. Цяжкія вёслы (як часта "E") будзе мець тэндэнцыю быць бліжэй да пачатку, таму што яны былі дададзеныя позні час, каб лёгкія маніпулятары (рэдка "Q") будзе на дне, таму што яны былі схопленыя першым і звязацца да полюса пасля полюса, і так далей. Іншымі словамі, шлях ад вяршыні да агульных літар будзе самыя кароткія бінарную паслядоўнасць. Шлях ад вяршыні да рэдкія літары ў ніжняй частцы будзе нашмат даўжэй. Код "Е" "0", "S" з'яўляецца "10", "W" з'яўляецца "111" і "Q" з'яўляецца "110." Мы пабудавалі дрэва Хаффмана.
Для завяршэння сціску файла, нас трэба вярнуцца назад і перачытаць файл. На гэты раз, а не проста падлік знакаў, мы будзем пошуку, у наш дрэва, кожны знак сустракаецца ў файл і запісаць яго паслядоўнасць нулёў і адзінак ў новы файл. Пазней, калі мы хочам, каб аднавіць зыходны файл, мы будзем чытаць нулёў і адзінак і выкарыстання дрэва для дэкадаваньня іх назад ў сімвалы. Гэта азначае, што, калі мы павінны мець дрэва ў тыя часы мы распакаванні ён. Звычайна гэта дасягаецца шляхам запісы дрэвападобную структуру ў пачатку сціснутае файл. Гэта дазволіць зрабіць сціснуты файл трохі больш, але гэта неабходная зло. Вы павінны мець таямніцу кальца дэкодэр перш чым вы зможаце прайсці адзначае ў сваім класе.
Так як мой дзядзька распрацаваў яго алгарытм кадавання, іншых схем сціску прыйшлі ў быццё. Хтосьці заўважыў, што размеркаванне сімвалаў можа вар'іравацца ў розных месцах у крыніцы, напрыклад, шмат "" S прыкладна ў пачатку файла, але пазней могуць быць непрапарцыйна вялікае лік "е" s. Калі гэта так, гэта часам каштуе намаганняў, каб наладзіць, як дрэва Хаффмана завісае падчас працы праз файл. Можна нарэзаць файл на больш дробныя часткі і маюць розныя дрэвы для кожнага падзела. Гэта называецца адаптыўнай кадавання Хаффмана.
Тры іншых хлопцаў (Lempel, Зів і Welch) зразумеў, што пэўныя паслядоўнасці сімвалаў можа быць агульным, напрыклад, літара "R" часта вынікаюць літара "ё", так што мы маглі б разглядаць паслядоўнасць "Re", як проста яшчэ адзін ліст пры прысваенні кодаў.
Часам гэта не з'яўляецца неабходным для аднаўлення арыгінальнага крыніцы сапраўды. Напрыклад, файлы малюнкаў чалавечае вока не можа выявіць кожны піксель тонкія розніцы колеру. JPEG ("Сумесныя фатаграфіі групы экспертаў") фармаце "раундаў" аналагічных адценняў і тое ж значэнне, то прымяняецца алгарытм Хаффмана на спрошчанае малюнак. Фармат MP3 музыкі выкарыстоўвае аналагічную тэхніку для гукавых файлаў.
Алгарытм Мой дзядзька робіць свет менш.
Popular Links