Skip to content

Commit 3059826

Browse files
committed
Redo algorithm in Linear Algebra
1 parent f3389a7 commit 3059826

File tree

4 files changed

+31
-32
lines changed

4 files changed

+31
-32
lines changed

tex/LinearAlgebra.tex

Lines changed: 18 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ \section{Матрицы и вектора}
431431
}
432432
\begin{definition}[Транспонирование матрицы]
433433
Пусть дана матрица $M_{n \times m}$.
434-
Тогда результат её \emph{транспонирования}, это такая матрица $M'_{m \times n}$, что $M'[i,j] = M[j,i]$ для всех $i \in [0 : m - 1]$ и $j \in [0 : n - 1]$.
434+
Тогда результат её \emph{транспонирования}, это такая матрица $M'_{m \times n}$, что $M'[i,j] = M[j,i]$ для всех $i \in [0 \rng m - 1]$ и $j \in [0 \rng n - 1]$.
435435

436436
Операцию транспонирования принято обозначать как $M^\top$.
437437
\end{definition}
@@ -456,7 +456,7 @@ \section{Матрицы и вектора}
456456
\begin{pmatrix}
457457
"a" & "ba" & "cb" \\
458458
"ac" & "bab" & "b"
459-
\end{pmatrix} [0 : 1, 1 : 2] = \\
459+
\end{pmatrix} [0 \rng 1, 1 \rng 2] = \\
460460
= \begin{pmatrix}
461461
"ba" & "cb" \\
462462
"bab" & "b"
@@ -466,7 +466,7 @@ \section{Матрицы и вектора}
466466
}
467467
\begin{definition}[Взятие подматрицы]
468468
Пусть дана матрица $M_{n\times m}$.
469-
Тогда $M_{n \times m}[i_0 : i_1, j_0 : j_1]$~--- это такая $M'_{(i_1 - i_0 + 1) \times (j_1 - j_0 + 1)}$, что $M'[i, j] = M[i_0 + i, j_0 + j]$ для всех $i \in [0 : i_1 - i_0 + 1]$ и $j \in [0 : j_1 - j_0 + 1]$.
469+
Тогда $M_{n \times m}[i_0 \rng i_1, j_0 \rng j_1]$~--- это такая $M'_{(i_1 - i_0 + 1) \times (j_1 - j_0 + 1)}$, что $M'[i, j] = M[i_0 + i, j_0 + j]$ для всех $i \in [0 \rng i_1 - i_0 + 1]$ и $j \in [0 \rng j_1 - j_0 + 1]$.
470470
\end{definition}
471471

472472
\marginnote{
@@ -481,14 +481,14 @@ \section{Матрицы и вектора}
481481
\end{example}
482482
}
483483
\begin{definition}[Взятие элемента по индексу]
484-
\emph{Взятие элемента по индексу}~--- это частный случай взятия подматрицы, когда начало и конец\enquote{среза} совпадают: $M[i, j] = M[i : i, j : j]$
484+
\emph{Взятие элемента по индексу}~--- это частный случай взятия подматрицы, когда начало и конец \enquote{среза} совпадают: $M[i, j] = M[i \rng i, j \rng j]$.
485485
\end{definition}
486486

487487
Из алгебраических операций над матрицами нас в дальнейшем будут интересовать \emph{поэлементные операции}, \emph{скалярные операции}, \emph{матричное умножение}, \emph{произведение Кронекера}.
488488

