Главная страница

Раздел 1_РЕД_2. I. основы теории множеств. Системы счисления комбинаторика


Скачать 9.96 Mb.
НазваниеI. основы теории множеств. Системы счисления комбинаторика
АнкорРаздел 1_РЕД_2.doc
Дата29.11.2017
Размер9.96 Mb.
Формат файлаdoc
Имя файлаРаздел 1_РЕД_2.doc
ТипДокументы
#10536
страница13 из 17
1   ...   9   10   11   12   13   14   15   16   17

4.4.2 Вычитание


Если числа представлены в разных системах счисления, их предварительно необходимо привести в одну систему счисления. Как и при сложении, записываем одно число под другим таким образом, чтобы разряды с одинаковыми номерами располагались друг под другом. При вычитании большего числа из меньшего результату присваиваем знак «–» и меняем числа местами. Вычитание производим поразрядно, передвигаясь от нулевого разряда к старшим. Если из меньшего числа в разряде вычитается большее, занимаем из следующего старшего разряда одну единицу, равную p единицам текущего разряда.

Пример 4. Вычесть число 8BA3916 из C5D16.

Решение. Так как большее число вычитается из меньшего, присваиваем результату знак «–» и меняем числа местами. Вверху указываем единицы, занимаемые из старших разрядов.

111

8BA39

C5D

8ADDC

Действия в разрядах:

разряд 0 (занимаем единицу в разряде 1): 916+1016 –D16 = 
=
910 + 16101316=1210 = C16;

разряд 1 (занимаем единицу в разряде 2): 216 + 1016516 = 
210 + 1610510 =1310 = D16;

разряд 2 (занимаем единицу в разряде 3): 916+1016C16 = 
=
910+16101210=1310=D16;

разряд 3: A16;

разряд 4: 816.

Ответ: C5D168BA3916 = –8ADDC16.

4.4.3. Прямой и дополнительный коды целых чисел. Их представление в памяти компьютера, сложение и вычитание


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

В формате “беззнаковое целое число” запись положительного целого числа представляет собой его двоичный код, размещенный в байтах, отведенных для него. При этом в одном байте можно разместить двоичные коды всех положительных чисел от 0 (00000000) до 281 = +255 (11111111). Например, 001000102 = +3410, 110011002 = +20410.

В формате “целое число со знаком” знак числа всегда задается в старшем разряде старшего байта: он равен 0 у положительных чисел и 1 у отрицательных. Остальные разряды записи заполняются в зависимости от типа кода. Основными являются прямой код и дополнительный.

Прямой код – это такое представление целого числа со знаком, в котором старший разряд старшего байта отводится под знак числа, а все оставшиеся разряды – под двоичную запись его абсолютной величины (модуля). Например, для однобайтового представления знак помещается в старшем разряде 7, а модуль – в разрядах с 0 по 6: 000010102 = +1010, 100010102 = –1010. При этом диапазон значений охватывает от
(–
12710) = 111111112 до (+12710)=011111112.

Для общности прямым кодом беззнакового целого числа можно считать его двоичную запись. Сложение байтовых беззнаковых целых чисел производится по модулю числа 28 =256. При этом единичные значения, возникающие в разряде 8, выходящем за состав байта, отбрасываются. Например:

100101102 + 011101112 = 1 000011012 = 000011012 (mod 28).

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

a – b (mod 28) = a + (–b)(mod 28) = a + (28 – b)(mod 28).

Выражение (28b) называют дополнительным кодом отрицательного числа (–b), соответствующего байтовому беззнаковому числу b. Его можно получить:

1) инвертированием двоичной записи всех разрядов числа b (при котором получается число вида 28 – 1 – b) и последующим

2) прибавлением к нему 1, после чего получаем искомую величину
(28 – b).

Дополнительный код положительного числа совпадает с прямым.

