- •1. Жизненный цикл программного обеспечения ис, модели жизненного цикла.
- •Модели жизненного цикла по
- •Каскадная модель
- •Спиральная модель
- •Подход rad
- •4. Базовые технологии локальных сетей, общая характеристика протоколов локальных сетей, структура стандартов iee802.Х.
- •2. Технология Token Ring
- •5. Помехоустойчивое кодирование, циклические коды, коды Хэмминга.
- •6. Назначение и функции ос. Функциональные компоненты ос Linux.
- •7. Кодирование с минимальной избыточностью, алгоритм Шеннонна Фано.
- •8. Оптимальное кодирование. Алгоритм Хаффмана.
- •9. Процессы и потоки. Мультипрограммирование, планирование процессов и потоков.
- •10. Управление памятью, типы адресов, алгоритмы распределения памятью.
- •11. Сжатие данных. Алгоритм Лемпела-Зива.
- •12. Структурное моделирование информационных систем. Методология функционального моделирования sadt. Моделирование потоков данных dfd. Моделирование данных erd.
- •13. Объектное моделирование информационных систем. Этапы проектирования ис с применением унифицированного языка визуального моделирования uml.
- •14. Алфавитное кодирование. Разделимые схемы. Префиксные схемы. Неравеснтво Макмиллана.
- •15. Адресация в сетях tcp/ip.
- •16. Общая характеристика и классификация case средств.
- •17. Стандартные стеки коммуникационных протоколов.
- •18. Структурное моделирование информационных систем. Методология функционального моделирования sadt. Моделирование потоков данных dfd. Моделирование данных erd.
- •19. Основы передачи дискретных данных. Характеристики линий связи.
- •20. Сетевые ос (Windows 2003 Server). Требования к современным ос.
- •21. Управление памятью. Типы адресов. Алгоритмы распределения памятью.
- •22. Способы организации памяти на различных уровнях иерархии зу.
8. Оптимальное кодирование. Алгоритм Хаффмана.
Одно и то же сообщение можно закодировать различными способами. Оптимально закодированным будем считать такой код, при котором на передачу сообщений затрачивается минимальное время. Если на передачу каждого элементарного символа (0 или 1) тратиться одно и то же время, то оптимальным будет такой код, который будет иметь минимально возможную длину.
Метод Хаффмана: буквы алфавита сообщений вписываются в столбец в порядке убывания вероятностей. Две последние буквы объединяются в одну вспомогательную букву, которой приписывается суммарная вероятность. Вероятности букв, не участвовавших в объединении, и полученная суммарная вероятность снова располагаются в порядке убывания вероятностей в дополнительном столбце, а две последние буквы объединяются.
Кодирование методом Хаффмана.
В методе Хаффмана кодовые слова формируются, начиная с последнего символа.
Шаг 1. Переменной-счетчику t присваиваем значение 1: t := 1. Рассматриваем вспомогательную последовательность символов At, полагая на первом шаге a1 = А.
Шаг 2. Из последовательности At выбираем М символов ai1 ,аi2, ..... aim , которым соответствуют наименьшие вероятности появления
Шаг 3. Для выбранных символов формируются очередные (считая от конца) элементы кодовых слов: в кодовое слово, соответствующее символу ai, (i= 1, 2, . . . , М), добавляется символ кодового алфавита bi.
Шаг 4 Символы ai1, ai2, . . .., aim объединяются в один вспомогательный
м символ at с вероятностью р(аt) = p(ai)
Шаг 5. Из последовательности символов исходного алфавита At исключаем символы ai1, ai2, . . .., aim , вместо них добавляем аt . Полученную последовательность обозначим At+1.
Шаг 6. Если At+1 состоит из одного элемента, то алгоритм заканчивает работу. Иначе t := t + 1 и переходим к шагу 2.
Процесс продолжается до тех пор, пока все символы исходного алфавита не будут заменены одним вспомогательным символом, которому должна соответствовать вероятность 1.
Алгоритм Хаффмена
Метод Хаффмана: буквы алфавита сообщений вписываются в столбец в порядке убывания вероятностей. Две последние буквы объединяются в одну вспомогательную букву, которой приписывается суммарная вероятность. Вероятности букв, не участвовавших в объединении, и полученная суммарная вероятность снова располагаются в порядке убывания вероятностей в дополнительном столбце, а две последние буквы объединяются.
Код Хаффмена
Вход: n – количество букв, P: array [1..n] of real – массив вероятностей букв, упорядоченный по убыванию.
Выход: C: array [1..n,1..L] of 0..1 – массив элементарных кодов, l: array [1..n] of 1..L – массив длин элементарных кодов схемы оптимального префиксного кодирования.
If n=2 then
C[1,1]:=0; l[1]:=1; (первый элемент)
C[2,1]:=1: l[2]:=1; (второй элемент)
else
q:=P[n-1]+ P[n]; (сумма двух последних вероятностей)
j:=Up(n,q); (поиск места и вставка суммы)
haff(P,n-1); (рекурс вызов)
Dawn(n,j); (достраивание кодов)
End;
Функция Up находит в массиве Р место, в котором должно находиться число q и вставляет это число, сдвигая вниз остальные элементы.
Вход: n – длинна обрабатываемой части массива, P, q – вставляемая сумма.
Выход: измеренный массив P.
For i from n-1 downto 2 do
If P[i-1] <=q then
P[i]:=P[i-1]; (сдвиг элемента массива)
Else
j:=i-1; (определение места вставляемого элемента)
exit for i (все сделано цикл не нужно продолжать)
end;
end;
p[j]:=q (запись восстанавливаемого элемента)
return j
Процедура Dawn строит оптимальный код для n букв на основе построенного оптимального кода для n-1 буквы. Для этого код буквы с номером j временно исключается из массива С путем сдвига вверх кодов букв с номерами, большими j, а затем в конец обрабатываемой части массива С добавляется пара кодов, полученных из кода буквы с номером j удлинением на 0 и 1, соответственно. Здесь C[i,*] означает вырезку из массива, т.е. i-ю строку массива С.
Вход: n – длинна обрабатываемой части массива, P, j – номер «разделяемой» буквы.
Выход: оптимальные коды в первых n элементах массивов C и l.
c:=C[j,*]; (запоминание кода буквы j)
l:=l[j]; (и длинны этого кода)
for i from j to n-2 do
C[i,*]:=C[i+1,*]; (сдвиг кода)
l[i]:=l[i+1]; (и его длинны)
end;
C[n-1,*]:=c; C[n,*]:=c; (копирование кода буквы j)
C[n-1,l+1]:=0; C[n,l+1]:=1; (наращивание кодов)
l[n-1]:=l+1; l[n]:=l+1; (и увеличение длин)