Константы и переменные. Коды переменной длины

Лишь немногие способны реально осознать, что переменный и постоянный ток чем-то отличаются. Не говоря уже о том, чтобы назвать конкретные различия. Цель данной статьи - объяснить основные характеристики этих физических величин в терминах, понятных людям без багажа технических знаний, а также предоставить некоторые базовые понятия, касающиеся данного вопроса.

Сложности визуализации

Большинству людей не составляет труда разобраться с такими понятиями, как «давление», «количество» и «поток», поскольку в своей повседневной жизни они постоянно сталкиваются с ними. Например, легко понять, что увеличение потока при поливе цветов увеличит количество воды, выходящей из поливочного шланга, в то время как увеличение давления воды заставит ее двигаться быстрее и с большей силой.

Электрические термины, такие как «напряжение» и «ток», обычно трудно понять, поскольку нельзя увидеть или почувствовать электричество, движущееся по кабелям и электрическим контурам. Даже начинающему электрику чрезвычайно сложно визуализировать происходящее на молекулярном уровне или даже четко понять, что собой представляет, например, электрон. Эта частица находятся вне пределов сенсорных возможностей человека, ее невозможно увидеть и к ней нельзя прикоснуться, за исключением случаев, когда определенное количество их не пройдет через тело человека. Только тогда пострадавший определенно ощутит их и испытывает то, что обычно называют электрическим шоком.

Тем не менее, открытые кабели и провода большинству людей кажутся совершенно безвредными только потому, что они не могут увидеть электронов, только и ждущих того, чтобы пойти по пути наименьшего сопротивления, которым обычно является земля.

Аналогия

Понятно, почему большинство людей не могут визуализировать то, что происходит внутри обычных проводников и кабелей. Попытка объяснить, что что-то движется через металл, идет вразрез со здравым смыслом. На самом базовом уровне электричество не так сильно отличается от воды, поэтому его основные понятия довольно легко освоить, если сравнить электрическую цепь с водопроводной системой. Основное различие между водой и электричеством заключается в том, что первая заполняет что-либо, если ей удастся вырваться из трубы, в то время как второе для передвижения электронов нуждается в проводнике. Визуализируя систему труб, большинству легче понять специальную терминологию.

Напряжение как давление

Напряжение очень похоже на давление электронов и указывает, как быстро и с какой силой они движутся через проводник. Эти физические величины эквивалентны во многих отношениях, включая их отношение к прочности трубопровода-кабеля. Подобно тому, как слишком большое давление разрывает трубу, слишком высокое напряжение разрушает экранирование проводника или пробивает его.

Ток как поток

Ток представляет собой расход электронов, указывающий на то, какое их количество движется по кабелю. Чем он выше, тем больше электронов проходит через проводник. Подобно тому, как большое количество воды требует более толстых труб, большие токи требуют более толстых кабелей.

Использование модели водяного контура позволяет объяснить и множество других терминов. Например, силовые генераторы можно представить как водяные насосы, а электрическую нагрузку - как водяную мельницу, для вращения которой требуется поток и давление воды. Даже электронные диоды можно рассматривать как водяные клапаны, которые позволяют воде течь только в одну сторону.

Постоянный ток

Какая разница между постоянным и переменным током, становится ясно уже из названия. Первый представляет собой движение электронов в одном направлении. Очень просто визуализировать его с использованием модели водяного контура. Достаточно представить, что вода течет по трубе в одном направлении. Обычными устройствами, создающими постоянный ток, являются солнечные элементы, батареи и динамо-машины. Практически любое устройство можно спроектировать так, чтобы оно питалось от такого источника. Это почти исключительная прерогатива низковольтной и портативной электроники.

Постоянный ток довольно прост, и подчиняется закону Ома: U = I × R. измеряется в ваттах и ​​равна: P = U × I.

Из-за простых уравнений и поведения постоянный ток относительно легко осмыслить. Первые системы передачи электроэнергии, разработанные Томасом Эдисоном еще в XIX веке, использовали только его. Однако вскоре разница в переменном токе и постоянном стала очевидной. Передача последнего на значительные расстояния сопровождалась большими потерями, поэтому через несколько десятилетий он был заменен более выгодной (тогда) системой, разработанной Николой Теслой.

