Метод кодирования на основе матрицы Для решения поставленной задачи разработан математически обоснованный метод матричного кодирования, который представлен в виде алгоритма. В основу алгоритма положена треугольная модифицированная матрица Паскаля, которая имеет следующую структуру: 1) по главной диагонали расположены нулевые элементы; 2) элементы первого столбца равны номеру соответствующей строки мину единица; 3) все остальные элементы матрицы строятся по рекурсивной формуле:𝑇(𝑖,𝑗) = 𝑇(𝑖−1,𝑗−1) + 𝑇(𝑖−1,𝑗) ,где 𝑖 = ̅̅̅̅̅ 3, 𝑛, 𝑗 = ̅̅̅̅̅̅ 2, 𝑚 . Данную матрицу можно построить и не рекурсивным методом: 1) по главной диагонали расположены нулевые элементы; 2) элемент 𝑇(𝑖,𝑗), для которого 𝑖 > 𝑗, равен биномиальному 𝑗 коэффициенту 𝐶𝑖−1 . Таким образом, матрица имеет следующий вид: Заметим, что 𝑖 и 𝑗могут быть неограниченны. Сущность метода кодирования на основе матрицы заключается в следующем. Пусть имеется некоторое множество 𝑆1 , состоящее из всех неотрицательных десятичных целых чисел. Необходимо найти преобразование этого множества во множество двоичных слов (обозначим его 𝑆2 ), причем длина и ранг этих слов могут быть переменными, кроме этого должно быть найдено и обратное преобразование. Обязательным требованием для данного отображения множеств является биективность, которая бы гарантировала однозначность кодирования и декодирования. Утверждение 1. Для двух элементов 𝐶 и 𝐷 множества𝑊(𝑃,𝑅) таких, что 𝐶 ≫ 𝐷,справедливо неравенство 𝜓(𝐶) > 𝜓(𝐷) . Доказательство. Рассмотрим структуру кодирующей матрицы. Заметим, что для любых 𝑤1 и 𝑤2 таких, что 𝑤1 ≤ 𝑤2и для любых 𝑘1 и 𝑘2, удовлетворяющих условию 𝑘1 < 𝑘2, справедливо 𝑇(𝑘1,𝑤1) < 𝑇(𝑘2.𝑤2) . Согласно алгоритму декодирования 𝜓(С) = ∑ 𝑇(𝐴𝐶𝑖 , 𝐵𝑖𝐶 ), 𝑖:𝐵𝑖𝐶 ≠0 Где 𝐴𝐶 и 𝐵 𝐶 – упорядоченные по убыванию значений элементов множества специальной структуры. Пусть 𝑘 – степень предпочтительности кода 𝐶 и 𝐷.Тогда 𝐵𝑘𝐶 –порядковый номер единицы в коде 𝐶, на котором реализовалось отношение предпочтения степени 𝑘. По построению множества 𝐵 существует номер 𝑠такой, что 𝐵𝑆𝐷 = 𝐵𝐾𝐶 . Так как 𝐶 ≫ 𝐷, то 𝐴𝐶𝐾 > 𝐴𝐷 𝑆 . А это значит, что суммируя элементы кодирующей матрицы по вышеизложенному алгоритму, получим числа 𝜓(𝐶) и 𝜓(𝐷) , удовлетворяющие условию𝜓(𝐶) > 𝜓(𝐷) , что и требовалось доказать. Следствие. Операция декодирования задаст инъективное преобразование 𝑊(𝑃,𝑅) множества кодов во множество𝐾(𝑃,𝑅) . Доказательство. Для доказательства рассмотрим два различных элемента множества кодов𝑊(𝑃,𝑅) . Обозначим их 𝐶и 𝐷. Очевидно, что между ними существует отношение предпочтения. Пусть 𝐶 ≫ 𝐷, применим операцию декодирования к данным кодам. По утверждению 1 получим числа𝜓(𝐶) и 𝜓(𝐷) . Следовательно, разными кодами, которые играют роль прообразов, соответствуют разные числа, играющие роль образов. Это тем самым доказывает, что 𝜓 – инъекция. Утверждение 2. Элемент кодирующей матрицы ровно на единицу больше суммы элементов вышестоящей диагонали. Доказательство. Докажем следующее равенство: 𝑇(𝑖,𝑗) = 𝑇(𝑖−1,𝑗) + 𝑇(𝑖−2,𝑗−1) + ⋯ + 𝑇(𝑖−𝑗+1) + 1 𝑗 По правилу построения кодирующей матрицы 𝑇(𝑖,𝑗) = 𝐶𝑖−1 . Тогда доказываемое равенство примет вид: 𝑗 𝑗 𝑗 1 𝐶𝑖−1 = 𝐶𝑖−2 + 𝐶𝑖−3 + ⋯ + 𝐶𝑖−𝑗 +1 𝑗 𝑗 𝑗− По свойству биномиальных коэффициентов 𝐶𝑖−𝑗 = 𝐶𝑖−2 + 𝐶𝑖−2. 𝑗−1 𝑗−1 1 Используя это свойство, получим 𝐶𝑖−2 = 𝐶𝑖−3 + ⋯ + 𝐶𝑖−𝑗 + 1. А это в свою очередь является тождеством, таким образом, утверждение доказано. Утверждение 3. Для любого элемента𝐷 ∊ 𝑊(𝑃,𝑅) справедливо 𝜓(𝐷) ∊ 𝐾(𝑃,𝑅) . Доказательство. Пусть 𝐶 – самый предпочтительный код среди кодов длины 𝑃ранга 𝑅. Очевидно, что он будет иметь следующий вид: первые 𝑅позиций занимают единицы, а остальные(𝑃 − 𝑅)–нули. Согласно алгоритму декодирования, этот код соответствует числу 𝛹(С) = 𝑇(𝑃,𝑅) + 𝑇(𝑃−1,𝑅−1) + ⋯ + 𝑇(𝑃−𝑅+1,1) . Из утверждения 2 следует, что 𝑇(𝑃,𝑅) + 𝑇(𝑃−1,𝑅−1) + ⋯ + 𝑇(𝑃−𝑅+1,1) = 𝑇(𝑃+1,𝑅) − 1. Значит, 𝛹(С) = 𝑇(𝑃+1,𝑅)−1) .Так как𝑇(𝑃,𝑅) = 𝐶𝑃𝑅 ,то 𝑅 𝛹(𝐶) = 𝐶𝑃−1 . (1) Возьмем произвольный код 𝐷 ∈ 𝑊(𝑃,𝑅) ,отличный от кода 𝐶. Ясно, что 𝑅 𝐶 ≫ 𝐷. Из утверждения 1 𝛹(𝐷) < 𝛹(𝐶) . Учитывая (1), имеем 𝛹(𝐷) < 𝐶𝑃−1 .То, что 𝛹(𝐷) ≥ 0, следует из самого алгоритма декодирования. Таким образом,𝛹(𝐷) ∈ 𝐾(𝑃,𝑅) , что и требовалось доказать. Утверждение 4. Операция декодирования задает биективное отображение множества кодов𝑊(𝑃,𝑅) во множество 𝐾(𝑃,𝑅) . Доказательство. Доказательство этого утверждения опирается на следующие ранее доказанные факты: 1) по следствию из утверждения 1 операция декодирования задает инъекцию. 2) 𝑐𝑎𝑟𝑑𝑊(𝑃,𝑅) = 𝑐𝑎𝑟𝑑𝐾(𝑃,𝑅) . Этот факт очевиден, т.к. количество всех возможных наборов из нулей и единиц, содержащих ровно 𝑅 единиц и𝑃 − 𝑅 нулей, равно𝐶𝑃𝑅 . 3) Из утверждения 3 все образы декодирующего отображения 𝛹 множества кодов𝑊(𝑃,𝑅) принадлежат множеству 𝐾(𝑃,𝑅) .Отсюда очевидно, что оператор декодирования является биекцией. Докажем следующую теорему. Теорема. Предложенный алгоритм преобразования дискретной информации для любого положительного 𝑅задаёт биективное отображение множества кодов𝑊(𝑃(𝑅),𝑅) во множество 𝑆1 . Доказательство. Заметим, что при неограниченном возрастании длины кода𝑃 мощность множеств 𝑊(𝑃,𝑅) и 𝐾(𝑃,𝑅) неограниченно увеличивается, т.к. равна 𝐶𝑃𝑅 . Значит, для любого неотрицательного 𝑁 ∈ 𝐾(𝑃,𝑅) найдется 𝑃 такое, что𝑁 < 𝐶𝑃𝑅 . Из утверждения 4 следует, что инвариантно относительно 𝑃 и 𝑅 существует биективное отображениемножества кодов 𝑊(𝑃,𝑅) во множество 𝐾(𝑃,𝑅) . В силу произвольности 𝑁можно считать, что 𝛹 – биекция из множества кодов 𝑊(𝑃(𝑅),𝑅) во множество 𝑆1 . Следствие 1. Любое неотрицательное целое число может быть корректно закодировано в двоичный код заданного ранга. Следствие 2. При кодировании неотрицательного целого числа 𝑁 в двоичный код ранга 𝑅 при выполнении условия 𝑇(𝑃∗ ,𝑅) ≤ 𝑁 < 𝑇(𝑃∗ +1,𝑅) минимальной длиной кода является номер строки 𝑃 ∗кодирующей матрицы. Доказательство. Среди всех 𝑃, удовлетворяющих условию 𝑁 < 𝐶𝑃𝑅, существует минимальное 𝑃𝑚𝑖𝑛 , порождающее множество𝑊(𝑃𝑚𝑖𝑛 ,𝑅) , для которого операция кодирования/декодирования биективна. Так как𝑃𝑚𝑖𝑛 = 𝑚𝑖𝑛(𝑁∗ <𝐶 𝑅) , то 𝐶𝑃𝑅𝑚𝑖𝑛 ≤ 𝑁 < 𝐶𝑃𝑅𝑚𝑖𝑛 .По свойству кодирующей 𝑃 матрицы 𝑇(𝑃∗ +1,𝑅) = 𝐶𝑃𝑅∗ . Следовательно, 𝑃𝑚𝑖𝑛 = 𝑃∗ - минимальная длина кода. Зависимость оптимального ранга от диапазона кодируемых чисел. Необходимо методом матричного кодирования получить кодовые слова элементов множества 𝑆𝑖 (𝑍).Пусть𝐿(𝑁,𝑅) - длина кода числа 𝑁, закодированного с рангом 𝑅указанным выше методом. В качестве критерия оптимальности, который обеспечивает минимальную среднюю длину для кодируемых чисел из установленного диапазона, выберем следующие условия: 𝑅𝑜𝑝𝑡 (𝑍) = arg 𝑚𝑎𝑥𝑓𝑧 (𝑅) 𝑍 } 𝑓(𝑅) = ∑ 𝐼(𝑅) = arg min 𝐿(𝑖, 𝑥) 𝑖=1 (2) Здесь 1, 𝑥 = 𝑦 𝐼(𝑥 = 𝑦) = { . 0, 𝑥 ≠ 𝑦 Необходимо уточнить, что если существуют 𝑅1 и 𝑅2 (𝑅1 < 𝑅2 ), удовлетворяющие условиям (2.1), то будем рассматривать только 𝑅1 . Из определенного критерия очевидно, что 𝑍 ∑𝑖=0 𝐿(𝑖, 𝑅𝑜𝑝𝑡 (𝑍)) = 𝑚𝑖𝑛 ∑𝑍𝑖=1 𝐿(𝑖, 𝑅). (3) Для фиксированного значения 𝑁 определим функцию 𝑔𝑁 (𝑅) = 𝐿(𝑁, 𝑅). (4) Обозначим 𝑔̂(𝑁) = 𝑚𝑖𝑛𝑔𝑁 (𝑅). Пусть 𝐿 - некоторая длина кода (т.е. произвольное значение 𝐿(𝑁, 𝑅). Неявным образом определим следующую функцию ℎ𝐿 (𝑅). 𝐿(ℎ𝐿 (𝑅) − 1, 𝑅) = 𝐿, 𝐿(ℎ𝐿 (𝑅), 𝑅) = 𝐿 + 1. (5) Обозначит через [𝑥] операцию взятия целой части числа 𝑥. В рамках введенных обозначений докажем следующие вспомогательные утверждения. Утверждение 5. 𝐿(𝑁, 𝑅) ≤ (𝐿(𝑁 + 1, 𝑅). (6) Доказательство. Доказательство данного утверждения естественным образом следует из теоремы о ближайшем предшествовании. Поскольку коды чисел 𝑁 и 𝑁 + 1 связаны отношением ближайшего предшествования, то по определению данного отношения длина кода числа 𝑁 + 1 не меньше длины кода числа 𝑁, то есть 𝐿(𝑁, 𝑅) ≤ (𝐿(𝑁 + 1, 𝑅), что и требовалось доказать. Утверждение 6. ℎ𝐿 (𝑅) = 𝐶𝐿𝑅 . (7) Доказательство. Зафиксируем некоторый ранг 𝑅 ≤ 𝐿. Пусть 𝑄𝑅 (𝐿) = ∑𝑁 𝐼(𝐿(𝑁, 𝑅) = 𝐿). (8) Тогда для зафиксированного 𝑅 в силу того, что код числа начинается с единицы и в силу монотонности 𝐿(𝑁, 𝑅) по аргументу 𝑁 (утверждение 5), значение функции 𝑄𝑅 (𝐿) выглядит следующим образом. 𝐿 𝑅 𝑅+1 𝑅+2 𝑅+3 … 𝑅+𝑘 𝑄𝑅 (𝐿) 𝑅−1 𝐶𝑅−1 𝐶𝑅𝑅−1 𝑅−1 𝐶𝑅+1 𝑅−1 𝐶𝑅+2 … 𝑅−1 𝐶𝑅+𝑘−1 Заметим далее, что ℎ𝐿 (𝑅) может быть найдена по формуле: 𝐿−1 ℎ𝐿 (𝑅) = ∑𝑘=𝑅−1 𝐶𝑘𝑅−1. (9) Для упрощения выражения можно использовать следующее известное свойство биномиальных коэффициентов: 𝑛 𝑛+1 ∑𝑁 𝑗=𝑛 𝐶𝑗 = 𝐶𝑁+1 . Таким образом, ℎ𝐿 (𝑅) = 𝐶𝐿𝑅 . (10) Следствие. При 𝐿 → ∞ значение функции ℎ𝐿 (𝑅) удовлетворяет соотношению: 𝐿 ℎ𝐿 (𝑅) → (2 − 1)√ 2 𝜋𝐿 𝑒 (2𝑅−𝐿)2 2𝐿 − . равномерно для всех 𝑅, для которых (11) 2𝑅−𝐿 √𝐿 находится в каком-либо конечном интервале. Доказательство. Заметим, что совокупность ℎ𝐿 (𝑅) 2𝐿 при 𝑅 = 1,2, … 𝐿 (дополнительно определив для 𝑅 = 0: ℎ𝐿 (0) = 1) представляет собой биномиальное распределение с параметрами 𝐿 и 𝑝 = 1/2. Рассмотрим ситуацию, когда 𝐿 → ∞. Согласно локальной теореме Муавра-Лапласа (если вероятность наступления некоторого события 𝐴 в 𝑛 независимых испытаниях постоянна и равна 𝑝, то вероятность 𝑃𝑛 (𝑚) того, что в этих испытаниях событие 𝐴 наступит ровно 𝑚 раз, удовлетворяет при 𝐿 → ∞ следующему соотношению √𝑛𝑝𝑔𝑃𝑛 (𝑚): 1 2 1 √2𝜋 𝑒 −2𝑥 → 1 равномерно для всех 𝑚, для которых 𝑥 = (12) 𝑚−𝑛𝑝 √𝑛𝑝𝑔 находится в каком-либо конечном интервале, справедливо выражение 𝐿 ℎ𝐿 (𝑅) √4 →: 2𝐿 где 𝑥 = 1 2 1 √2𝜋 𝑅−𝐿/2 √2𝜋 𝑒 −2𝑥 , = 2𝑅−𝐿 √𝐿 (13) . (14) Таким образом при 𝐿 → ∞ получаем, что 2 ℎ𝐿 (𝑅) → 2𝐿 2 −(2𝑅−𝐿) √𝐿 𝑒 2𝐿 (15) равномерно по всем 𝑅, для которых 2𝑅−𝐿 √𝐿 находится в каком-либо конечном интервале, что и требовалось доказать. Утверждение 7. 𝑅𝑜𝑝𝑡 (𝑍) – монотонно неубывающая функция. Доказательство. Докажем, что 𝑅𝑜𝑝𝑡 (𝑍) ≥ 𝑅𝑜𝑝𝑡 (𝑍 − 1). Для этого достаточно показать, что arg min 𝐿(𝑍, 𝑅̅) = 𝑅𝑜𝑝𝑡 (𝑍 − 1) + 𝑐, где 𝑐 ∈ {0,1}. (16) Пусть 𝐿∗ = arg min 𝐿(𝑍, 𝑥). Рассмотрим функцию ℎ𝐿∗ (𝑥). Из доказанного в следствии свойства функции ℎ𝐿∗ (𝑅), а именно того, что совокупность ℎ𝐿∗ (𝑅) 2𝐿 ∗ может рассматриваться как биноминальное распределение с параметрами 𝐿∗ и 𝑝 = 1/2, следует выполнение условий что в свою очередь и доказывает утверждение. 𝑔̂(𝑁) Утверждение 8. arg min 𝑔𝑁 (𝑅) = [ 2 ] (17) Доказательство. Пусть 𝑅̂ = arg 𝑚𝑖𝑛𝑔𝑁 (𝑅). С другой стороны, 𝑅̂ = arg 𝑚𝑖𝑛ℎ𝑔̂𝑁 (𝑅) (𝑅) (18) По доказанному ранее в утверждении 6 ℎ𝐿 (𝑅) = 𝐶𝐿𝑅 .. Исход из свойств биномиальных коэффициентов, получим 𝑔̂(𝑁) arg 𝑚𝑎𝑥 𝐶𝑔𝑅̂(𝑁) = [ 2 ], (19) что и требовалось доказать. Кроме этого, необходимо разработать процедуру получения оптимального ринга по критерию (2), если задан некоторый диапазон. Зафиксируем некоторый ранг 𝑅. Он будет оптимальным по длине кода для чисел, принадлежащих некоторому интервалу. Пусть 𝐿 – длина кода наибольшего из интервала числа, соответствующая оптимальному рангу. В силу утверждения 7, количество данных чисел будет равно длине интервала. Пусть 𝐷𝑅 – количество чисел, для которых 𝑅 будет являться оптимальным по длине рангом. Для обоснования алгоритма нахождения оптимального ранга для целых чисел из заданного диапазона докажем вспомогательное утверждение. Введем обозначение 𝑦(𝑥) = ∑𝑥𝑖=1 𝐷𝑖 , (20) где 𝑥 - натуральное число. Утверждение 9. 𝐷𝑅 > 𝑦(𝑅 − 1). (21) Доказательство. Согласно утверждению 8, 𝐿 = 2𝑅 + 1. Кроме того, 𝑅 будет являться оптимальным и для длины 𝐿′ = 2𝑅. Тогда, применяя утверждение 6, получим 𝑅−1 𝑅 𝐷𝑅 = 𝐶2𝑅+1 − 𝐶2(𝑅−1)+1 . (22) Отсюда следует, что сумма выглядит следующим образом: 𝑖−1 𝑖 𝑦(𝑅 − 1) = ∑𝑅−1 𝑖=1 (𝐶2𝑖+1 − 𝐶2(𝑖−1)+1 ). (23) После преобразования данная функция имеет вид: 𝑅−1 𝑅−2 1 2 1 𝑦(𝑅 − 1) = 𝐶2+1 − 𝐶10 + 𝐶2∗2+1 − 𝐶2+1 + ⋯ + 𝐶2(𝑅−1)+1 − 𝐶2(𝑅−2)+1 𝑅−1 = 𝐶2(𝑅−1)+1 − 𝐶10 . 𝑅−1 𝑅−1 𝑅 Сравним 𝐷𝑅 = 𝐶2𝑅+1 − 𝐶2(𝑅−1)+1 и 𝑦(𝑅 − 1) = 𝐶2(𝑅−1)+1 − 1. Для этого рассмотрим отношение 𝐷𝑅 𝑦(𝑅−1)+1 = 𝑅−1 𝑅 𝐶2𝑅+1 −𝐶2(𝑅−1)+1 𝑅−1 𝐶2(𝑅−1)+1 . (24) (2𝑅 + 1)! (𝑅 − 1)! 𝑅! 𝐷𝑅 2𝑅(2𝑅 + 1) 2𝑅 = −1= −1=1+ . 𝑦(𝑅 − 1) + 1 𝑅! (𝑅 + 1)! (2𝑅 − 1)! 𝑅(𝑅 + 1) 𝑅+1 Отсюда 𝐷𝑅 ≥ 𝑦(𝑅 − 1) + 1. Следовательно, 𝐷𝑅 > 𝑦(𝑅 − 1), что и требовалось доказать. Алгоритм нахождения оптимального ранга 𝑅𝑜𝑝𝑡 (𝑍) 1. Находим 𝑥, удовлетворяющее условию: 𝑦(𝑥 − 1) ≤ 𝑍 < 𝑦(𝑥) (25) (в силу монотонного возрастании я функции 𝑥 𝑦(𝑥) = ∑ 𝐷𝑖 𝑖=1 такое 𝑥 существует). 2. Если 𝑍 − 𝑦(𝑥 − 1) ≤ 𝐷𝑅−1 , то 𝑅𝑜𝑝𝑡 (𝑍) = 𝑥 − 1, иначе (26) 𝑅𝑜𝑝𝑡 (𝑍) = 𝑥. (27) Оценка затрат для хранения матрицы кодирования Важное значение для практического использования матричного кодирования имеют размеры элементов матрицы и размеры матрицы в целом. 1. Размер максимального элемента в строке с номером 𝑥: 𝐼𝑚𝑎𝑥 = 2𝑖 √2 √𝑖𝜋 (бит). (28) 2. Зависимость номера строки матрицы от максимального элемента 𝑖 = 𝑓(𝐼max) : 𝑖 = ]log 2 𝐼𝑚𝑎𝑥 [ + 2. (29) 3. Средняя длина (в битах) элемента в строке 𝑖: 𝑗−3 𝑖ср = 𝑗 log2 (𝑖−1)+∑𝑖=2 log2 𝐶𝑖−1 𝑖−1 (бит). (30) 4. Объем (в битах) для хранения всех элементов строки матрицы 𝑉стр = 𝑙ср (𝑖 − 1) (бит). (31) 5. Объем (в битах) для хранения всех 𝑖 строк матрицы 𝑗 𝑉матр = ∑𝑚 𝑗=1 𝑉стр (бит). где 𝑚 –количество столбцов матрицы. (32) Модуль построения матрицы кодирования Получение элементов матрицы кодирования производится по формулам 𝑗 𝑗 𝑀𝑖 = 𝐶𝑖−1 , где 𝑛! 𝐶𝑛𝑘 = {𝑘!(𝑛−𝑘)! 0, , 𝑛 ≥ 𝑘; (33) 𝑛<𝑘 стандартным образом. Матрица размещается в оперативной памяти и находится в ней на время создания кода. Примеры Алгоритм кодирования исходных чисел Рассмотрим алгоритм кодирования исходных чисел. Возьмем некоторое число 𝑁 из множества 𝑆1 и зададим ранг кода 𝑅. В кодирующей матрице находим 𝑅 - ый столбец. Затем ищем строку 𝑖 такую, что 𝑇(𝑖,𝑅) ≤ 𝑁 < 𝑇(𝑖,+1,𝑅) , где 𝑇(𝑖,𝑅) - элемент матрицы, находящийся в 𝑖 - ой строке и в 𝑅 том столбце. В 𝑖 - ой позиции кода (считая, справа налево) ставится 1. Переходим к (𝑅 − 1) - ому столбцу матрицы (в дальнейшем переменная 𝑗 будет обозначать номер текущего столбца) и к (𝑖 − 1) – ой строке (аналогично переменная 𝑖 будет хранить значение текущей строки). Процедура кодирования продолжается для числа 𝑀, равного раз0ности исходного десятичного числа и рассматриваемого элемента матрицы весовых коэффициентов (в дальнейшем описании это текущее число будет обозначаться 𝑀). При последующих итерациях возможен ряд случаев: 1) Если 𝑇(𝑖,𝑅) ≤ 𝑀 и 𝑗 > 1, то в 𝑖 - ой позиции кода ставится 1, процедура продолжается для числа, равного разности текущего десятичного числа и рассматриваемого элемента матрицы, при уменьшении номера текущей строки и столбца на единицу. 2) Если 𝑀 > 0, 𝑗 = 1 и 𝑇(𝑖,𝑗) , то в 𝑖 - ой позиции код ставится 1, при этом 𝑀 становится равным нулю, и номер текущей строки уменьшается на единицу. 3) Если 𝑀 = 0, 𝑗 = 1, и формируемом коде число значащих позиций не равно рангу 𝑅, то в 𝑖 - ой позиции кода ставится ноль, и процесс кодирования завершается. 4) Если 𝑀 = 0, 𝑗 = 1, и формируемом коде число значащих позиций равно рангу 𝑅, то в 𝑖 - ой позиции кода ставится ноль, и процесс кодирования завершается. 5) Если 𝑇(𝑖,𝑗) > 𝑀, то в 𝑖 - ой позиции кода ставится ноль, при этом номер текущей строки уменьшается на единицу. Рассмотрим пример 1. Предположим, нужно закодировать число 𝑁 = 43. зададим ранг 𝑅 = 4. Согласно вышеизложенному алгоритму в 4-ом столбце матрицы находим элемент 𝑇(8,4) такой, что 𝑇(8,4) < 𝑇(9,4) . В 8-ой позиции кода ставим 1, при этом 𝑀 становится равным 8 (43-35=8). Номер текущей строки становится равным 4, номер текущего столбца – 3. Переходим к элементу матрицы 𝑇(7,3) = 20. Поскольку его значение больше 𝑀, и номер текущего столбца больше единицы, то в 7-ой позиции ставится 0, номер текущей строки становится равным 6. Переходим к элементу матрицы 𝑇(6,3) = 10. Поскольку его значение больше 𝑀, и номер текущего столбца больше единицы, то в 6-ой позиции ставится 0, номер текущей строки становится равным 5. Переходим к элементу матрицы 𝑇(5,3) = 4. В 5-ой позиции кода ставится 1, 𝑀 становится равным 4 (8-4=4), номер текущего столбца – 4, текущей строки – 2. Переходим к элементу 𝑇(4,2) = 3. В 4-ой позиции кода ставится 1, 𝑀 становится равным 1 (4-3=1), номер текущего столбца становится равным 3, номер текущей строки – 1. Переходим к элементу 𝑇(3,1) = 2. Поскольку его значение больше 𝑀, то в 3-ой позиции ставится 0, номер текущей строки – 2. Переходим к элементу 𝑇(2,1) = 1. Поскольку его значение равно 𝑀, то во 2-ой позиции ставится 1, 𝑀 становится равным нулю (1-1=0), номер текущей строки становится равным 1. Переходим к элементу 𝑇(1,1). В 1-ой позиции ставится 0, процедура кодирования закончена. Полученный код имеет следующий вид: 10011010 (15410). Теперь рассмотрим алгоритм декодирования. Предположим имеется некоторый код вида: 𝐾1 , 𝐾2 , … , 𝐾𝑝 , где 𝐾𝑖 ∈ {0,1}. Поставим в соответствие элементу множества 𝑆2 два упорядоченных множества индексов. Первое множество (назовем его 𝐴) включает номера позиций при нумерации справа налево. Второе множество (назовем его 𝐵) строится следующим образом: нулю в коде соответствует ноль, единице соответствует ее номер в коде, считая справа налево. Например, для кода 10011010 второе множество будет иметь вид: 40032010. Декодирование числа осуществляется по формуле: 𝑁 = ∑ 𝑇(𝐴𝑖, 𝐵𝑖 ). 𝑖;𝐵𝑖 ≠0 Рассмотрим пример 2. Предположим, нужно получить значение кода 10011010. Тогда согласно алгоритму декодирования формируем два множества: 𝐴 = {8,7,6,5,4,3,2,1} и 𝐵 = {4,0,0,3,2,0,1,0}. Искомое число вычисляем согласно формуле декодирования: 𝑁 = 𝑇(8,4) + 𝑇(5,3) + 𝑇(4,2) + 𝑇(2,1) = 35 + 4 + 3 + 1 = 43 Рассмотрим изложенное математически. Пусть 𝐾(𝑃,𝑅) подмножество 𝑆1 , состоящее из неотрицательных целых чисел от 0 до 𝐶𝑃𝑅 − 1. Обозначим через 𝑊(𝑃,𝑅) подмножество множества 𝑆2 , состоящее из всех кодов длины 𝑃 ранга 𝑅. Для элементов множества 𝑊(𝑃,𝑅) введём отношение предпочтения. Код (𝑐1 , 𝑐2 , … , 𝑐𝑝 ) будем считать предпочтительней кода (𝑑1 , 𝑑2 , … , 𝑑𝑝 ), если существует номер 𝑘 такой, что 𝑐𝑘 > 𝑑𝑘 , и не существует номера 𝑚 такого что 𝑚 < 𝑘 и 𝑐𝑚 < 𝑑𝑚 . Отношение предпочтения обозначим 𝐶 ≫ 𝐷. Назовем 𝑘 степень предпочтительности. Обозначим через ѱ оператор декодирования, действующий из множестве 𝑊(𝑃,𝑅) . Пример кодирования. Для кодирования текста на русском языке занумеруем все буквы по месту их расположения в алфавите – от 1 до 33, добавив 34-ю пробел. а б в г д е ё ж з и й к л м 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 р с т у ф х ц ч ш щ ъ ы ь ю 18 19 20 21 22 23 24 25 26 27 28 29 30 31 э н о я # 32 33 34 Возьмем какое-нибудь простое предложение, например, «шёл снег», и каждую букву заменим соответствующей цифрой. Получим последовательность: 26,7, 13, 34, 19, 15, 6, 4. Построим из этой последовательности две матрицы 2х2: 26 7 19 15 ( ), ( ) 13 34 6 4 Зашифруем эту последовательность с помощью еще одной матрицы 2 3 ( ) – кодирующей – по следующему правилу: 1 2 2 3 26 7 2 ∗ 26 + 3 ∗ 13 2 ∗ 7 + 3 ∗ 34 91 116 ( )∗( )=( )=( ). 1 ∗ 26 + 2 ∗ 13 1 ∗ 7 + 2 ∗ 34 1 2 13 34 52 75 2 ( 1 п 3 2 ∗ 19 + 3 ∗ 6 2 ∗ 15 + 3 ∗ 4 19 15 56 42 )∗( )=( )=( ). 2 6 4 1 ∗ 19 + 2 ∗ 6 1 ∗ 15 + 2 ∗ 4 31 23