489489
\begin{definition}[Поэлементные операции]
490490
Пусть $G = (S, \circ)$~--- полугруппа%
491-
\sidenote[][*2]{Здесь, как и в дальнейшем, требование к структуре быть полугруппой не обязательно.
491+
\sidenote{Здесь, как и в дальнейшем, требование к структуре быть полугруппой не обязательно.
492492
Оно лишь позволяет нам получить ассоциативность соответствующих операций над матрицами, что может оказаться полезным при дальнейшей работе.}%
493493
, $M_{n \times m}$, $N_{n \times m}$~--- две матрицы одинакового размера над этой полугруппой.
494494
Тогда $\mathrm{ewise}(M, N, \circ) = P_{n \times m}$, такая, что $P[i, j] = M[i, j] \circ N[i, j]$.
@@ -550,7 +550,7 @@ \section{Матрицы и вектора}
550550
\begin{definition}[Матричное умножение]
551551
\label{def:MxM}
552552
Пусть $G = (S, \oplus, \otimes)$~--- полукольцо, $M_{n \times m}$, $N_{m\times k}$~--- две матрицы над этим полукольцом.
553-
Тогда $M \cdot N = P_{n \times k}$, такая, что $P[i, j] = \bigoplus_{l \in [0 : m - 1]} M[i, l] \otimes N[l, j]$.
553+
Тогда $M \cdot N = P_{n \times k}$, такая, что $P[i, j] = \bigoplus_{l \in [0 \rng m - 1]} M[i, l] \otimes N[l, j]$.
554554
\end{definition}
555555

556556
\begin{example}
@@ -659,32 +659,20 @@ \section{Теоретическая сложность умножения мат
659659

660660
Для начала построим наивный алгоритм, сконструированный на основе определения произведения матриц.
661661
Такой алгоритм представлен на листинге~\ref{algo:MxM}.
662-
\marginnote{TODO: Ничего против не имею, но точно ли название "Листинг" здесь хорошо?
663-
TODO: Оформление алгоритмов точно надо обсудить, потому что я в этом мало понимаю.}
662+
\marginnote{TODO: Оформление алгоритмов точно надо обсудить, потому что я в этом мало понимаю.}
664663
Его работу можно описать следующим образом: для каждой строки в первой матрице и для каждого столбца в второй матрице найти сумму произведений соответствующих элементов.
665664
Данная сумма будет значением соответствующей ячейки результирующей матрицы.
666-
\begin{algorithm}
667-
\caption{Наивное перемножение матриц}
668-
\label{algo:MxM}
669-
670-
\DontPrintSemicolon
671-
\SetAlgoNoLine
672-
\SetAlgoNoEnd
673-
674-
\SetKwProg{KwFn}{function}{}{}
675-
\SetKwFunction{FMatrixMult}{MatrixMult}
676-
677-
\KwFn{\FMatrixMult{$M_1$, $M_2$, $G = (S, \oplus, \otimes)$}}{
678-
$M_3 =$ empty matrix of size $n \times n$\;
679-
\For{$i \in 0 \dots n-1$}{
680-
\For{$j \in 0 \dots n-1$}{
681-
\For{$k \in 0 \dots n-1$}{
682-
$M_3[i, j] = M_3[i, j] \oplus ( M_1[i, k] \otimes M_2[k, j])$
683-
}
684-
}
685-
}
686-
\KwRet{$M_3$}
687-
}
665+
666+
\begin{algorithm}{Наивное умножение матриц}{MxM}
667+
\begin{pseudo}[]
668+
\kw{function} \pr{MatrixMult}(M_1, M_2, G = (S, \oplus, \otimes)) \\+
669+
$M_3 = $ пустая матрица размера $n \times n$ \\
670+
\kw{for} $i \in [0 \rng n - 1]$ \\+
671+
\kw{for} $j \in [0 \rng n - 1]$ \\+
672+
\kw{for} $k \in [0 \rng n - 1]$ \\+
673+
$M_3[i, j] = M_3[i, j] \oplus (M_1[i, k] \otimes M_2[k, j])$ \\---
674+
\kw{return} $M_3$
675+
\end{pseudo}
688676
\end{algorithm}
689677

690678
Сложность наивного произведения двух матриц составляет $O(n^3)$ из-за тройного вложенного цикла, где каждый уровень вложенности привносит $n$ итераций.

tex/kao.sty

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1381,7 +1381,7 @@
13811381
%verbatim \preto{\@verbatim}{\topsep=0pt \partopsep=0pt }
13821382
13831383
% Algorithms
1384-
\RequirePackage[linesnumbered, ruled, vlined]{algorithm2e} % Algorithms
1384+
% \RequirePackage[linesnumbered, ruled, vlined]{algorithm2e} % Algorithms
13851385
13861386
% Special gliphs
13871387
\RequirePackage{ccicons} % Creative Commons icons

tex/main.tex

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@
1414
\usepackage{kaobiblio} % Обертка для biblatex, позволяет печатать сноску сбоку
1515
\addbibresource{FormalLanguageConstrainedReachabilityLectureNotes.bib}
1616

17-
\SetAlgorithmName{Листинг}{листинг}{Список листингов}
17+
\usepackage[]{pseudo}
18+
\newtcbtheorem{algorithm}{Листинг}{pseudo/booktabs, float, floatplacement=h, separator sign={.}}{algo}
19+
20+
1821

1922
\tikzexternalize
2023

tex/styles/utils.tex

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,11 @@
22
\usepackage[noheader]{gitver}
33

44
\NewDocumentCommand{\email}{m}{\href{mailto:#1}{#1}} % Кликабельный email
5+
6+
%% : с чуть более узки расстоянием по бокам.
7+
%% Определено в pseudo, потому пока что закомментировано
8+
% \NewDocumentCommand \rng { } {
9+
% \nolinebreak
10+
% \mathinner { : }
11+
% \nolinebreak
12+
% }

0 commit comments

Comments
 (0)