Несмотря на то что коммерческие силовые сети всей планеты в настоящее время используют переменный ток, ирония заключается в том, что развитие технологии сделало передачу постоянного тока высокого напряжения на очень больших расстояниях и при экстремальных нагрузках более эффективной. Что, например, используется при соединении отдельных систем, таких как целые страны или даже континенты. В этом заключается еще одна разница в переменном токе и постоянном. Однако первый по-прежнему используется в низковольтных коммерческих сетях.

Постоянный и переменный ток: разница в производстве и использовании

Если переменный ток намного проще производить с помощью генератора, используя кинетическую энергию, то батареи могут создавать только постоянный. Поэтому последний доминирует в схемах питания низковольтных устройств и электроники. Аккумуляторы могут заряжаться только от постоянного тока, поэтому переменный ток сети выпрямляется, когда аккумулятор является основной частью системы.

Широко распространенным примером может служить любое транспортное средство - мотоцикл, автомобиль и грузовик. Генератор, устанавливаемый на них, создает переменный ток, который мгновенно преобразуется в постоянный с помощью выпрямителя, поскольку в системе электроснабжения присутствует аккумулятор, и большинству электроники для работы требуется постоянное напряжение. Солнечные элементы и топливные ячейки также производят только постоянный ток, который затем при необходимости можно преобразовать в переменный с помощью устройства, называемого инвертором.

Направление движения

Это еще один пример разницы постоянного тока и переменного тока. Как следует из названия, последний представляет собой поток электронов, который постоянно меняет свое направление. С конца XIX века почти во всех бытовых и промышленных электрических всего мира используется синусоидальный переменный ток, поскольку его легче получить и гораздо дешевле распределять, за исключением очень немногих случаев передачи на большие расстояния, когда потери мощности вынуждают использовать новейшие высоковольтные системы постоянного тока.

У переменного тока есть еще одно большое преимущество: он позволяет возвращать энергию из точки потребления обратно в сеть. Это очень выгодно в зданиях и сооружениях, которые производят больше энергии, чем потребляют, что вполне возможно при использовании альтернативных источников, таких как солнечные батареи и Тот факт, что переменный ток позволяет обеспечить двунаправленный поток энергии, является основной причиной популярности и доступности альтернативных источников питания.

Частота

Когда дело доходит до технического уровня, к сожалению, объяснить, как работает переменный ток, становится сложно, поскольку модель водяного контура к нему не совсем подходит. Однако можно визуализировать систему, в которой вода быстро меняет направление потока, хотя не понятно, как она при этом будет делать что-то полезное. Переменный ток и напряжение постоянно меняют свое направление. Скорость изменения зависит от частоты (измеряемой в герцах) и для бытовых электрических сетей обычно составляет 50 Гц. Это означает, что напряжение и ток меняют свое направление 50 раз в секунду. Вычислить активную составляющую в синусоидальных системах довольно просто. Достаточно разделить их пиковое значение на √2.

Когда переменный ток меняет направление 50 раз в секунду, это означает, что лампы накаливания включаются и выключаются 50 раз в секунду. Человеческий глаз не может это заметить, и мозг просто верит, что освещение работает постоянно. В этом заключается еще одна разница в переменном токе и постоянном.

Векторная математика

Ток и напряжение не только постоянно меняются - их фазы не совпадают (они несинхронизированные). Подавляющее большинство силовых нагрузок переменного тока вызывает разность фаз. Это означает, что даже для самых простых вычислений нужно применять векторную математику. При работе с векторами невозможно просто складывать, вычитать или выполнять любые другие операции скалярной математики. При постоянном токе, если по одному кабелю в некоторую точку поступает 5A, а по другому - 2A, то результат равен 7A. В случае переменного это не так, потому что итог будет зависеть от направления векторов.

Коэффициент мощности

Активная мощность нагрузки с питанием от сети переменного тока может быть рассчитана с помощью простой формулы P = U × I × cos (φ), где φ - угол между напряжением и током, cos (φ) также называется коэффициентом мощности. Это то, чем отличаются постоянный и переменный ток: у первого cos (φ) всегда равен 1. Активная мощность необходима (и оплачивается) бытовыми и промышленными потребителями, но она не равна комплексной, проходящей через проводники (кабели) к нагрузке, которая может быть рассчитана по формуле S = U × I и измеряется в вольт-амперах (ВА).

