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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
|
\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{Результаты тестирования}
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{test1.png}
\caption{Проверка свойств некоторой бинарной операции}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{test2.png}
\caption{Проверка свойства транзитивности для двух операций}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{test3.png}
\caption{Выполнение основных операций над бинарными отношениями}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{test4.png}
\caption{Проверка операции умножения двух матриц}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{test5.png}
\caption{Проверка операции транспонирования матрицы}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{test6.png}
\caption{Ответы на задачи (Вариант 6)}
\end{figure}
\conclusion
В ходе выполнения данной лабораторной работы были изучены основные свойства
алгебраических операций, основные операции над бинарными отношениями, основные
операции над матрицами. Были разработаны алгоритмы для программной реализации
данных операций, а также была произведена оценка сложности данных алгоритмов.
Программная реализация на языке Python с библиотекой numpy успешно прошла
тестирование.
\end{document}
|