From e30b0473acca21a225cfcbdb661034661914f98f Mon Sep 17 00:00:00 2001
From: Andrew Guschin <guschin.drew@gmail.com>
Date: Fri, 25 Mar 2022 20:04:14 +0400
Subject: =?UTF-8?q?=D0=A7=D1=82=D0=BE-=D1=82=D0=BE=20=D0=BF=D0=BE=D1=85?=
 =?UTF-8?q?=D0=BE=D0=B6=D0=B5=D0=B5=20=D0=BD=D0=B0=20=D1=82=D1=80=D0=B5?=
 =?UTF-8?q?=D1=82=D1=8C=D1=8E=20=D0=BB=D0=B0=D0=B1=D1=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 lab3/report/lab3.tex | 359 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 359 insertions(+)
 create mode 100644 lab3/report/lab3.tex

(limited to 'lab3/report/lab3.tex')

diff --git a/lab3/report/lab3.tex b/lab3/report/lab3.tex
new file mode 100644
index 0000000..6faca04
--- /dev/null
+++ b/lab3/report/lab3.tex
@@ -0,0 +1,359 @@
+\documentclass[spec, och, labwork2]{SCWorks}
+\usepackage{preamble}
+
+\begin{document}
+\include{titlepage.tex}
+\tableofcontents
+
+\section{Постановка задачи}
+
+Цель работы "--- изучение основных понятий универсальной алгебры и операций над
+бинарными отношениями. Порядок выполнения работы:
+\begin{enumerate}
+    \item 
+        Рассмотреть понятие алгебраической операции и классификацию свойств
+        операций. Разработать алгоритмы проверки свойств операций:
+        ассоциативность, коммутативность, идемпотентность, обратимость,
+        дистрибутивность;
+    \item
+        Рассмотреть основные операции над бинарными отношениями. Разработать
+        алгоритмы выполнения операций над бинарными отношениями;
+    \item
+        Рассмотреть основные операции над матрицами. Разработать алгоритмы
+        выполнения операций над матрицами.
+\end{enumerate}
+
+\section{Теоретические сведения}
+
+\subsection{Алгебраические операции}
+
+\begin{definition}
+    Отображение $f : A^n \to A$ называется алгебраической $n$-арной операцией
+    или просто алгебраической операцией на множестве $A$. При этом $n$
+    называется порядком или арностью алгебраической операции $f$.
+\end{definition}
+
+Далее для бинарной операции $f$ по возможности будем использовать
+мультипликативную запись с помощью символа $\cdot$, т.е. вместо $f(x, y)$ писать
+$x \cdot y$, или просто $xy$. При необходимости для бинарной операции $f$
+используется также аддитивная запись с помощью символа $+$, т.е. вместо $f(x,
+y)$ записывается $x + y$.
+
+\begin{definition}
+    Бинарная операция $\cdot$ на множестве A называется
+    \begin{itemize}
+        \item 
+            ассоциативной, если $\forall x, y, z \in A$ выполняется равенство
+            \[ x \cdot (y \cdot z) = (x \cdot y) \cdot z \]
+        \item
+            коммутативной, если $\forall x, y \in A$ выполняется равенство
+            \[ x \cdot y = y \cdot x \]
+        \item
+            идемпотентной, если $\forall x \in A$ выполняется равенство
+            \[ x \cdot x = x \]
+        \item
+            обратимой, если 
+            \[ (\forall a \in A) \; \exists b \in A : a \cdot b = b \cdot a = e \]
+            где $e \in A$ и выполняется $a \cdot e = e \cdot a = a$
+        \item
+            дистрибутивной относительно бинарной операции $+$, если 
+            $\forall x, y, z \in A$ выполняются равенства
+            \begin{align*}
+                x \cdot (y + z) &= (x \cdot y) + (x \cdot z) \\
+                (y + z) \cdot x &= (y \cdot x) + (z \cdot x)
+            \end{align*}
+    \end{itemize}
+\end{definition}
+
+\subsection{Основные операции над бинарными отношениями}
+
+\begin{enumerate}
+    \item Теоретико-множественные операции;
+    \item 
+        Обращение бинарных отношений: обратным для бинарного отношения $\rho
+        \subset A \times B$ называется бинарное отношение $\rho^{-1} \subset B
+        \times A$, определяющееся по формуле:
+        \[ \rho^{-1} = \{ (b, a): (a, b) \in \rho \} \]
+    \item
+        Композиция композицией бинарных отношений $\rho \subset A \times B$ и
+        $\sigma \subset B \times C$ называется бинарное отношение $\rho \sigma$,
+        определяющееся по формуле:
+        \[ \rho \sigma = \{ (a, c): (a, b) \in \rho \land (b, c) \in \sigma \} \]
+\end{enumerate}
+
+\subsection{Основные операции над матрицами}
+
+\begin{enumerate}
+    \item Сложение матриц
+    \item Умножение матрицы на скаляр
+    \item Транспонирование матрицы
+    \item Умножение матриц
+\end{enumerate}
+
+\section{Алгоритмы проверки свойств операций}
+
+%
+\subsection{Проверка на ассоциативность}
+
+\textit{Вход.} Таблица Кэли $M = (m_{ij})$ размерности $N \times N$
+для операции $\cdot$ на множестве $A$.
+
+\textit{Выход.} <<Операция является ассоциативной>> или <<Операция не является
+ассоциативной>>.
+
+\begin{enumerate}
+    \item
+        Если $(\forall 0 \leq i, j, k < N)$ выполняется равенство $m_{pk} =
+        m_{jq}$, где $p$ "--- индекс $m_{ji}$, а $q$ "--- индекс $m_{ik}$, то
+        ответ "--- <<Операция является ассоциативной>>;
+    \item
+        Иначе, ответ "--- <<Операция не является ассоциативной>>.
+\end{enumerate}
+
+Трудоёмкость алгоритма --- $O(N^3)$.
+
+%
+\subsection{Проверка на коммутативность}
+
+\textit{Вход.} Таблица Кэли $M = (m_{ij})$ размерности $N \times N$
+для операции $\cdot$ на множестве $A$.
+
+\textit{Выход.} <<Операция является коммутативной>> или <<Операция не является
+коммутативной>>.
+
+\begin{enumerate}
+    \item 
+        Если $(\forall 0 \leq i, j < N) \; m_{ij} = m_{ji}$, то ответ "---
+        <<Операция является коммутативной>>;
+    \item Иначе, ответ "--- <<Операция не является коммутативной>>.
+\end{enumerate}
+
+Трудоёмкость алгоритма --- $O(N^2)$.
+
+%
+\subsection{Проверка на идемпотентность}
+
+\textit{Вход.} Таблица Кэли $M = (m_{ij})$ размерности $N \times N$
+для операции $\cdot$ на множестве $A$.
+
+\textit{Выход.} <<Операция является идемпотентной>> или <<Операция не является
+идемпотентной>>.
+
+\begin{enumerate}
+    \item 
+        Если $(\forall 0 \leq i < N) \; m_{ii} = a$, где $a$ "--- $i$-й элемент
+        множества $A$, то ответ "--- <<Операция является идемпотентной>>;
+    \item Иначе, ответ "--- <<Операция не является идемпотентной>>.
+\end{enumerate}
+
+Трудоёмкость алгоритма --- $O(N)$.
+
+%
+\subsection{Проверка на обратимость}
+
+\textit{Вход.} Таблица Кэли $M = (m_{ij})$ размерности $N \times N$
+для операции $\cdot$ на множестве $A$.
+
+\textit{Выход.} <<Операция является обратимой>> или <<Операция не является
+обратимой>>.
+
+\begin{enumerate}
+    \item 
+        Если $(\forall 0 \leq i, j < N) \; m_{ij} = m_{ji}$, то ответ "---
+        <<Операция является обратимой>>;
+    \item Иначе, ответ "--- <<Операция не является обратимой>>.
+\end{enumerate}
+
+Трудоёмкость алгоритма --- $O(N^2)$.
+
+%
+\subsection{Проверка на дистрибутивность}
+
+\textit{Вход.} Таблица Кэли $M^\cdot = (m^\cdot_{ij})$ размерности $N \times N$
+для операции $\cdot$ на множестве $A$, таблица Кэли $M^+ = (m^+_{ij})$
+размерности $N \times N$ для операции $+$ на множестве $A$
+
+\textit{Выход.} <<Операция является дистрибутивной>> или <<Операция не является
+дистрибутивной>>.
+
+% \begin{align*}
+%     x \cdot (y + z) &= (x \cdot y) + (x \cdot z) \\
+%     (y + z) \cdot x &= (y \cdot x) + (z \cdot x)
+% \end{align*}
+
+% i - x, j - y, k - z
+
+\begin{enumerate}
+    \item
+        Если $(\forall 0 \leq i, j, k < N)$ выполняются равенства $m^\cdot_{it}
+        = m^+_{pq}$ и $m^\cdot_{ti} = m^+_{rs}$, где $t$ "--- индекс $m^+_{jk}$,
+        $p$ "--- индекс $m^\cdot_{ij}$, $q$ "--- индекс $m^\cdot_{ik}$, $r$ "---
+        индекс $m^\cdot_{ji}$, $s$ "--- индекс $m^\cdot_{ki}$, то ответ "---
+        <<Операция является дистрибутивной>>;
+    \item Иначе, ответ "--- <<Операция не является дистрибутивной>>.
+\end{enumerate}
+
+Трудоёмкость алгоритма --- $O(N^3)$.
+
+\section{Алгоритмы выполнения операций над бинарными отношениями}
+
+%
+\subsection{Вычисление объединения бинарных отношений}
+
+\textit{Вход.} Матрица $A(\rho) = (a_{ij})$ бинарного отношения $\rho$
+размерности $N \times N$, матрица $B(\sigma) = (b_{ij})$ бинарного отношения
+$\sigma$ размерности $N \times N$.
+
+\textit{Выход.} Матрица $C(\rho \cup \sigma) = (c_{ij})$ бинарного отношения
+$\rho \cup \sigma$.
+
+\begin{enumerate}
+    \item $(\forall 0 \leq i, j < N - 1) \; c_{ij} = a_{ij} + b_{ij}$.
+\end{enumerate}
+
+Трудоёмкость алгоритма --- $O(N^2)$.
+
+%
+\subsection{Вычисление пересечения бинарных отношений}
+
+\textit{Вход.} Матрица $A(\rho) = (a_{ij})$ бинарного отношения $\rho$
+размерности $N \times N$, матрица $B(\sigma) = (b_{ij})$ бинарного отношения
+$\sigma$ размерности $N \times N$.
+
+\textit{Выход.} Матрица $C(\rho \cap \sigma) = (c_{ij})$ бинарного отношения
+$\rho \cap \sigma$.
+
+\begin{enumerate}
+    \item $(\forall 0 \leq i, j < N - 1) \; c_{ij} = a_{ij} \cdot b_{ij}$.
+\end{enumerate}
+
+Трудоёмкость алгоритма --- $O(N^2)$.
+
+%
+\subsection{Вычисление дополнения бинарного отношения}
+
+\textit{Вход.} Матрица $M(\rho) = (m_{ij})$ бинарного отношения $\rho$
+размерности $N \times N$.
+
+\textit{Выход.} Матрица $M'(M(\rho)) = (m'_{ij})$ дополнения бинарного отношения
+$\rho$.
+
+\begin{enumerate}
+    \item $(\forall 0 \leq i, j < N - 1) \; m'_{ij} = 1 - m_{ij}$.
+\end{enumerate}
+
+Трудоёмкость алгоритма --- $O(N^2)$.
+
+%
+\subsection{Вычисление обратного бинарного отношения}
+
+\textit{Вход.} Матрица $M(\rho) = (m_{ij})$ бинарного отношения $\rho$
+размерности $N \times N$.
+
+\textit{Выход.} Матрица $M'(M(\rho)) = (m'_{ij})$ бинарного отношения
+$\rho^{-1}$.
+
+\begin{enumerate}
+    \item Ответом является матрица транспонированная матрица $M^T = M'$.
+\end{enumerate}
+
+Трудоёмкость алгоритма --- $O(N^2)$.
+
+%
+\subsection{Вычисление композиции бинарных отношений}
+
+\textit{Вход.} Матрица $A(\rho) = (a_{ij})$ бинарного отношения $\rho$
+размерности $N \times N$, матрица $B(\sigma) = (b_{ij})$ бинарного отношения
+$\sigma$ размерности $N \times N$.
+
+\textit{Выход.} Матрица $C(\rho\sigma) = (c_{ij})$ бинарного отношения
+$\rho\sigma$.
+
+\begin{enumerate}
+    \item Ответом является матрица $C = A \cdot B$, вычисленная с помощью
+    алгоритма 5.4 Умножения матриц.
+\end{enumerate}
+
+Трудоёмкость алгоритма --- $O(N^3)$.
+
+\section{Алгоритмы выполнения операций над матрицами}
+
+%
+\subsection{Сложение матриц}
+
+\textit{Вход.} Матрица $A = (a_{ij})$ размерности $N \times M$, матрица
+$B = (b_{ij})$ размерности $N \times M$.
+
+\textit{Выход.} Матрица $C = (c_{ij})$ размерности $N \times M$.
+
+\begin{enumerate}
+    \item 
+        $(\forall 0 \leq i < N) (\forall 0 \leq j < M) \;
+        c_{ij} = a_{ij} + b_{ij}$
+\end{enumerate}
+
+Трудоёмкость алгоритма --- $O(N^2)$.
+
+%
+\subsection{Умножение матрицы на скаляр}
+
+\textit{Вход.} Матрица $A = (a_{ij})$ размерности $N \times M$, скаляр $\alpha$.
+
+\textit{Выход.} Матрица $A' = (a'_{ij})$ размерности $N \times M$.
+
+\begin{enumerate}
+    \item 
+        $(\forall 0 \leq i < N) (\forall 0 \leq j < M) \;
+        a'_{ij} = \alpha \cdot a_{ij}$
+\end{enumerate}
+
+Трудоёмкость алгоритма --- $O(N^2)$.
+
+%
+\subsection{Транспонирование матрицы}
+
+\textit{Вход.} Матрица $A = (a_{ij})$ размерности $N \times M$.
+
+\textit{Выход.} Матрица $A^T = (a^T_{ij})$ размерности $M \times N$.
+
+\begin{enumerate}
+    \item $(\forall 0 \leq i < N) (\forall 0 \leq j < M) \; a^T_{ji} = a_{ij}$
+\end{enumerate}
+
+Трудоёмкость алгоритма --- $O(N^2)$.
+
+%
+\subsection{Умножение матриц}
+
+\textit{Вход.} Матрица $A = (a_{ij})$ размерности $N \times M$, матрица $B =
+(b_{ij})$ размерности $M \times K$.
+
+\textit{Выход.} Матрица $C = (c_{ij}) = A \cdot B$ размерности $N \times K$.
+
+\begin{enumerate}
+    \item 
+        $ \displaystyle
+        (\forall 0 \leq i < N) (\forall 0 \leq j < M) \;
+        c_{ij} = \sum_{k = 0}^{K - 1} a_{ik} + \sum_{k = 0}^{K - 1} b_{kj}$
+\end{enumerate}
+
+Трудоёмкость алгоритма --- $O(N^3)$.
+
+\section{Программная реализация}
+
+\inputminted[fontsize=\small, breaklines=true, style=bw, linenos]{c}{../lab3.py}
+
+\section{Результаты тестирования}
+
+текст
+
+\conclusion
+
+В ходе выполнения данной лабораторной работы были изучены основные свойства
+алгебраических операций, основные операции над бинарными отношениями, основные
+операции над матрицами. Были разработаны алгоритмы для программной реализации
+данных операций, а также была произведена оценка сложности данных алгоритмов.
+Программная реализация на языке Python с библиотекой numpy успешно прошла
+тестирование.
+
+\end{document}
-- 
cgit v1.2.3