Разница между постоянным и переменным током в расчетах очевидна - они становятся более сложными. Даже для выполнения самых простых вычислений требуется, по крайней мере, посредственное знание векторной математики.

Сварочные аппараты

Разница между постоянным и переменным током проявляется и при сварке. Полярность дуги оказывает большое влияние на ее качество. Электрод-позитивная сварка проникает глубже, чем электрод-негативная, но последняя ускоряет наплавление металла. При постоянном токе полярность всегда постоянная. При переменном она меняется 100 раз в секунду (при 50 Гц). Сварка при постоянном предпочтительнее, так как она производится более ровно. Разница в сварке переменным и постоянным током заключается в том, что в первом случае движение электронов на долю секунды прерывается, что приводит к пульсации, неустойчивости и пропаданию дуги. Этот вид сварки используется редко, например, для устранения блуждания дуги в случае электродов большого диаметра.

Для представления величин (данных) в программе используют константы и переменные. И у тех и у других есть имя (идентификатор) и значение. Различие в том, что значение константы в процессе выполнения программы изменить нельзя, а значение переменной можно.

Условно переменные разделим на входные (то, что дано), выходные (результат: то, что нужно получить) и промежуточные, необходимые в процессе вычислений. Например, для программы вычисления наибольшего общего делителя (алгоритм Евклида), входные переменные m и n, промежуточная переменная r. Выходная переменная тоже n. Эти переменные должны иметь тип «натуральные числа». Но такого типа в Паскале нет. Поэтому придется использовать какой-то целый тип. От размера типа зависит диапазон чисел, для которых можно использовать программу. Если описать переменные так:

то самым большим числом на входе можно взять 32767 = 2 16 – 1.

Важно! Значение переменных, описанных в разделе Var , не определено. Иногда можно встретить определение переменной как ячейки памяти, в которой содержится значение переменной. Подразумевается, что описание переменной связывает адрес этой ячейки с именем переменной, то есть имя используется как адрес ячейки памяти, где содержится значение. Но само значение еще не определено.

В алгоритме Евклида значение остатка r сравнивается с нулем. 0 – целая константа. Можно (но не обязательно) определить константу со значением 0, например, так:

В процессе компиляции в тексте программы идентификатор Zero будет заменен своим числовым значением.

Тип константы Zero не очевиден. Ноль есть в любом целочисленном типе. В разделе констант можно описать типизированную константу, указав и тип и значение:

Zero: integer = 0;

Но теперь Zero стала обычной переменной целого типа, начальное значение которой определено и равно нулю.

Контроль использования переменных осуществляется на этапе компиляции. Компилятор обычно пресекает попытки установить для переменной значение неподходящего типа. Многие языки программирования автоматически приводят значение переменной к нужному типу. Как правило, такое неявное преобразование типа у начинающих программистов является источником трудно обнаруживаемых ошибок. В Паскале неявное преобразование типа можно считать скорее исключением, чем правилом. Исключение сделано только в отношении констант и переменных типа INTEGER (целые), которые разрешается использовать в выражениях типа REAL (действительные). Запрет на автоматическое преобразование типов не означает, что в Паскале нет средств преобразования данных. Они есть, но их нужно использовать явно.

Блок А

Постоянные затраты

Переменные затраты



Анализируя выпускаемую продукцию, основное внимание следует уделить анализу её себестоимости. Себестоимость - это стоимостная оценка используемых в процессе производства продукции (работ, услуг) природных ресурсов, сырья, материалов, топлива, энергии, основных фондов, трудовых ресурсов и других затрат на ее производство и реализацию. Под определением себестоимости продукции понимается исчислении затрат, приходящихся на ед. продукции. Выпуск продукции можно считать оправданным если выручка от продажи продукции, закроет все затраты, имеющиеся на предприятии. А если же нет, то выпуск продукции является убыточным. Т.е. выпуск будет оправданным при достижении на предприятии объема выпуска и реализации, соответствующего точке нулевой прибыли. ТНП это тот объем продаж начиная с которого предприятие получает прибыль.

