Реалізація ідеї арифметичного кодування
Ідея арифметичного кодування, етапи її зародження та розвитку. Програма для арифметичного кодування, зауваження щодо її практичної реалізації. Доведення правильності декодування, проблема переповнення та завершення. Моделі для арифметичного кодування.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | украинский |
Дата добавления | 29.12.2010 |
Размер файла | 18,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
РЕФЕРАТ
на тему:
Реалізація ідеї арифметичного кодування
Вступ
Проблема стискання та кодування інформації з'явилась набагато раніше ніж, власне, термін «інформація». Згадаємо, що принаймні за часів Римської імперії армія використовувала метод шифрування повідомлень з метою її захисту від ворогів. Так званий шифр Цезаря став першим з відомих на сьогодні методів шифрування з таємним ключем. Іншим прикладом кодування є писемність, яка виникла так давно, що точних даних про конкретний час її появи не існує і, мабуть, ніколи не буде знайдено.
В другій половині ХХ-го століття з винайденням та розвитком ЕОМ проблема стискання та кодування привернула до себе увагу, бо з чисто теоретичної перетворилася в прикладну та вкрай необхідну. Стрімко зросли обсяги даних, з'явилась потреба в передачі дискретної інформації на далекі відстані з достатньою надійністю, проблема захисту такої інформації від несанкціонованого доступу і т.д. З розвитком комп'ютерних мереж (зокрема, INTERNET) обсяг інформації, що передається, швидко зростає і вимагає її мінімізації шляхом специфічного кодування для підтримання швидкодії мережі. Можна навести багато інших застосувань кодування інформації.
Арифметичне кодування є одним з перспективних методів стиску інформації, та, в деякому розумінні, її шифрування. Це кодування дозволяє пакувати символи вхідного алфавіту за умови, що розподіл частот цих символів відомий. Концепція методу була розроблена Еліасом в 60-х роках. Після цього метод був суттєво розвинутий та вдосконалений. Арифметичне кодування є оптимальним, досягає теоретичної границі ступеня стиску, - ентропії вхідного потоку.
1. Ідея арифметичного кодування
При арифметичному кодуванні текст представляється числами з плаваючою комою в інтервалі від 0 до 1. В процесі кодування тексту інтервал, що його відображає - зменшується, а кількість бітів для його представлення збільшується. Наступні символи тексту зменшують величину інтервалу, виходячи з значень їх ймовірностей, які визначаються моделлю. Більш ймовірні символи роблять це в меншій мірі ніж менш ймовірні та, таким чином, додають менше бітів до результату.
Перед початком роботи відповідний до тексту інтервал є (0; 1). При обробці наступного символу його ширина звужується за рахунок виділення цьому символу частини інтервалу. Наприклад, застосуємо до тексту алфавіту модель з постійними ймовірностями, що задані в таблиці 1.
Таблиця 1. Приклад постійної моделі для алфавіту
Символ |
Ймовірність |
Інтервал |
|
А |
0,2 |
(0,0; 0,2) |
|
Е |
0,3 |
(0,2; 0,5) |
|
І |
0,1 |
(0,5; 0,6) |
|
О |
0,2 |
(0,6; 0,8) |
|
У |
0,1 |
(0,8; 0,9) |
|
! |
0,1 |
(0,9; 1,0) |
І кодувальнику, і декодувальнику відомо, що на самому початку інтервал є (0; 1). Після перегляду першого символу «е», кодувальник звужує інтервал до (0,2; 0,5), який модель виділяє цьому символу. Другий символ «а» звузить цей новий інтервал до першої його п'ятої частина, оскільки для «а» виділено фіксований інтервал (0,0; 0,2). В результаті отримаємо робочий інтервал (0,2; 0,26), бо попередній інтервал мав ширину в 0,3 одиниці та одна п'ята від нього є 0,06. Наступному символу «і» відповідає фіксований інтервал (0,5; 0,6), що застосовано до робочого інтервалу (0,2; 0,26) звужує його до інтервалу (0,23; 0,236).
Продовжуючи таким саме способом маємо:
На початку |
(0.0; 1.0) |
|
Після перегляду «е» |
(0.2; 0.5) |
|
Після перегляду «а» |
(0.2; 0.26) |
|
Після перегляду «і» |
(0.23; 0.236) |
|
Після перегляду «і» |
(0.233; 0.2336) |
|
Після перегляду «!» |
(0.23354; 0.2336) |
Припустимо, що все те, що декодувальник знає про текст, це кінцевий інтервал (0,23354; 0,2336). Він відразу ж зрозуміє, що перший закодований символ - це «е», тому що підсумковий інтервал цілком лежить в інтервалі, що був виділений цьому символу відповідно до Таблиці 1. Тепер повторимо дії кодувальника:
Спочатку |
(0.0; 1.0) |
|
Після перегляду «е» |
(0.2; 0.5) |
Звідси зрозуміло, що другий символ - це «а», оскільки це призведе до інтервалу (0,2; 0,26), який цілком містить в собі підсумковий інтервал (0,23354; 0,2336). Працюючи в такий спосіб, декодувальник витягує весь текст.
Декодувальник не має потреби знати значення обох меж підсумкового інтервалу, який був одержаний від кодувальника. Навіть одного значення, що лежить всередині нього, наприклад, 0,23355 вже достатньо. (Інші числа - 0,23354, 0,23357 та навіть 0,23354321 - цілком придатні). Однак, щоб завершити процес, декодувальнику потрібно своєчасно розпізнати кінець тексту. Крім того, одне й те саме число 0,0 можна представити і як «а», і як «аа», і як «ааа» і т.д. Для усунення непорозуміння ми повинні позначати завершення кожного тексту спеціальним символом EOF, що відомий і кодувальнику, і декодувальнику. Для алфавіту з таблиці 1 з цією метою, і тільки з нею, буде використовуватися символ «!». Коли декодувальник зустрічає цей символ, то він завершує свій процес.
Для фіксованої моделі, яка задається моделлю таблиці 1, ентропія 5-ти символьного тексту «еаіі!» буде - log 0,3 - log 0,2 - log 0,1 - log 0,1 - log 0,1 = - log 0,00006 4,22. (Тут застосовуємо логариф з основою 10, бо вищенаведене кодування виконувалося для десяткових чисел). Це пояснює, чому потрібно 5 десяткових цифр для кодування цього тексту. Таким чином, ширина підсумкового інтервалу є 0,2336 - 0, 23354 = 0,00006, а ентропія - від'ємний десятковий логарифм цього числа. Звичайно ми працюємо з двійковою арифметикою, передаємо двійкові числа та вимірюємо ентропію в бітах.
П'яти десяткових цифр здається забагато для кодування тексту з чотирьох голосних! Мабуть не зовсім вдало бу закінчувати приклад розгортанням, а не утисканням. Однак зрозуміло, що різні моделі дають різну ентропію. Краща модель, побудована на аналізі окремих символів тексту «еаіі!», є така множина частот символів: {«е» (0,2), «а» (0,2), «і» (0,4), «!» (0,2)}. Вона дає ентропію, що дорівнює 2,89 в десятковій системі відліку, тобто кодує вихідний текст числом з трьох цифр. Однак, більш складні моделі, як відмічалося раніше, дають в загальному випадку набагато кращій результат.
2. Програма для арифметичного кодування
На рисунку 1 показано фрагмент псевдокоду, який поєднує процедури кодування та декодування, які було викладено в попередньому розділі. Символи в ньому нумеруються як 1, 2, 3… Частотний інтервал для і-того символу задається від cum_freeq[i] до cum_freeq [i-1]. При зменшенні і cum_freeq[i] зростає так, що cum_freeq[0] = 1. (Причина такого «зворотнього» договору полягає в тому, що cum_freeq[0] буде потім містити нормалізуючий множник, який зручно зберігати на початку масиву). Поточний робочий інтервал задається в [low; high] і буде в самому початку дорівнювати (0; 1) і для кодувальника, і для декодувальника.
На жаль, цей псевдокод значно спрощений, тоді як в практичному застосуванні існує декілька чинників, які ускладнюють і кодування, і декодування.
Алгоритм арифметичного кодування.
/*З кожним наступним символом тексту звертатися */
/*до процедури encode_symbol() */
/*Перевірити, що термінальний символ закодований останнім*/
/*Вивести одержане значення інтервалу (low; high) */
encode_symbol (symbol, cum_freq)
range = high - low
high = low + range*cum_freq [symbol - 1]
low = low + range*cum_freq[symbol]
Алгоритм арифметичного декодування.
/* Value - це число, яке одержано на вхід*/
/*Звертання до процедури decode_symbol() до того моменту*/
/*поки вона не поверне термінальний символ*/
decode_symbol (cum_freq)
cum_freq[symbol] <= (value - low) / (high - low) < cum_freq [symbol - 1]
/*це забезпечує розміщення Value в межах нового інтервалу*/
/*[low; high], що відображено в завершенні програми*/
high = low + range*cum_freq [symbol - 1]
low = low + range*cum_freq[symbol]
return symbol
3. Зауваження до реалізації
Наведений алгоритм кодування нічого не передає до повного завершення кодування всього тексту, а також і декодувальник не починає цей процес, поки не отримає стиснений текст цілком. Для більшості випадків необхідне поетапний режим виконання.
Потрібна для представлення інтервалу [low; high] точність зростає разом з довжиною тексту. Поетапне виконання допомагає вирішити цю проблему, але вимагає при цьому уважного обліку можливого переповнення та від'ємного переповнення.
Реалізація моделі повинна мінімізувати час визначення наступного символу алгоритмом декодування. Крім того, адаптивні моделі повинні також мінімізувати час, який вимагається для підтримання накопичених частот.
4. Реалізація моделі
Сама реалізація буде обговорюватися в наступному розділі, а тут треба лише торкнутися тільки інтерфейсу з моделлю. Як відомо, байт представляє собою ціле число від 0 до 255 (тип char). Тут ми представляємо байт як ціле число від 1 до 257 включно (тип index), де EOF трактується як 257-й символ. Було б добре відсортувати модель в порядку зменшення частот для мінімізації кількості виконання циклу декодування. Перетворення з типу char в index, та навпаки, реалізовано за допомогою двох таблиць - index_to_char[] i char_to_index[]. В адаптивній моделі виконується перекодування, яке присвоює найчастішим символам маленькі індекси.
Ймовірності представляються в моделі як лічильники частот, а накопичувані частоти зберігаються в масиві cum_freq[]. Як і в попередньому випадку, цей масив - «зворотній», і лічильник загальної частоти, який використовується для нормалізації всіх частот, розміщується в cum_freq[0]. Накопичувані частоти не повинні перевищувати встановлений в Max_frequency максимум, а реалізація моделі повинна запобігати переповненню відповідним масштабуванням. Необхідно також принаймні на 1 забезпечити різницю між двома значеннями cum_freq[], в противному випадку символ, що переглядається, не буде переданий.
5. Доведення правильності декодування
Перевіримо правильність визначення процедурою decode_symbol() наступного символу. З псевдокоду на рисунку 1 зрозуміло, що decode_symbol() повинна використовувати Value для пошуку символу, який при кодуванні скоротив робочий інтервал так, що він продовжує включати в себе Value. В робочій програмі в decode_symbol() визначається такий символ, для якого:
cum_freq [symbol] ((value - low +1)*cum_freq [0] - 1)/(high - low + 1) < cum_freq [symbol - 1], де означає операцію взяття цілої частини - ділення з відкиданням дробової частини. Показано, що це передбачає:
low + ((high - low + 1)*cum_freq [symbol]) / cum_freq [0] value low + ((high - low +1)*cum_freq [symbol - 1]) / cum_freq [0], таким чином, що value належить новому інтервалу, який вираховується процедурою decode_symbol(). Це гарантує коректність визначення кожного символу операцієй декодування.
6. Проблема переповнення і завершення кодування
Як показано в псевдокоді, арифметичне кодування працює за допомогою масштабування накопичених ймовірностей, які надаються моделлю в інтервалі [low; high] для кожного символу, що передається. Припустимо, що low i high так близькі один до одного, що операція масштабування призводить одержані від моделі різні символи до одного цілого числа, яке входить в [low; high]. В такому випадку подальше кодування продовжувати неможливо. Тому кодувальник повинен слідкувати за тим, щоб інтервал [low; high] завжди був досить широким. Найпростішим засобом для цього є забезпечення ширини інтервалу не меншій Max_frequency - максимального значення суми всіх накопичуваних частот.
Проблема від'ємного переповнення розглядається тільки відносно кодувальника, тому що при декодуванні кожного символу процес крокує за операцією кодування, і від'ємне переповнення не виникне, якщо виконується таке саме масштабування з тими ж самими умовами.
Тепер розглянемо можливість переповнення при цілочисленому множенні. Переповнення не виникне, якщо добуток range*Max_frequency вміщується в ціле слово, бо накопичені частоти не можуть перевищувати Max_frequency. Range має найбільше значення в Top_Value + 1, тому максимально можливий добуток є 2^16*(2^14 - 1), яке менше 2^30. Для визначення code_value та range використаний тип long, щоб забезпечити 32-х бітову точність арифметичних обчислень.
При завершені процесу кодування необхідно послати унікальний термінальний символ (EOF-символ), а потім послати достатню кількість бітів для гарантії того, що закодований рядок потрапить в підсумковий робочий інтервал. Через те, що процедура done_encoding() може бути «впевнена», що low i high обмежені або так, що: low < First_qtr < Half high, або low < Half < Third_qtr high, то значенню треба передати 01 або 10 відповідно, для видалення невизначеності, яка залишилась. Таким чином EOF унікально визначається останніми переданими бітами.
7. Моделі для арифметичного кодування
Програма повинна працювати з моделлю, яка являє собою пару перекодуючих таблиць index_to_char i char_to_index, і масив накопичених частот cum_freq []. До останнього масиву висуваються такі вимоги:
сum_freq [i - 1] cum_freq [i];
Ніколи не робиться спроба кодувати символ і, для якого сum_freq [i - 1] = cum_freq [i];
сum_freq [0] Max_frequency.
Якщо ці умови виконуються, значення в масиві не повинні мати зв'язку з дійснтми значеннями накопичених частот символів тексту. І декодування, і кодування будуть працювати коректно, при чому останньому буде треба менше місця, якщо частоти точні. (Згадаємо успішне кодування «еаіі!» у відповідності до моделі з таблиці 1, як, взагалі, не відображає справжньої частоти в тексті).
Найпростішою моделлю є така модель, в якій частоти символів постійні. Модель з таблиці 1 задає постійні частоти символів для алфавіту {a, e, i, u, o,!}. Для стиску англійських текстів можна використати частоти з частини Свода Брауна. Процедура ініціалізації start_model () просто підраховує накопичену версію цих частот, спочатку ініціалізувавши таблиці перекодування. Швидкість виконання процесу кодування та декодування можна прискорити, якщо ці таблиці перевпорядкувати так, щоб найвживаніші символи розміщувалися на початку масиву cum_freq []. Через те, що модель є постійною, процедура update_model () буде просто пустою.
Строгою моделлю є така модель, в якій частоти символів тексту точно відповідають специфікації моделі. Наприклад, фіксована модель з програми близька до строгої моделі для деякого фрагмента з Свода Брауна, звідки її було взяти. Однак, для того, щоб бути істино строгою, її символи в цьому фрагменті, які не з'являються, повинні мати лічильники, що дорівнюють 0, а не 1 (і при цьому «жертвувати» можливостями вхідних текстів, які містять ці символи). Крім того, лічильники не повинні масштабуватися до заданої накопиченої частоти, як це зроблено в програмі. Взагалі, строга модель повинна бути вирахована й передана перед пересиланням власне тексту. Клірі і Уітнен показали, що при загальних умовах це не дасть загального покращення стиску порівняно з описаним нижче адаптивним кодуванням.
Вона змінює частоти вже знайдених в тексті символів. Спочатку всі лічильники можуть бути рівними, що відображує відсутність початкових даних, але при перегляді кожного вхідного символу вони змінюються, наближуючись до спостережуваних частот. І кодувальник, і декодувальник використовують однакові початкові значення (наприклад, рівні лічильники) і один і той самий алгоритм оновлення, що дозволить їх моделям завжди залишатися на одному рівні. Кодувальник отримує наступний символ, кодує його та змінює модель. Декодувальник з'ясовує наступний символ на основі своєї поточної моделі, а потім оновлює її.
Програма демонструє таку адаптивну модель, що рекомендується для використання при стиску та відновленні, оскільки на практиці вона є кращою ніж фіксована модель за ефективністю стиску. Ініціалізація проводиться таким саме чином, як для фіксованої моделі, за виключенням того, що всі частоти встановлюються в нулі. Процедура update_model (symbol), викликається з encode_symbol () та decode_symbol () після обробки кожного символу. Оновлення моделі є досить дорогим з причини необхідності підтримки накопичених сум. В програмі використані лічильники частот, які оптимально розміщені в масиві в порядку зменшення своїх значень, що є ефективним видом самоорганізованого лінійного пошуку. Процедура update_model () спочатку перевіряє нову модель на предмет перевищення нею обмежень за величиною накопиченої частоти, і якщо воно присутнє, то зменшує всі частоти діленням на 2, зважаючи при цьому на те, щоб лічильники не перетворилися в 0, і переобчислює накопичені значення. Потім, якщо це необхідно, update_model () перевпорядковує символи для того, щоб розмістити поточний в його вірній категорії відносно частотного порядку, чергуючи для відображення змін перекодувальні таблиці. В результаті, процедура збільшує значення відповідного лічильника частоти і впорядковує відповідні накопичені частоти.
кодування арифметичний переповнення правильність
8. Ефективність стискання
Взагалі, при кодуванні тексту арифметичним методом, кількість бітів в закодованому рядку дорівнює ентропії цього тексту відносно використаної для кодування моделі. Три чинника викликають погіршення цієї характеристики: видатки на завершення тексту; використання арифметики з кінцевою точністю; таке масштабування лічильників, що їх сума не перевищує Max_frequency.
Як було показано, жоден з них не є значним. В порядку виділення результатів арифметичного кодування, модель буде розглядатися як сувора (в визначеному вище сенсі).
Арифметичне кодування повинне досилати додаткові біти в кінець кожного тексту, здійснюючи таким чином додаткові зусилля на завершення тексту. Для ліквідації непорозуміння з останнім символом процедура done_encoding () посилає два біти. В випадку, коли перед кодуванням бітів має блокуватися в 8-бітові символи, буде необхідно завершувати до кінця блоку. Таке комбінування може додатково потрібувати 9 бітів.
Видатки при використанні арифметики з обмеженою точністю проявляються в зменшені залишків при діленні. Це видно при порівнянні з теоретичною ентропією, яка виводить частоти із лічильників, які таким саме чином масштабуються при кодуванні. Тут видатки незначні - порядку 10^-4 бітів / символ. Додаткові видатки на масштабування лічильників дещо більші, але все одно досить малі. Для коротких текстів (менших 2^14 байт) їх немає. Але навіть з текстами в 10^5 - 10^6 байтів накладні видатки, підраховані експериментально, складають менше 0,25% від рядка, що кодується.
Адаптивна модель в програмі, при загрозі перевищення загальною сумою накопичених частот значення Max_frequency, зменшує всі лічильники. Це призводить до того, що зважувати останні події важче, ніж більш ранні. Таким чином, показники мають тенденцію прослідковувати зміни у вхідній послідовності, які можуть бути дуже корисними (відомі випадки, коли обмеження лічильників до 6-7 бітів давало кращі результати, ніж підвищення точності арифметики). Звичайно, це залежить від джерела, до якого застосовується модель.
9. Застосування арифметичного кодування
Застосування з цією метою арифметичного кодування розглядалося Лангдоном та Риссаненом, що отримали при цьому чудові результати за допомогою моделі, що використовує оцінку ймовірності точки відносно деякого шаблону, що її оточує. Він являє собою сукупність з 10 точок, що лежать зверху та спереду від поточної, тому при скануванні растру вони їй передують. Це дає 1024 можливих контексту, відносно яких, ймовірність чорного кольору в даній точці оцінюється адаптивно по мірі перегляду зображення. Після чого кожна полярність точки кодувалася арифметичним методом відповідно з цією ймовірністю. Такий підхід покращив стискання на 20 - 30% порівняно з більш ранніми методами. Для збільшення швидкості кодування Лангдон та Риссанен застосували приблизний метод арифметичного кодування, який обійшов операції множення шляхом представлення ймовірностей в вигляді цілих ступенів дробу 1/2/. Кодування Хаффмана для цього випадку не може бути використано напряму, оскільки воно ніколи не виконує стиснення двохсимвольного алфавіту. Іншу можливість для арифметичного кодування, що застосовується для такого алфавіту, дає популярний метод кодування довжин тиражів (run-length method). Модель тут приводить дані до послідовності довжин серій однакових символів (наприклад, зображення представляється довжинами послідовностей чорних точок, які йдуть за білими, які слідують за чорними, яким передують білим і т.д.). в результаті повинна бути передана послідовність довжин. Стандарт факсимільних апаратів ССІТТ будує код Хаффмана на основі частот, з якими чорні і білі послідовності різних довжин з'являються в зразках документів. Фіксоване арифметичне кодування, яке буде використовувати ті ж самі частоти, буде мати кращі характеристики, а адаптація таких частот для кожного окремого документу буде працювати ще краще.
Воно часто розглядається на основі застосування більш складних моделей текстів, зображень або інших даних. Розглянемо, наприклад, локально адаптовану схему стискання Бентлі та ін., де кодування та декодування працює з N останніми різними словами. Слово, що знаходиться в кеш-буфері, визначається по цілочисельному індексу буфера. Слово, яке в ньому не знаходиться, передається в кеш-буфер через пересилання його маркера, який йде наступним за самими символами цього слова. Це чудова модель для тексту, в якому слова часто використовуються на протязі деякого короткого часу, а потім вже довго не використовуються. Їх стаття обговорює декілька кодувань змінної довжини вже для цілочисельних індексів кеш-буфера. В якості основи для кодів змінної довжини арифметичний метод дозволяє використовувати будь-яке розподілення ймовірностей, в тому числі серед багатьох інших й ті, які наведені тут. Крім того, він допускає для індексів кеш-буфера застосування адаптивної моделі, що є бажаним у випадку, коли розподілення доступів до кеш-буферу важкопередбачуване.
Подобные документы
Характеристики методів стискання інформації. Дворівневе кодування, алгоритм Лемпеля-Зіва. Блок-схема алгоритму кодування. Вибір мови, середовища програмування. Опис інтерфейсу, тестування програми. Бібліотеки, які використовуються при написанні програми.
курсовая работа [728,9 K], добавлен 17.01.2014Значимість двійкової системи числення для кодування інформації. Способи кодування і декодування інформації в комп'ютері. Відповідність десятковій, двійковій, вісімковій і шістнадцятковій систем числення. Двійкове кодування інформації, алфавіт цифр.
презентация [1,4 M], добавлен 30.09.2013Імовірнисний підхід у теорії ощадливого кодування. Оцінка інформативності ознак та їх оптимальна градація. Застосування імовірнісних методів для підвищення ефективності ощадливого кодування відеоінформації. Ефективні алгоритми кодування інформації.
реферат [1,6 M], добавлен 29.06.2009Реалізація програми, яка буде забезпечувати шифрування і дешифрування будь-яких файлів по довільному алгоритму з використанням пароля. Можливість кодування та розкодування утиліти за простим алгоритмом Гамування, який базується на бітовій операції XOR.
лабораторная работа [15,1 K], добавлен 04.04.2011Алгоритми перешкодостійкого кодування процесом виявлення і виправлення одиничної помилки в циклічних кодах. Програмна реалізація процесу виявлення і виправлення помилок в циклічних кодах. Програма, що реалізує завдання засобами Borland C++Builder 6.
курсовая работа [384,2 K], добавлен 24.04.2014Практичне застосування систем кодування знакової та графічної інформації в електронних обчислювальних машинах. Позиційні системи числення. Представлення цілих і дійсних чисел. Машинні одиниці інформації. Основні системи кодування текстових даних.
практическая работа [489,5 K], добавлен 21.03.2012Сучасні методи захисту текстової інформації. Порівняльний аналіз шифру Бекона з іншими відомими шифрами. Практичне використання алгоритмів кодування тексту. Написання програми "Шифр Бекона", використані компоненти для реалізації алгоритму, їх властивості.
курсовая работа [606,8 K], добавлен 28.03.2016Зміст і структура інформаційного забезпечення. Області застосування штрихового кодування. Послідовність розробки позиційних і комбінованих систем кодування. Технологія застосування електронного документообігу. Особливості створення автоматизованих банків.
реферат [30,2 K], добавлен 24.01.2011Історія створення мови С#. Аналіз алгоритмів кодування даних. Розробка системи в середовищі Visual Studio 2008 Express. Схема шифрування алгоритму DES. Дослідження алгоритму RC2. Приклади хешів RIPEMD-160. Програмна реалізація основних процедур системи.
дипломная работа [1,7 M], добавлен 25.10.2012Суть алгоритму Лемпеля-Зива. Принцип скользящого вікна, яке представлено у вигляді буфера та організовано для запам'ятовування "сказаної" раніше інформації та надання до неї доступ. Механізм кодування збігів. Приклади кодування по алгоритмам LZ78 та LZW.
презентация [59,3 K], добавлен 14.08.2013