Пример 5. Выполнить вычитание (1037) байтовых беззнаковых чисел с использованием дополнительного кода. Найти результат в дополнительном коде, а также его модуль в прямом коде.

Решение. Прямой двоичный код беззнакового числа 10 равен 000010102. Прямой код числа 37 равен 001001012. Найдем его дополнительный код:

Инверсия всех разрядов: 110110102. Добавление единицы: 110110112.

Результат сложения: 000010102 +110110112 =111001012.

Так как большее число вычиталось из меньшего, ответ отрицательный. Для определения абсолютной величины ответа переведем его в прямой код.

Вычитание: 111001002. Инвертирование: 000110112.

Полученное значение модуля результата равно 2710.

Ответ: а) 111001012, б) 000110112.

Пример 6. Выполнить вычитание (14417) байтовых беззнаковых чисел с использованием дополнительного кода. Найти результат в дополнительном и прямом кодах.

Решение. Прямой двоичный код беззнакового числа 144 равен 100100002. Прямой код числа 17 равен 000100012. Найдем его дополнительный код:

Инверсия всех разрядов: 111011102. Добавление единицы: 111011112.

Результат сложения: 100100002 + 111011112 = 011111112.

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

Ответ: а) 011111112, б) 011111112.

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

1) занесением в старший знаковый разряд 7 значения 1, означающего отрицательное число;

2) инвертированием двоичной записи всех разрядов числа b помимо знакового старшего (при котором в данных разрядах будет получена запись числа 27 – 1 – b) и 3) прибавлением 1 к полученному в младших разрядах числу, после чего получаем в них искомую величину (27 – b).

При сложении чисел с одинаковым знаком этот же знак присваивается и результату. При сложении чисел с разными знаками в качестве знака результата принимается знак большего по модулю складываемого числа. Например, вычитание целых со знаком чисел (9610 – 2210) можно представить в виде сложения прямого кода первого числа с дополнительным кодом числа (–2210), причем знак результата совпадает со знаком большего по модулю первого числа. Учитывая, что дополнительный код числа
(–2210) = 11010102, получим:

9610 – 2210 = 9610 + (–22)10 = 011000002 + 111010102 = 010010102=7410.

Двоичное 8-ми разрядное число со знаком в дополнительном коде может представлять любое целое в диапазоне от 128 до +127. Если результат вычитания является отрицательным числом, то он получается в дополнительном коде и для оценки модуля результата его переводят в прямой код.

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

Десятичное представление

Код байтового двоичного представления целых чисел со знаком

прямой

дополнительный

127

01111111

01111111

1

00000001

00000001

0

00000000

00000000

0

10000000

00000000

1

10000001

11111111

3

10000011

11111101

7

10000111

11111001

8

10001000

11111000

10

10001010

11110110

127

11111111

10000001

128

---

10000000

Пример 7. Представить байтовое отрицательное число со знаком (−21) в а) прямом и б) дополнительном кодах.

Решение. Прямой код отрицательного числа со знаком (−21) равен его двоичной записи с единицей в старшем разряде: 100101012. Строим дополнительный код:

Инверсия его разрядов 0–6: 111010102.

Добавление единицы: 111010112.

Ответ: а) 100101012, б) 111010112.

Пример 8. Найти в дополнительном и прямом кодах результат вычитания (5 – 21) байтовых целых чисел со знаком с использованием дополнительного кода.

Решение. Из примера 7 берем дополнительный код отрицательного числа со знаком (−21): 111010112. Выполняя его сложение с прямым кодом положительного числа 5, получим дополнительный код итогового числа.

00000101

+11101011

11110000

Полученный дополнительный код переводим в прямой: Вычитание единицы: 111011112. Инверсия его разрядов 0–6: 100100002.

Получен прямой код отрицательного числа (–16).

Ответ: а) 111100002, б) 100100002.

4.5. Двоичные (булевы) векторы

Двоичным (булевым) n-мерным вектором называют набор из n чисел (b1b2, ..., bn), каждое из которых может принимать только значения в двоичной системе счисления – 0 или 1.