Также, в соответствии с критерием оптимальности структуры выпуска по Парето выпуск будет эффективным, если он будет одновременно максимизировать полезность покупателей и не будет выходить за пределы имеющихся ресурсов (т.е. будет лежать на кривой производственных возможностей). Структура выпуска эффективна, если произ-ли и потреб-ли одновременно находятся в состоянии равновесия.

В чем отличие бухгалтерской прибыли предприятия от полученного им маржинального дохода за это же время?

Маржинальный доход исчисляется в виде разности между выручкой от реализации продукции (без НДС и акцизов) и переменными расходами. Другими словами,МД- это сумма постоянных расходов и прибыли от продаж. МД должен покрывать постоянные расходы предприятия и обеспечить ему прибыль от реализации продукции, работ, услуг. Этот показатель также называют суммой покрытия.

МД = Выручка от продаж – переменные затраты

МД= Постоянные затраты + Прибыль от продаж

Бухгалтерская прибыль - общая прибыль, полученная от предпринимательской деятельности, рассчитана по бухгалтерскому учёту.Бухгалтерская прибыль исчисляется как разность между совокупным доходом предприятия и бухгалтерскими (явными) издержками. Бухгалтерские издержки - это стоимость используемых фирмой ресурсов в фактических ценах их приобретения. Явные издержки отражаются полностью в бухгалтерском учете, поэтому они еще называются бухгалтерскими издержками. Явные издержки определяются суммой расходов предприятия на оплату внешних ресурсов, т.е. ресурсов, не находящихся в собственности данной фирмы. Например, сырье, материалы, топливо, рабочая сила и т.д.

Бухгалтерская прибыль = Совокупный доход предприятия- Бухгалтерские (Явные) издержки

(Таким образом, бухгалтерская прибыль меньше маржинального дохода на сумму явных постоянных издержек.)

Назовите основные факторы, влияющие на величину маржинального дохода предприятия?

Большую роль в обосновании управленческих решений играет маржинальный (предельный) анализ, методика которого базируется на изучении соотношения между тремя группами важнейших экономических показателей «издержки - объем производства (реализации) продукции - прибыль» и прогнозировании критической и оптимальной величины каждого из этих показателей при заданном значении других. Основной категорией маржинального анализа является маржинальный доход. Маржинальный доход (прибыль) - это разность между выручкой от реализации (без учета НДС и акцизов) и переменными затратами. На изменение маржинального дохода могу влиять (вместе или по отдельности) два фактора – увеличение (уменьшение) выручки и себестоимости. Важным фактором, влияющим на доходность отдельных объектов маржинальной прибыли, является величина и структура неполной себестоимости. От величины неполной себестоимости напрямую зависит величина маржинального дохода (прибыли). Преобладание в структуре неполной себестоимости переменных затрат указывает на тот факт, что для достижения безубыточности данного объекта маржинального дохода не требуется значительного объема продаж. Преобладание в структуре неполной себестоимости прямых постоянных затрат указывает на необходимость увеличения объема продаж для их возмещения.

Блок Б

В чем различие между сокращенной себестоимостью продукции предприятия в директ-косте и ее полной себестоимостью в бухгалтерском учете?

Сокращенная себестоимость промышленной продукции в директ-косте учитывается и планируется только в части переменных затрат. Постоянные расходы собираются на отдельном счете и с заданной периодичностью списываются непосредственно на дебет счета финансовых результатов, например «Прибыли и убытки». По переменным расходам оцениваются также остатки ГП на складах на начало и конец года и НЗП. Полная себестоимость в бухгалтерском учете предполагает включение в себестоимость постоянных и переменных расходов.

Варианты расчета себестоимости взаимооказываемых работ соответствующих трансфертных цен.

Наиболее точные результаты распределения взаимооказываемых услуг обеспечивает решение системы линейных уравнений затрат каждого внутризаводского подразделения. В общем виде система уравнений мест и центров затрат имеет следующий вид:

Где R ni – сумма первичных затрат мест; q i – объем услуг, предоставленных подразделению; n – место затрат i -му подразделению (i = 1, ... n ); k i , k j – коэффициенты распределения затрат j -го места издержек.

При одностороннем методе стоимость услуг первичных мест относится только на основные производства предприятия, величина расходов, связанная с взаимным обменом деятельностью, во внимание не принимается. Коэффициенты распределения рассчитывают по формуле:

