C-соответствие – взаимно однозначное соответствие между
множеством натуральных чисел N
и множеством вещественных чисел R, устанавливаемое применением Алгоритма C.
Алгоритм C является усовершенствованием и обобщением Алгоритма B (см. A245). Он описан в МОИ № 29, стр.39–41.
Сейчас мы покажем, как установить взаимно однозначное соответствие между N и R
путем линейной генерации множества R ,
в ходе которой каждому числу из R
присваивается однозначный порядковый номер.
Для этого нам
потребуется обобщить и потом модифицировать Алгоритм B, который генерировал Промежуток [0, 1] и который
мы принимаем здесь хорошо известным и понятным. Сначала представим логическую
структуру Алгоритма B в виде, показанном на Рис.1.
Здесь
Алгоритм B состоит из двух блоков (TOTUM и FRACTIO) и оперирует структурой данных под названием ACERVUS. Блок TOTUM в Алгоритме B отрабатывает
один-единственный раз, поставляя в структуру ACERVUS (в Ацервус) стартовую строку «0,». Блок FRACTIO отрабатывает бесконечное количество
раз. Каждый раз он берет всё то, что уже есть в Ацервусе, делает из этого
материала копию, прибавляя каждому элементу копии в конце «1», а к исходным
строкам присоединяет в конце «0»; новые строки помещает в конце Ацервуса. Таким
образом блок FRACTIO обеспечивает присоединение ко
всем элементам Ацервуса все возможные комбинации нулей и единиц в дробной
части.
Теперь
модифицируем Алгоритм B, и этот модифицированный
алгоритм назовем Алгоритмом C. Его принципиальная схема показана на Рис.2.
В
Алгоритме C, в отличие от Алгоритма B, блок TOTUM отрабатывает не один раз, а тоже бесконечное количество
раз. В первый раз он «бросает» в Ацервус стартовые строки «+0» и «–0». Второй раз он отрабатывает после
первого цикла блока FRACTIO и бросает в Ацервус строки
«+1» и «–1»; третий раз он
после второго цикла блока FRACTIO
помещает в Ацервус «+2» и «–2»
и т.д. Таким образом начинается генерация всё новых и новых интервалов
множества R алгоритмом C.
Легко
видеть, что чем дальше интервал отстоит от 0, тем позднее начинается его
генерация. Тем не менее, когда-нибудь она всегда начинается, и продолжается
сколь угодно далеко в дробной части. Каждое число из R получает свой
фиксированный, раз и навсегда данный номер (который всегда можно вычислить,
если не пожалеть усилий). Любой наперед заданный знак любого числа из R , как в его целой,
так и в дробной части, будет рано или поздно сгенерирован алгоритмом C, если допустить,
что тот может работать бесконечно.
Покажем пошагово начальную часть генерации (и тем самым нумерации)
множества R . Продукт перед первым циклом блока FRACTIO:
Номер продукта
|
Продукт Алгоритма C
|
0
1
|
+0,
–0,
|
После первой отработки блока FRACTIO:
Номер продукта
|
Продукт Алгоритма C
|
0
1
2
3
|
+0,0
–0,0
+0,1
–0,1
|
Перед
второй отработкой блока FRACTIO:
Номер продукта
|
Продукт Алгоритма C
|
0
1
2
3
4
5
|
+0,0
–0,0
+0,1
–0,1
+1,
–1,
|
После
второй отработки блока FRACTIO:
Номер продукта
|
Продукт Алгоритма C
|
0
1
2
3
4
5
6
7
8
9
10
11
|
+0,00
–0,00
+0,10
–0,10
+1,0
–1,0
+0,01
–0,01
+0,11
–0,11
+1,1
–1,1
|
Перед
третьей отработкой блока FRACTIO:
Номер продукта
|
Продукт Алгоритма C
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
|
+0,00
–0,00
+0,10
–0,10
+1,0
–1,0
+0,01
–0,01
+0,11
–0,11
+1,1
–1,1
+10,
–10,
|
После
третьей отработки блока FRACTIO:
Номер продукта
|
Продукт Алгоритма C
|
0
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
|
+0,000
–0,000
+0,100
–0,100
+1,00
–1,00
+0,010
–0,010
+0,110
–0,110
+1,10
–1,10
+10,0
–10,0
+0,001
–0,001
+0,101
–0,101
+1,01
–1,01
+0,011
–0,011
+0,111
–0,111
+1,11
–1,11
+10,1
–10,1
|
Мы начали нумерацию с 0, чтобы нулевую строку можно было бы отбросить,
посчитав +0,0000... и –0,0000...
за одно и то же число; тогда нумерация будет начинаться с единицы. В
приведенной выше таблице генерация отрезков [0, 1] и
[–1, 0] доведена до трех двоичных знаков после
запятой; генерация отрезков [1, 2] и [–2, –1] доведена до двух знаков; генерация отрезков [2, 3] и [–3, –2] доведена до одного
знака за запятой. На следующем шаге будет включена генерация отрезков [3, 4] и
[–4, –3]. С
каждым циклом алгоритма будет добавляться один знак за запятой в существующих
уже строках, и начинаться генерация нового положительного и нового
отрицательного интервала.
Разумеется,
алгоритм C может работать не только с
двоичной, но и с десятичной или любой другой системой счисления.
Итак,
мы установили взаимно однозначное
соответствие между множеством натуральных чисел и «полным континуумом»:
множеством всех вещественных чисел от –∞ до +∞.
Комментариев нет:
Отправить комментарий