Двоичный вектор является обратным (инвертированным) к , если он образован из заменой всех нулей единицами, а единиц – нулями.

Например, если  = (011101), то  = (100010).

Если в записи двоичного вектора длины n устранить запятые, его можно рассматривать как двоичную запись некоторого целого числа. Наименьшим таким числом является 0. Ему соответствует вектор  = (0, ..., 0). Наибольшим является число 2n – 1, которому соответствует вектор  = (1, ..., 1). Следовательно, при помощи полного набора двоичных векторов длины n можно записать все 2n целых чисел из отрезка
[0,2n1]. Такие числа называют порядковыми номерами векторов. Их используют как в двоичном виде, так и в десятичной системе счисления.

Пример 1. Найти порядковый номер булева вектора  = (1, 0, 0, 1, 0, 1) в десятичной системе счисления.

Решение. Устраняя запятые в векторе, получим двоичную запись 1001012. Переводя ее по правилу 2.1.1 в десятичную систему счисления, получим:

1001012 = 125 + 122 + 120 = 3210 + 410 + 110 = 3510.

Ответ: десятичный порядковый номер заданного булева вектора равен 3510.

В качестве меры близости булевых векторов используют расстояние Хэмминга.

ОпределениеРасстоянием Хемминга между булевыми векторами nиn называют величину ( n, n), которая равна числу координат, по которым различаются векторы nиn.

Пример 8.  (100011, 110011)=1, (0101, 1010)=4.

Определение. Булевы векторы nиn , различающиеся ровно по одной координате (  (n,n) = 1), называют соседними.

Рассмотрим наиболее употребительные геометрические интерпретации булевых n – мерных векторов.

1. Представление в виде двоичных чисел. Если в записи вектора bn устранить запятые, ее можно рассматривать как двоичную запись некоторого целого числа. Наименьшим таким числом является 0. Ему соответствует вектор bn =(0, ..., 0). Наибольшим является число 2n1, которому соответствуетbn = (1, ..., 1). Следовательно, при помощи векторов bn можно записать все 2n целых чисел из интервала [0, 2n– 1]. Такие числа будем называть порядковыми номерами векторов.

Лексикографическим называют такой порядок векторовbn, когда соответствующие им двоичные числа расположены по возрастанию от 0 до 2n – 1.

В качестве примера рассмотрим полное множество 3-мерных двоичных векторов, расположенных в лексикографическом порядке:

0 (0, 0, 0), 4 (1, 0, 0),

1 (0, 0, 1), 5 (1, 0, 1),

2 (0, 1, 0), 6 (1, 1, 0),

3 (0, 1, 1), 7 (1, 1, 1).

2. Бинарное дерево Тn. Сопоставим множеству всех 2nвекторовbn следующую древовидную структуру, начинающуюся
в корневой вершине О (вершине нулевого уровня). Из нее выходят вниз два отрезка (ребра), соответствующие значениям b1=0(влево) и b1=1(вправо) и оканчивающиеся вершинами первого уровня. Из них выходят вниз по два ребра, соответствующие b2=0(влево) и b2=1(вправо) и оканчивающиеся новыми вершинамивторого уровня и т. д. Процесс завершается построением всех вершин n-го уровня. Данная структура называется
бинарным деревом и обозначается Тn. На рис. 4.1 показано
дерево Т3для 3-мерного булевого вектораb3=(х, у, z).



Рис. 4.1. Бинарное дерево Т3

Пронумеруем слева направо все вершины n-го уровня от 0до
2n – 1. Каждому вектору bn можно однозначно поставить
в соответствие путь из корневой вершины О в вершину n–го уровня с порядковым номером вектора bn. Например, вектору (0,1,0) в рассмотренном примере соответствует путь из корневой вершины в вершину 2 (0102 = 210) по ребрам х = 0, у = 1, z = 0. Таким образом, бинарное дерево полностью описывает все 2nвекторовbn.