Где К – коэффициент распределения; R пм затраты первичных мест; Q пм – объем услуг, потребленных в сумме всеми подразделениями основного производства предприятия.

При использовании метода пошагового распределения определяется последовательность списания издержек первичных мест затрат. Обычно начинают со вспомогательных цехов и хозяйств, услуги которых нужны всем. Коэффициент распределения в этом случае рассчитывается по формуле

Где R fix , R var – постоянные и переменные расходы, распределенные предыдущим центром затрат; Q пм – объем первичных услуг, переданных следующему подразделению предприятия.

С точки зрения контроля за величиной и экономичностью затрат мест и центров внутри предприятия различают метод бюджетирования издержек и метод сопоставления затрат и производительности. В первом случае для каждого места расходов или центра ответственности составляют бюджет (смету) затрат и по данным учета их фактической величины контролируют его соблюдение. При использовании метода сопоставления затрат и производительности в разрезе каждого подразделения предприятия выявляют отклонения, вызванные изменением величины производительности или степени загрузки производственных мощностей и уровня издержек места или центра.

Блок С

1. От чего зависит и как измеряется загрузка производственных мощностей предприятия?

Загрузка производственных мощностей - это уровень использования потенциальных возможностей производства, которые оцениваются отношением фактического выпуска продукции к максимально возможному.

Загрузка производственных мощностей, как правило, измеряется временем использования данного ресурса в день, неделю, месяц. Вычислить загрузку ПМ можно как сумму произведений объема произведенной продукции каждого вида на время изготовления единицы продукции каждого вида на изучаемом участке.

Как правило, ПМ не используются полностью в виду влияния следующих ограничивающих факторов: уровень спроса на производимую продукцию, объем доступных материальных ресурсов (материалы, сырье, топливо), необходимых для производства, ограниченная возможность использования других мощностей предприятия, влияющая на максимально возможный уровень производства в рамках одного цикла и др.

2. Какие расходы зависят от степени загрузки производственных мощностей предприятия ?

Производственные мощности или возможности предприятия - не однородная, а гомогенная величина, состоящая из производственных мощностей отдельных подразделений (цехов, участков) предприятия. В силу разных, в том числе объективных, причин эти мощности не полностью сопряжены друг с другом, например, из-за разной производительности станков, машин и другого оборудования. Отсюда ясно, что затраты материальных и трудовых ресурсов должны учитываться исходя из определенного уровня использования производственных мощностей, как правило, меньшего, чем 100%. Недоиспользованные мощности означают неиспользованные возможности увеличения производства и снижения себестоимости продукции. Отсюда следует, что уровень загрузки ПМ влияет на размер переменных затрат.

3. Что представляет собой размер общей суммы расходов предприятия?

Размер общей суммы расходов предприятия – валовые издержки предприятия (?), представляющие собой совокупность постоянных, не изменяющихся, издержек и переменных издержек, зависящих от объема производимой и реализуемой продукции.

Плюсы

Система калькуляции по нормативным затратам позволяет существенно сократить объем учетной работы;

Обеспечивает твердую основу для выявления существенных отклонений при сопоставлении затрат;

Содействует повышению эффективности управления и контроля за затратами, поскольку требует детального исследования всех производственных, административных и сбытовых функций предприятия, результатом чего является разработка наиболее оптимальных подходов к управлению при снижении издержек;

Нормативные затраты служат лучшим критерием для оценки фактических затрат;

Обеспечивает пользователей информацией об ожидаемых затратах на производство и продажу продукции;

Позволяет установить цены на основе заранее определенной себестоимости единицы продукции;

Позволяет составить отчет о доходах и расходах с выявлением отклонений от норм и причин их возникновения.

Минусы

Много внимания фокусируется на стоимости и производительности труда;

Не обеспечивает предприятие достаточной информацией для поиска путей усовершенствования его деятельности;

Охватывает далеко не все аспекты повышения эффективности производства;

Применяется для периодически повторяемых затрат;

Успешность применения зависит от состава и качества нормативной базы;

Невозможность установить нормы по отдельным видам затрат.

Блок Д

Блок А

В чем различие между постоянными и переменными расходами предприятия?

Критерием разделения затрат на постоянные и переменные является их зависимость от объема производства.

