Новосибирский Государственный Университет
Опубликован: 08.11.2006 | Доступ: свободный | Студентов: 1878 / 92 | Оценка: 4.27 / 4.09 | Длительность: 12:16:00
Специальности: Программист
Лекция 2:

Целые и последовательности (последовательное распределение)

< Лекция 1 || Лекция 2: 12 || Лекция 3 >
Аннотация: Введение. Целые. Последовательности. Различные способы представлений конечных последовательностей (или начальных сегментов бесконечных последовательностей) и операции над ними.

Введение

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

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

Целые

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

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

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

(d_{0},d_{1},d_{2},d_{3},\ldots,d_{k}), ( 2.1)
в которой каждое d_{i} - целое, удовлетворяющее условию 0
\leqslant d_{i} < r и d_{k} \ne 0. Нуль представляется последовательностью (0). r называется основанием системы (r > 1). Целое, соответствующее последовательности (2.1), имеет вид
N = d_{0} + d_{1}r + d_{2} r^2 + d_{3} r^3 + \ldots + d_{k} r^k,
что принято выражать следующим образом:
N = (d_{k} d_{k - 1} \ldots d_{1d} d_{0} )_{r}.
На протяжении истории использовались различные значения r. Например, древние вавилоняне использовали r = 60, а индейцы племени Майя — r = 20. Сегодня наиболее широко используется r = 10 - десятичная система, которую мы унаследовали от арабов, и r = 2 - двоичная система, которая лежит в основе современных вычислительных устройств. В действительности она применяется лишь на самом низком уровне аппаратного оборудования; в сложных вычислительных устройствах и базисных языках удобнее использовать r = 8 или r = 16.

Единственность этого представления можно доказать методом от противного. Числа N = 0 и N = 1, очевидно, имеют единственное представление. Предположим, что представление не единственно, и пусть N > 1 будет наименьшим целым числом, имеющим два различных представления:

N = (d_{k} d_{k - 1} \ldots d_{0})_{r} = (e_{l} e_{l - 1} \ldots e_{0} )_{r}.
Если k \ne l, то без потери общности предположим, что k
> l. Тогда, поскольку
\sum\limits_{i = 0}^l {(r - 1)r^i  = r^{l + 1}  - 1}
 < r^{l + 1}  < r^k
и поскольку d_{k} \ne 0, мы заключаем, что
(d_k d_{k - 1} \ldots d_0 )_r  > (e_l e_{l - 1} \ldots e_0 )_r, ( 2.2)
что невозможно. Таким образом, мы должны иметь k = l. Аналогично, если d_k  > e_k, мы имели бы снова неравенство (2.2) и отсюда с необходимостью d_k = e_k. Следовательно, число
N - d_k r^k = (d_{k - 1} d_{k - 2},\ldots,d_0 = (e_{k - 1} e_{k - 2} \ldots e_0 )_r
имеет два различных представления, что противоречит предположению, что N - наименьшее из таких чисел.

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

Алгоритм 1. Преобразование числа N в его представление (d_k d_{k {-1} \ldots d_1 d_0 )_r в системе счисления с основанием r .

Он строит последовательность d_0,d_1,d_2,\ldots d_k путем повторения деления на r и записи остатков. Пусть на первом шаге при делении N на r остаток будет d_0 . Частное, полученное в результате первого шага, делим на r, вновь полученное частное делим на r и так далее. Полученная в результате такого процесса последовательность остатков и будет требуемым представлением N по основанию r.

Важным обобщением систем счисления с основанием r являются смешанные системы счисления, в которых задается не единственное основание r, а последовательность оснований r_0,r_1,r_2,\ldots, и последовательность (2.2) соответствует целому

N = d_0  + d_1 r_0  + d_2 r_0 r_1 + d_3 r_0 r_1 r_2 + \ldots + d_k \prod\limits_{i = 0}^{k - 1} {r_i },
где теперь каждое d_i удовлетворяет неравенству 0 \leqslant d_i  < r_i и d_k \ne 0
, если N \ne 0 - тот факт, что каждая такая последовательность соответствует единственному числу и каждое положительное целое число имеет единственное представление, следует из простого обобщения результатов для обычных систем счисления, которые являются частным случаем смешанных систем при r_i  =
r,i \geqslant 0.

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

Пример. Рассмотрим нашу систему измерения времени: секунды, минуты, часы, дни недели и годы. Это - в точности смешанная система с r_0  = 60,r_1 
= 60,r_2 = 24,r_3 = 7,r_4 = 52.

Представление целого N в смешанной системе счисления (r_0,r_1,\ldots ) осуществляется с помощью алгоритма 2, который является простым обобщением алгоритма 1. Вместо того, чтобы для получения d_k в качестве делителя всегда использовалась r, в алгоритме 2 используется r_k .

Алгоритм 2. Преобразование числа N в его представление (d_0,d_1,\ldots,d_k ) в смешанной системе счисления (r_0,r_1,r_2,\ldots ).

Последовательности

Бесконечная последовательность

s_1,s_2,s_3,\ldots
формально определяется как функция f, областью определения которой является множество положительных целых чисел: f(i) = s_i,i \geqslant 1. Во многих случаях индексирование последовательности более удобно начинать с нуля; тогда областью определения f будет множество целых неотрицательных чисел. Аналогично определим конечную последовательность или список
s_1,s_2,\ldots,s_n
как функцию, областью определения которой является множество \{ 1,2,\ldots,n\}. Примером бесконечной последовательности являются простые числа
i:1\;2\; 3\; 4\; 5\; 6\; 7\; 8\; 9\; 10… ( 2.3)
p_i : 2\; 3\; 5\;  7\; 11\; 13\; 17\; 19\; 23\; 29…,
а перестановка
\Pi(1,2,3,4,5,6)=(6,2,5,1,3,4)
представляет собой пример конечной последовательности.

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

< Лекция 1 || Лекция 2: 12 || Лекция 3 >
Андрей Посохов
Андрей Посохов
Россия, Санкт-Петербург
Вадим Лелес
Вадим Лелес
Россия