3. Единичный n-мерный куб Вn. Единичным n-мерным кубом называют полный набор вершин, соответствующих векторамbn, в котором каждые две соседних вершины (которым соответствуют векторы, различающиеся ровно по одной координате) соединены отрезком (ребром). Обозначается единичный n-мерный куб как Вn. На рис. 4.2 показаны кубы В1, В2, а также плоские проекции кубов В3, В4.

Определение. Дана вершинаnв Вn. Множество вершин Вn{n}, для которых (n,n)= r, называют сферой радиуса r. Множество {n} вершин Вn, для которых (n,n) r, называют шаром радиуса r.



Рис. 4.2. Единичные n-мерные кубы В1, В2 и плоские проекции кубов В3, В4

Вопросы для проверки знаний.

1. Есть ли принципиальное различие правил выполнения сложения и вычитания в десятичной системе счисления и других системах с постоянными основаниями?

2. Какой формат компьютерного представления чисел называют беззнаковым целым числом?

3. Какой формат компьютерного представления чисел называют целым числом со знаком?

4. Какой способ компьютерного представления целых чисел называют прямым кодом?

5. Какой способ компьютерного представления целых чисел называют дополнительным кодом?

6. Для каких целых чисел прямой код совпадает с дополнительным кодом?

7. Может ли целое число занимать в электронной памяти а) 4 бита, б) 6 бит, в) 8 бит, г) 10 бит?

8. По каким правилам осуществляется перевод беззнаковых байтовых целых чисел из прямого кода в дополнительный и обратно?

9. По каким правилам осуществляется перевод байтовых целых чисел со знаком из прямого кода в дополнительный и обратно?

10. В каких случаях вычитание байтовых беззнаковых целых чисел дает результат в прямом коде, а в каких – в дополнительном?

11. Что называют двоичным (булевым) n-мерным вектором?

12. Какую операцию называют инвертированием булевого вектора?

13. Какие числа называют порядковыми номерами булевых векторов?

14. Что называют лексикографическим порядком двоичных векторов?

Практические задания.

1. Сложить в системе с основанием 16 числа 233014 и 14358.

2.Сложить в восьмеричной системе числа 1011011012 и 9СВ16.

3. Выполнить вычитание (192103) байтовых беззнаковых чисел с использованием дополнительного кода.

4. Найти порядковый номер двоичного вектора (0, 0, 1, 0, 1, 1, 0) в десятичной системе счисления.

5. Упорядочить по возрастанию порядковых номеров булевы векторы длины 5: (0, 0, 1, 0, 1), (0, 1, 1, 0, 1), (1, 0, 1, 0, 0).

4.6. Смешанные позиционные системы счисления. Факториальная система

Важным обобщением позиционных систем с постоянным основанием являются смешанные системы, где основания меняются от разряда к разряду. Обозначим основания разрядов с номерами 0, 1, ..., k через р0, р1, ..., рk. Тогда запись вида Аp=k...210означает представление в смешанной системе счисления величины kр(k-1) ... p1р0+ ...+2p1р0+1р0 + 0. Каждый коэффициент i удовлетворяет неравенcтву: 0 i pi . Наиболее известным примером смешанной системы счисления является общепринятая система измерения времени: «секунды – минуты – часы – сутки – недели – годы», основаниями в которой являются числа р0= 60, р1= 60, р2= 24, р3 = 7, р4=52.

4.6.1. Перевод целых чисел из десятичной системы в смешанную с основаниями р0, р1, ... ,рk

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

Пример 1. Выразим временной период А = 1 526 840 секунд в общепринятой системе измерения времени «сек — мин — ч — сут. — нед. —
— годы», где р0 = 60, р1 = 60, р2 = 24, р3= 7, р4=52.

Решение. 1526840 60

15268202544760

20 25440 424 24

7 408 177

16 142