Постоянные затраты не изменяются автоматически с изменением объемов производства или с изменением производственных мощностей. Поэтому понятие постоянных затрат в большей степени применимо для периодов внутри года, когда состав и уровень использования производственных мощностей предприятия существенно не изменяются.

Номенклатура постоянных затрат не может быть единой для всех отраслей промышленности и должна уточняться с учетом специфики предприятия. К постоянным расходам, обычно, можно отнести проценты за кредит, арендная плата, оклады управленческих работников, расходы на охрану помещений, содержание и текущий ремонт зданий, расходы на испытания, опыты и исследования и т.д. В состав постоянных издержек включают и амортизационные отчисления (на восстановление основного капитала). Уровень постоянных затрат в расчете на единицу продукции имеет тенденцию к относительному уменьшению с ростом объема производства, и наоборот.

Увеличение постоянных связано с ростом производственных мощностей и происходит за счет капитальных вложений и дополнительного привлечения оборотных средств. Уменьшение абсолютной величины постоянных расходов достигается путем рационализации производства, сокращения расходов по управлению, реализации излишних основных средств.

Переменные затраты возрастают или уменьшаются в абсолютной сумме в зависимости от изменения объема производства и делятся на пропорциональную и непропорциональную части.

К пропорциональным расходам относят затраты на сырье, основные материалы, полуфабрикаты, зар.плату основных рабочих при сдельной оплате труда, преобладающую часть затрат топлива и энергии на технологические цели, расходы на тару и упаковку изделий.

Непропорциональные затраты могут быть прогрессирующими (т.е. возрастающими быстрее, чем объем производства) и дегрессирующими (если величины их прироста меньше, чем изменение количества продукции)

Сжатием информации в памяти компьютера называ­ют такое ее преобразование, которое ведет к сокраще­нию объема занимаемой памяти при сохранении зако­дированного содержания. Существуют разные способы сжатия для разных типов данных. Только для сжатия графической информации используется около десятка различных методов. Здесь мы рассмотрим один из спо­собов сжатия текстовой информации.

В восьмиразрядной таблице символьной кодировки (например, ASCII) каждый символ кодируется восемью битами и, следовательно, занимает в памяти 1 байт. В разделе 1.3 нашего учебника рассказывалось о том, что частота встречаемости разных букв (знаков) в тексте разная. Там же было показано, что информационный вес символов тем больше, чем меньше его частота встре­чаемости. С этим обстоятельством и связана идея сжа­тия текста в компьютерной памяти: отказаться от коди­рования всех символов кодами одинаковой длины. Сим­волы с меньшим информационным весом, т.е. часто встречающиеся, кодировать более коротким кодом по сравнению с реже встречающимися символами. При таком подходе можно существенно сократить объем общего кода текста и, соответственно, места, занимае­мого им в памяти компьютера.

Такой подход известен давно. Он используется в ши­роко известной азбуке Морзе, несколько кодов которой приведены в табл. 3.1, где "точка" кодируется нулем, а "тире" - единицей.

Таблица 3.1

Буква

Как видно из этого примера и табл. 3.1, чаще встре­чающиеся буквы имеют более короткий код.

В отличие от кодов равной длины, которые использу­ются в стандарте ASCII, в этом случае возникает про­блема разделения между кодами отдельных букв. В аз­буке Морзе эта проблема решается с помощью "паузы" (пробела), которая, по сути, является третьим симво­лом алфавита Морзе, т.е. алфавит Морзе не двух-, а трех-символьный.

А как быть с компьютерной кодировкой, где исполь­зуется двоичный алфавит? Одним из простейших, но весьма эффективных способов построения кодов разной длины, не требующих специального разделителя, явля­ется алгоритм Д.Хаффмена (D.A. Huffman, 1952 г.). С помощью этого алгоритма строится двоичное дерево, которое позволяет однозначно декодировать двоичный код, состоящий из символьных кодов различной длины. Двоичным называется дерево, из каждой вершины ко­торого выходят две ветви. На рис. 3.2 приведен при­мер такого дерева, постро­енного для алфавита англий­ского языка с учетом часто­ты встречаемости его букв. Полученные, таким обра­зом, коды можно свести в таблицу.

Таблица 3.2

Буква

Код Хаффмена

С помощью табл. 3.2 легко кодировать текст. Так, например, строка из 29 знаков

