- цепочка битов
-
представим текст в виде длинной (ну как длинной? имеющей длину) линейной цепочки битов.
Саму цепочку назовём S. Или обозначим как S. Или поименуем как S. Или будем говорить, что цепочка это S.
количество битов в цепочке обозначим N.
Длину цепочки в битах обозначим LS = N.
n-ный по счёту бит обозначим как Sn
целое число, обозначающее длину цепочки будет занимать ⌈ log2N ⌉ битов
операцию стандартного двоичного кодирования обозначим как E
Операцию подсчёта длины записи в битах обозначим LE (length of encoding)
LE(S) = LE(LS) + N * LE(Sn)
длина записи одного бита LE(Sn) = 1
- позиция бита в цепочка битов
-
это целое неотрицательное число. Причем длина таких чисел в битах (в стандартной двоичной кодировке/записи)
не превышает ⌈ log2N ⌉
Позицию обозначим P
Длину позиции обозначим как LP
- сегмент в цепочке битов
-
Это несколько смежных позиций в цепочке. Сегмент, слитная подпоследовательность, span, subsequence.
Сегмент можно определить указанием начала сегмента и длины сегмента (в битах)
количество битов в сегменте - это целое число, в записи которого битов тоже log2N
Сегмент обозначим как W (мнемонической связи никакой, это не "слово" (word),
ассоциация была - две галочки, отмечающие начало и конец)
длину сегмента (при записи/кодировании представления сегмента в бинарном виде стандартным способом)
обозначим LW= LP + log2N
- множество позиций битов в цепочке битов представленное в виде массива позиций
-
Чтобы записать множество, запишем количество элементов множества, а потом сами элементы (которые имеют фиксированную длину)
в памяти такая запись будет занимать
log2M
+ M *
LP
M ≤ N
- множество позиций бита в цепочке битов
-
Множество состоит из элементов, каждый элемент - позиция.
записывать/кодировать множество позиций можно разными способами (как минимум тремя)
- множество позиций битов в цепочке битов в виде массива позиций
- множество позиций битов в цепочке битов в виде массива сегментов
- множество позиций битов в цепочке битов в виде комбинации массива позиций и массива сегментов
незря, всё-таки, математики придумывали разные короткие символы для обозначения новых понятий,
описывать которые словами дольше, чем запомнить один новый символ.
Компьютеры отобрали возможность создавать новые символы
и легко размещать символы на плоскости в разных позициях по отношению друг к другу,
выражая таким образом отношения между символами
Какое из нескольких представлений выбирать, выбирать то или иное (ту или иную запись) множества позиций?
нужно выбирать запись, которая занимает меньшее количество места
для этого должен быть способ (метод класса, функция-член) для того,
чтобы определять/вычислять длину представления в каждом варианте
можно сделать у каждого множества метод "создать наиболее компактное представление"
по какому алгоритму будет работать такой метод?
он посчитает количество смежных позиций, смежных групп позиций, вычислит размеры записи в том или ином варианте
а какие варианты есть и как из перебирать?
с другой стороны, я понимаю тех, кто пробует читать математические тексты.
Читать такие тексты неудобно, так как значения символов не сразу запоминаются,
а только при частом (и по делу) использовании символов
Допустим, что библиотека работающая с