В доклада разглеждаме алгоритми, отнасящи се до следните три задачи:
- Пресмятане на тегловния спектър на линеен код.
- Пресмятане на минималното разстояние на линеен код.
- Намиране на множеството от кодови думи с дадено тегло.
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Stefka iliya fmi_su1
1. Алгоритми за пресмятане на тегловни
характеристики и свързани с тях подмножества
на линеен код
Стефка Буюклиева
Илия Буюклиев
2. Основни задачи
1. Пресмятане на тегловния спектър на линеен код.
2. Пресмятане на минималното тегло на линеен код.
3. Намиране на множеството от кодови думи с дадено тегло.
3. Дефиниции
Fq - крайно поле с q елемента;
Fn
q - n-мерно векторно пространство над Fq;
Тегло на вектор x ∈ Fn
q: wt(x) = |{i|xi ̸= 0}|;
Линеен код с дължина n и размерност k - k-мерно
подпространство на Fn
q;
Минимално тегло на линеен код C:
d(C) = min{wt(x)|x ∈ C, x ̸= 0}
C - линеен [n, k, d]q код.
4. Линеен [n, k] код C
A generator matrix (пораждаща матрица) of C
G =
a1
...
ak
= (b1 b2 · · · bn)
C = ⟨G⟩ = {α1a1 + · · · + αkak, (α1, . . . , αk) ∈ Fk
q}
Weight spectrum of C: (A0, A1, . . . , An) ∈ Zn+1
Ai - брой на кодовите думи с тегло i
Weight function of C: WC (y) = A0 + A1y + A2y2 + · · · + Anyn
5. Линеен [n, k] код C
NP-пълни задачи:
1978 - Berlekamp, McEliece и van Tilborg
- Задача за Тегловното Разпределение
1997 - Vardy
- Задача за Минималното Рaзстояние
6. Пресмятане на тегловния спектър на линеен код
с код на Грей - O(nqk), q - просто,
O(snqk), q = ps
с Адамарова матрица и "butterfly"алгоритъм - O(k2k)
(в края на презентацията)
7. Намиране на множеството от кодови думи с дадено тегло
Complementary information set code:
[2k, k] линеен код с пораждаща матрица
G = (B1 B2), rankB1 = rankB2 = k
G1 = (Ik B′
2), G2 = (B′
1 Ik)
За генерирането на всички кодови думи с тегло ≤ w са
достатъчни всички линейни комбинации на m1 реда на G1 и на
m2 реда на G2, където m1 ≤ ⌊w
2 ⌋, m2 ≤ ⌊w−1
2 ⌋
Общо (k +
(k
2
)
+ · · · +
( k
⌊w/2⌋
)
) + (k +
(k
2
)
+ · · · +
( k
⌊(w−1)/2⌋
)
)
линейни комбинации
8. Намиране на множеството от кодови думи с дадено тегло
Complementary information set code:
[40, 20] линеен код
G1 = (Ik B′
2), G2 = (B′
1 Ik)
За генерирането на всички кодови думи с тегло 8 са достатъчни
2(20 +
(20
2
)
+
(20
3
)
) +
(20
4
)
линейни комбинации
2(20 +
(
20
2
)
+
(
20
3
)
) +
(
20
4
)
< 20 +
(
20
2
)
+ · · · +
(
20
8
)
7545 < 263949
9. t − CIS codes
Complementary information set codes of higher-order
[tk, k] linear codes with a generator matrix
G = (B1 B2 · · · Bt),
rankB1 = rankB2 = · · · = rankBt = k
G1 = (Ik B
(1)
2 · · · B
(1)
t ),
G2 = (B
(2)
1 Ik · · · B
(2)
t ),
· · · · · ·
Gt = (B
(t)
1 B
(t)
2 · · · Ik).
10. t − CIS codes
Complementary information set codes of higher-order
[tk, k] linear codes
G1 = (Ik B
(1)
2 · · · B
(1)
t ),
G2 = (B
(2)
1 Ik · · · B
(2)
t ),
· · · · · ·
Gt = (B
(t)
1 B
(t)
2 · · · Ik).
За всички кодови думи с тегло w са нужни линейни
комбинации на общо w − t + 1 реда, но от различни матрици
11. Линеен [n, k] код C
G = (B1 B2 · · · Bt),
k = rankB1 ≥ rankB2 ≥ · · · ≥ rankBt
G1 = (Ik B
(1)
2 · · · B
(1)
t ),
G2 = (B
(2)
1 I′
k2
· · · B
(2)
t ),
· · · · · ·
Gt = (B
(t)
1 B
(t)
2 · · · I′
kt
).
12. Линеен [n, k] код C
G = (B1 B2 · · · Bt),
k = rankB1 ≥ rankB2 ≥ · · · ≥ rankBt
G1 = (Ik A1),
G2 = (B
(2)
1
Ik2 A2
O′ O′′ ), . . .
Gj =
(
A′
j
Ikj
Aj
O′ O′′
)
, . . . , Gr =
(
A′
r
Ikr
O′
)
,
13. Пресмятане на минималното тегло на линеен код
от тегловния спектър
с алгоритъм на Brouwer-Zimmermann
с вероятностен алгоритъм на Leon
14. Пресмятане на минималното тегло на линеен код
G1 = (Ik A1), . . .
Gj =
(
A′
j
Ikj
Aj
O′ O′′
)
, . . . , Gr =
(
A′
r
Ikr
O′
)
,
i = 0
repeat
i := i + 1;
di - текущо минимално тегло,
di =
∑m
j=1(i + 1) − (k − kj )
until di ≤ di
15. Пресмятане на тегловния спектър на линеен код
с код на Грей - O(nqk), q - просто,
O(snqk), q = ps
с Адамарова матрица и "butterfly"алгоритъм - O(k2k)
(в края на презентацията)
17. The simplex code Sk
Gk = (1 2 · · · 2k − 1)
Gk - всички точки в проективната геометрия PG(k − 1, 2)
Gk = (0 1 2 · · · 2k − 1)
Gk - всички вектори в Fk
2
Sk = ⟨Gk⟩ - [2k, k, 2k−1] linear code, dual distance 1
18. Линеен [n, k] код C
G =
a1
...
ak
= (b1 b2 · · · bn)
C → χ(C) = (α0, α1, α2, . . . , α2k −1) ∈ Z2k −1
,
Ако bi ̸= bj , за i ̸= j, то αi = 1 ⇐⇒ i = bj за някое j
Ако C има повтарящи се стълбове, тогава αi е равно на
броя на стълбовете в G, равни на i
19. Линеен [n, k] код C
C − [7, 4] code, G =
1000111
0100110
0010101
0001011
χ(C) = (0110100010010110)
C − [8, 4] code, G =
11000000
00110000
00001100
00000011
χ(C) = (0220200020000000)
27. Butterfly algorithm - O(k.2k
)
j ← 1; W ← χ(C);
while (j < 2k
) do
for i = 0 to 2k
− 1 do
if i[j] = 0 then / ∗ if ((i&j) == 0) ∗ /
temp ← W [i];
W [i] ← W [i] + W [i + j];
W [i + j] ← temp − W [i + j];
end then
end for
j ← 2 ∗ j;
end while.
28. Butterfly algorithm - O(k.2k
)
Много ефективен за кодове с n >> k
Пример (Thomas Feulner): CCZ-кодове, свързани с
APN-функции, с параметри [2m, 2m + 1, d(m)]
- Grey code - 2m · 22m+1 операции
- butterfly algorithm - (2m + 1) · 22m+1 операции
Оношението е 2m/(2m + 1)
m = 12 → 212/25 = 163, 84
m = 14 → 214/29 ≈ 565
29. Butterfly algorithm
Предимства:
Много подходящ за паралелна реализация, особено с
CUDA.
По-бърз за кодове с малка скорост
Въпроси:
Може ли алгоритъмът да се модифицира за недвоични
кодове?
Може ли да се използва butterfly алгоритъм и за
пресмятане на други параметри?