WENEEDMOR ESNOWFORBE TTERSKIING преобразуется в код: 011101 100 1100 100 100 110110001111101011100 ОНО 1100 1110 011101 01001 1110 1011 011100 100 001001 100 10110110 110100011 1010 1010 1100 00001, который при размещении его в памяти побайтно при­мет вид:

01110110 01100100 10011011 00011111 01011100 01101100 11100111 01010011 11010110 1110010000100110 01011011 01101000 11101010 10110000 001

Таким образом, текст, занимающий в кодировке ASCII 29 байт, в кодировке Хаффмена займет только 16 байт.

Обратная же задача - переход от кодов Хаффмена к буквам английского алфавита - осуществляется с помо­щью двоичною дерева (см. рисунок). При этом переко­дировка происходит путем сканирования текста слева на­право с первого разряда, продвигаясь по соответствую­щим (имеющим тот же двоичный код) ветвям дерева до тех пор, пока не попадем в концевую вершину с буквой. После выделения в коде буквы процесс раскодирования следующей буквы начинаем снова с вершины двоичного дерева.

Нетрудно догадаться, что изображенное дерево пред­ставляет собой сокращенный вариант кода Хаффмена. В полном объеме в нем должны быть учтены все возмож­ные символы, встречающиеся в тексте: пробелы, знаки препинания, скобки и др.

В программах, сжимающих текст - архиваторах, таблицу частоты встречаемости символов строят для каждого обрабатываемого текста, а затем формируют коды разной длины типа кодов Хаффмена. В таком слу­чае сжатие текста становится еще более эффективным, так как кодирование настраивается именно на данный текст. И чем размер текста больше, тем эффект сжа­тия значительнее.

Коротко о главном

Сжатием информации называют такое ее преобразо­вание, которое ведет к сокращению объема занимаемой памяти при сохранении закодированного содержания.

Идея способа сжатия текста: длина кода символа уменьшается с уменьшением его информационного веса, т.е. с увеличением частоты встречаемости в тексте.

Алгоритм сжатия по Хаффмену представляется в виде двоичного дерева.

Архиваторы, использующие алгоритм Хаффмена, строят свое двоичное дерево кодирования для каждого текста.

Вопросы и задания

    В чем различие кодов постоянной и переменной длины?

    За счет чего коды переменной длины позволяют "сжимать" текст?

    Закодируйте с помощью ASCII-кодов и кодов Хафф­мена следующий текст: HAPPYNEWYEAR. Подсчитай­те в обоих случаях требуемый объем памяти.

4. Раскодируйте с помощью двоичного дерева (см.рисунок) следующий код:

11110111 10111100 00011100 00101100 10010011 01110100 11001111 11101101 001100

Двоичное дерево алфавита английского языка, используемое для кодирования методом Хаффмена

Коды переменной длины

КОДИРОВАНИЕ И СЖАТИЕ ИНФОРМАЦИ

Кодирование – это сопоставление передаваемому или записываемому в память сообщению некоторой последовательности символов, называемой обычно кодовому слову. Кодирование может преследовать две цели. Первая цель состоит в уменьшении длины передаваемого сообщения (сжатие информации), а вторая - добавлении к передаваемому слову дополнительной информации, помогающей обнаружить и исправить ошибки, возникшие при передаче (помехоустойчивое кодирование). В данной лекции рассматривается первый вид кодов.

Коды переменной длины

Первое правило построения кодов переменной длины, состоит в том, что короткие коды следует присваивать часто встречающимся символам, а длинные – редко встречающимся. При этом коды следует назначать так, чтобы из можно было декодировать однозначно, а не двусмысленно. Например, рассмотрим четыре символа a 1 , a 2 , a 3 , a 4 . Если они появляются в сообщении с равной вероятностью (p = 0,25), то присвоим им четыре двухбитовых кода: 00, 01, 10, 11. Все вероятности равны, поэтому коды переменной длины не сожмут данные. Для каждого символа с коротким кодом найдётся символ с длинным кодом и среднее число битов на символ будет не меньше 2. Избыточность данных равновероятными символами равна 0, и строку таких символов невозможно сжать с помощью кодов переменной длины (или какого-либо другого метода).