3.

Рассматривая в обратном порядке остатки от деления на каждом шаге и самое последнее частное, получим искомую запись числа:

А =43210=2/3/16/07/20 = 2недели 3 дня 16 часов 7 минут 20 секунд.

Обратный перевод из смешанной системы в десятичную осуществляют посредством умножения каждого символа k на сомножитель, представляющий собой произведение рkр(k–1)∙∙∙p1р0,
с последующим суммированием полученных произведений.

С точки зрения практического применения в комбинаторных задачах из смешанных систем счисления для представления целых чисел наиболее важна факториальная, где стоимость каждого разряда с номером i равна i!. При этом основание разряда равно pi = i + 1.Запись k∙∙∙210. в факториальной системе обозначает число Аф=kk! +...+2 2!+ 11!+0. Поскольку в математике принято соглашение 0! = 1, то в факториальной системе всегда задается 0=0. Правила перевода из десятичной системы счисления в факториальную и обратно аналогичны правилам для всех смешанных систем.

Пример 2. Перевести в факториальную систему счисления
число А = 62710.

Решение

627 1

627 6272

0 6263133

1 3121044

1 104265

0 255

1

Ответ: Искомое представление числа в факториальной системе имеет вид: А ф= 510110.

Обратный перевод выполняется следующим образом:

А = 55! + 14! + 0  3! + 12! + 1 1! =5120 + 124 + 12 + 11 = = 600 + 24 + 2 + 1 = 62710.

Факториальная запись чисел удобна для подсчета вариантов множеств, состоящих из взаимно отличных друг от друга объектов.

Задачи

1. Перевести в двоичную систему числа:

а) 105210, б) 0,96510, в) 31,5310, г) 159,6610.

2. Перевести в десятичную систему числа:

а) 11001102, б) 0,00102, в) 10101,0112, г) 110,01012.

3. Доказать, что в n – мерном кубе Вn :

а) количество вершин в сфере радиусом 1 равно n, а количество вершин в шаре радиусом 1 равно n +1;

б) количество вершин в сфере радиусом 2 равно (n – 1)/2,
а количество вершин в шаре радиусом 2 равно n(n+1)/2+1.

4. Доказать (например, с использованием метода математической индукции), что общее количество вершин в бинарном дереве Тnравно 2n+1–1.

5. Доказать методом математической индукции, что в n-мерном кубе Вn число ребер равно n2n–1.

6. Доказать, что на множестве всех n-мерных булевых векторов расстояние Хэмминга удовлетворяет неравенству треугольника:

 (n,n) +  (n, n)   (n,n),

гдеn,n,n — любые векторы из bn .

7. Пусть Вn— множество всех n – мерных двоичных векторов
bn, которые появляются случайно c одинаковой вероятностью. Доказать, что средневероятный вес св(b n) булевых векторовbn равен n/2.

8. Перевести в двоичную систему и систему с основанием 4 числа B23DA16, АD7С16.

9. Перевести в десятичную систему числа F9B8316, CАF516.

10.Перевести в шестнадцатеричную систему числа 1101102 , 11011012 , 10110110101012 .

11.Перевести, используя сокращенные правила перевода, из восьмеричной системы в двоичную числа 57168, 1738 , 2658 .

12. Перевести следующие дроби в десятичную систему:

а) 0,168, б) 0,213, в) 0,436, г) 0,57.

13. Выполнить следующие арифметические действия:

а) 120211013 – 2100122313 , 74358139 – 5250489 ;

б) 101111012  11012 , A4D316 C5A16 ;

в) 5362 7 : 657 , 67516 8 : 478 .

14. Перевести в факториальную систему числа:

а) 17210, б) 93410, в) 21578, г) 15356.

15. Перевести в десятичную систему из факториальной числа:
а) 423010, б) 231200, в) 142110, г) 502110.

1   ...   9   10   11   12   13   14   15   16   17


написать администратору сайта