Пусть теперь эти четыре символа появляются с разными вероятностями (см. табл. 12.1). В этом случае имеется избыточность, которую можно удалить с помощью кодов переменной длины и сжать данные так, чтобы потребуется меньше 2 бит на символ. Наименьшее среднее число бит на символ равно 1,57, то есть энтропии этого множества символов.

В таблице 12.1 предложен код Код_ 1, который присваивает самому часто встречающемуся символу самый короткий код. Среднее число бит на символ равно 1,77. Это число близко к теоретическому минимуму.

Таблица 12.1

Рассмотрим последовательность из 20 символов

a 1 a 3 a 2 a 1 a 3 a 3 a 4 a 2 a 1 a 1 a 2 a 2 a 1 a 1 a 3 a 1 a 1 a 3 a 1 ,

в которой четыре символа появляются, примерно, с одинаковыми частотами. Этой строке будет соответствовать кодовое слово длины 37 бит:

1|010|01|1|010|010|001|01|1|1|01|01|1|1|010|1|1|01|010|1.

Среднее число бит на символ составляет 1,85, что не слишком далеко от вычисленной минимальной средней длины. Однако если попытаться декодировать последовательность, то окажется, что Код _1 имеет существенный недостаток. Первый бит кодового слова равен 1, поэтому первым символом последовательности может быть только a 1 , так как код никакого другого символа не начинается с 1. Следующий символ равен 0, но коды для символов a 2 , a 3 , a 4 все начинаются с 0, поэтому декодер должен считать следующий символ. Он равен 1, но коды для a 2 и a 3 оба имеют в начале 01. Поэтому декодер не знает, как действовать дальше: декодировать строку как 1|010|01…, то есть a 1 a 3 a 2 …, или как 1|01|001…, то есть a 1 a 2 a 4 .... Дальнейшие биты последовательности не могут исправить положения. Поэтому Код­ _1 является двусмысленным. От этого недостатка свободен Код _2.

Код _2 обладает так называемым префиксным свойством, которое можно сформулировать так: если некоторая последовательность битов выбрана в качестве кода какого-либо символа, то ни один код какого-либо другого символа не должен иметь в начале эту последовательность (код символа не может быть префиксом кода другого символа). Если строка 01 является кодом для a 2 , то другие коды не должны начинаться с 01. Поэтому коды для a 3 и a 4 должны начинаться с 00. Естественно для этого выбрать 000 и 001.

Следовательно, выбирая множество кодов переменной длины необходимо соблюдать два принципа: 1) следует назначать более короткие кодовые последовательности часто встречающимся символам; 2) полученные коды должны обладать префиксным свойством. Следуя этим принципам можно построить короткие, однозначно декодируемые коды, но необязательно наилучшие (то есть самые короткие) коды. В дополнение к этим принципам необходим алгоритм, который всегда порождает множество самых коротких кодов (имеющих наименьшую среднюю длину). Исходными данными этого алгоритма должны быть частоты (или вероятности) символов алфавита. Таким алгоритмом является кодирование по методу Хаффмана.

Следует отметить, что не только статистические методы компрессии используют коды переменной длины для кодирования индивидуальных символов. Такой подход используется, в частности, и в арифметическом кодировании.

Перед тем, как описывать статистические методы кодирования, остановимся на взаимодействии кодера и декодера. Предположим, что некоторый файл (например, текстовый) был сжат с помощью префиксных кодов переменной длины. Для того, чтобы осуществить декодирование, декодер должен знать префиксный код каждого символа. Этого можно добиться тремя способами.

Первый способ состоит в том, что множество префиксных кодов выбирается один раз и используется всеми кодерами и декодерами. Такой метод используется, например, в факсимильной связи. Второй способ заключается в том, что кодирование выполняется в два прохода. На первом проходе кодер считывает кодируемый файл и собирает необходимые статистические сведения. На втором проходе выполняется сжатие. В перерыве между проходами кодер на основе собранной информации создаёт наилучшиё префиксный код именно для этого файла. Такой метод даёт очень хорошую степень сжатия, но обычно он слишком медлителен для практического использования. Кроме того, в сжатый файл необходимо добавлять таблицу префиксных кодов для того, чтобы её знал декодер. Это ухудшает общую производительность алгоритма. Такой подход в статистическом сжатии называют полуадаптивной компрессией.



Понравилась статья? Поделиться с друзьями: