562 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			562 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
| \documentclass[bachelor, och, coursework]{SCWorks}
 | ||
| % параметр - тип обучения - одно из значений:
 | ||
| %    spec     - специальность
 | ||
| %    bachelor - бакалавриат (по умолчанию)
 | ||
| %    master   - магистратура
 | ||
| % параметр - форма обучения - одно из значений:
 | ||
| %    och   - очное (по умолчанию)
 | ||
| %    zaoch - заочное
 | ||
| % параметр - тип работы - одно из значений:
 | ||
| %    referat    - реферат
 | ||
| %    coursework - курсовая работа (по умолчанию)
 | ||
| %    diploma    - дипломная работа
 | ||
| %    pract      - отчет по практике
 | ||
| %    pract      - отчет о научно-исследовательской работе
 | ||
| %    autoref    - автореферат выпускной работы
 | ||
| %    assignment - задание на выпускную квалификационную работу
 | ||
| %    review     - отзыв руководителя
 | ||
| %    critique   - рецензия на выпускную работу
 | ||
| % параметр - включение шрифта
 | ||
| %    times    - включение шрифта Times New Roman (если установлен)
 | ||
| %               по умолчанию выключен
 | ||
| \usepackage[T2A]{fontenc}
 | ||
| \usepackage[cp1251]{inputenc}
 | ||
| \usepackage{graphicx}
 | ||
| \usepackage{minted}
 | ||
| \usepackage{spverbatim}
 | ||
| \usepackage{float}
 | ||
| 
 | ||
| \usepackage[sort,compress]{cite}
 | ||
| \usepackage{amsmath}
 | ||
| \usepackage{amssymb}
 | ||
| \usepackage{amsthm}
 | ||
| \usepackage{fancyvrb}
 | ||
| \usepackage{longtable}
 | ||
| \usepackage{array}
 | ||
| \usepackage[english,russian]{babel}
 | ||
| 
 | ||
| 
 | ||
| \usepackage[colorlinks=true]{hyperref}
 | ||
| 
 | ||
| 
 | ||
| \newcommand{\eqdef}{\stackrel {\rm def}{=}}
 | ||
| 
 | ||
| \newtheorem{lem}{Лемма}
 | ||
| 
 | ||
| \begin{document}
 | ||
| 
 | ||
| % Кафедра (в родительном падеже)
 | ||
| \chair{математической кибернетики и компьютерных наук}
 | ||
| 
 | ||
| % Тема работы
 | ||
| \title{Создание приложения для отрисовки графов и алгоритмов для работы с ними}
 | ||
| 
 | ||
| % Курс
 | ||
| \course{2}
 | ||
| 
 | ||
| % Группа
 | ||
| \group{211}
 | ||
| 
 | ||
| % Факультет (в родительном падеже) (по умолчанию "факультета КНиИТ")
 | ||
| %\department{факультета КНиИТ}
 | ||
| 
 | ||
| % Специальность/направление код - наименование
 | ||
| \napravlenie{02.03.02 "--- Фундаментальная информатика и информационные технологии}
 | ||
| %\napravlenie{02.03.01 "--- Математическое обеспечение и администрирование информационных систем}
 | ||
| %\napravlenie{09.03.01 "--- Информатика и вычислительная техника}
 | ||
| %\napravlenie{09.03.04 "--- Программная инженерия}
 | ||
| %\napravlenie{10.05.01 "--- Компьютерная безопасность}
 | ||
| 
 | ||
| % Для студентки. Для работы студента следующая команда не нужна.
 | ||
| %\studenttitle{Студентки}
 | ||
| 
 | ||
| % Фамилия, имя, отчество в родительном падеже
 | ||
| \author{Морозова Андрея Денисовича}
 | ||
| 
 | ||
| % Заведующий кафедрой
 | ||
| \chtitle{к.\,ф.-м.\,н., доцент} % степень, звание
 | ||
| \chname{А.\,С.\,Иванов}
 | ||
| 
 | ||
| %Научный руководитель (для реферата преподаватель проверяющий работу)
 | ||
| \satitle{ст. преподаватель} %должность, степень, звание
 | ||
| \saname{М.\,И.\,Сафрончик}
 | ||
| 
 | ||
| % Семестр (только для практики, для остальных
 | ||
| % типов работ не используется)
 | ||
| \term{2}
 | ||
| 
 | ||
| % Год выполнения отчета
 | ||
| \date{2021}
 | ||
| 
 | ||
| \maketitle
 | ||
| 
 | ||
| % Включение нумерации рисунков, формул и таблиц по разделам
 | ||
| % (по умолчанию - нумерация сквозная)
 | ||
| % (допускается оба вида нумерации)
 | ||
| %\secNumbering
 | ||
| 
 | ||
| \tableofcontents
 | ||
| 
 | ||
| % Раздел "Обозначения и сокращения". Может отсутствовать в работе
 | ||
| %\abbreviations
 | ||
| %\begin{description}
 | ||
| %    \item SQL  "--- англ. structured query language — «язык структурированных запросов;
 | ||
| %    \item $\det B$  "--- определитель матрицы $B$;
 | ||
| %    \item ИНС "--- Искусственная нейронная сеть;
 | ||
| %    \item FANN "--- Feedforward Artifitial Neural Network
 | ||
| %\end{description}
 | ||
| 
 | ||
| % Раздел "Определения". Может отсутствовать в работе
 | ||
| %\definitions
 | ||
| 
 | ||
| % Раздел "Определения, обозначения и сокращения". Может отсутствовать в работе.
 | ||
| % Если присутствует, то заменяет собой разделы "Обозначения и сокращения" и "Определения"
 | ||
| %\defabbr
 | ||
| 
 | ||
| 
 | ||
| % Раздел "Введение"
 | ||
| \intro
 | ||
| Целью настоящей работы является изучение работы фреймворка для кроссплатформенной разработки "Flutter", и разработка приложения для создания графов и взаимодействия с ними.
 | ||
| 
 | ||
| Поставлены задачи:
 | ||
| \begin{itemize}
 | ||
|     \item разбор алгоритмов на графах
 | ||
|     \item разбор работы с Flutter
 | ||
|     \item построение приложения
 | ||
| \end{itemize}
 | ||
| 
 | ||
| \section{Введение}
 | ||
| \subsection{Графы}
 | ||
| Граф --- математический объект, состоящий из двух множеств. Одно из 
 | ||
| них  ---  любое конечное множество, его элементы называются \textit{вершинами} 
 | ||
| графа. Другое множество состоит из пар вершин, эти пары называются  
 | ||
| \textit{ребрами} графа.~\cite{IITMMM_2017}
 | ||
| 
 | ||
| \textbf{Ориентированный граф} определяется как пара \textit{(V, E)}, где \textit{V} --- конечное множество, а \textit{E} --- бинарное отношение на \textit{V}, т.~е. подмножество множества ${V \times V}$. Ориентированный граф для краткости называют \textbf{орграфом}. Множетсво $V$ называют \textbf{множеством вершин графа}, а его элемент называют \textbf{вершиной} графа. Множество $E$ называют \textbf{множеством рёбер}, а его элементы называют \textbf{рёбрами}. Граф может содержать \textbf{рёбра-циклы}, соединяющие вершину с собой. На рисунке~\ref{fig:orgrapf_example} изображен оринетированный граф с множеством вершин \{0, 1, 2, 3, 4\}.~\citenum{Algo_2013}
 | ||
| 
 | ||
| \begin{figure}[!ht]
 | ||
| 	\centering
 | ||
| 	\includegraphics[width=9cm]{./pic/orgraph.png}
 | ||
| 	\caption{\label{fig:orgrapf_example}
 | ||
| 		Пример орграфа}
 | ||
| \end{figure}
 | ||
| 
 | ||
| В \textbf{неориентированном} графе $G = (V, E)$ множество ребер состоит из \textbf{неупорядоченных} пар вершин: парами являются множества $\{u, v\}$, где $u, v \in V$ и $u \neq v$. Для неориентированного графа $\{u, v\}$ и $\{v, u\}$ обозначают одно и то же ребро. Неориентированный граф не может содержать рёбер-циклов, и каждое ребро состоит из двух различных вершин. На рисунке~\ref{fig:grapf_example} изображен неориентированный граф с множеством вершин \{0, 1, 2, 2, 4\}
 | ||
| 
 | ||
| \begin{figure}[!ht]
 | ||
| 	\centering
 | ||
| 	\includegraphics[width=9cm]{./pic/graph.png}
 | ||
| 	\caption{\label{fig:grapf_example}
 | ||
| 		Пример неориентированного графа}
 | ||
| \end{figure}
 | ||
| 
 | ||
| \section{История создания языка SQL}
 | ||
| \subsection{Создатели}
 | ||
| Создателями языка SQL являются Реймонд Боус (англ. Ray Boyce) и Дональд Чемберлин (англ. Donald Chamberlin)
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| \subsection{Еще элементы математического текста}
 | ||
| Нейрон является составной частью нейронной сети. Он состоит из
 | ||
| элементов трех типов: умножителей (синапсов), сумматора и
 | ||
| нелинейного преобразователя. Синапсы осуществляют связь между
 | ||
| нейронами, умножают входной сигнал на число, характеризующее силу
 | ||
| связи (вес синапса). Сумматор выполняет сложение сигналов,
 | ||
| поступающих по синаптическим связям от других нейронов, и внешних
 | ||
| входных сигналов. Нелинейный преобразователь реализует нелинейную
 | ||
| функцию одного аргумента "--- выхода сумматора. Эта функция
 | ||
| называется функцией активации или передаточной функцией. На рисунке~\ref{neuron} приведено строение одного нейрона.
 | ||
| 
 | ||
| Нейрон в целом реализует скалярную функцию векторного аргумента.
 | ||
| Математическая модель нейрона:
 | ||
| \[
 | ||
| 	 s = \sum\limits_{i = 1}^n w_i x_i + b,
 | ||
| \]
 | ||
| \[
 | ||
| 	 y = f(s),
 | ||
| \]
 | ||
| где $w_i $ "--- вес синапса; $i = 1,\ldots ,n$; $b$ "--- значение
 | ||
| смещения; $s$ "--- результат суммирования; $x_i $ "--- $i$-тый
 | ||
| компонент входного вектора (входной сигнал), \linebreak $i = 1,\ldots, n$;
 | ||
| $y$ "--- выходной сигнал нейрона; $n$ "--- число входов нейрона;
 | ||
| $f(s)$ "--- нелинейное преобразование (функция активации).
 | ||
| \begin{figure}[ht]
 | ||
| 	\centering
 | ||
| 	%\includegraphics{Neuron}
 | ||
| 	\caption{Нейрон}\label{neuron}
 | ||
| \end{figure}
 | ||
| 
 | ||
| В качестве функции активации нейронов берут обычно одну из
 | ||
| следующих:
 | ||
| \begin{itemize}
 | ||
| 	\item пороговая функция активации;
 | ||
| 	\item экспоненциальная сигмоида;
 | ||
| 	\item рациональная сигмоида;
 | ||
| 	\item гиперболический тангенс.
 | ||
| \end{itemize}
 | ||
| 
 | ||
| Данные функции активации обладают таким важным свойством как
 | ||
| нелинейность. Нелинейность функции активации принципиальна для
 | ||
| построения нейронных сетей. Если бы нейроны были линейными
 | ||
| элементами, то любая последовательность нейронов также производила
 | ||
| бы линейное преобразование и вся нейронная сеть была бы
 | ||
| эквивалентна одному нейрону (или одному слою нейронов в случае
 | ||
| нескольких выходов). Нелинейность разрушает суперпозицию и
 | ||
| приводит к тому, что возможности нейросети существенно выше
 | ||
| возможностей отдельных нейронов.
 | ||
| 
 | ||
| \subsection{Снова математический текст}
 | ||
| Опишем самую популярную архитектуру
 | ||
|  "--- многослойный персептрон с последовательными связями и
 | ||
| сигмоидальной функцией активации (\foreignlanguage{english}{Feedforward Artifitial Neural
 | ||
| Network, FANN}).
 | ||
| 
 | ||
| В многослойных нейронных сетях с последовательными связями нейроны
 | ||
| делятся на группы с общим входным сигналом "--- слои. Стандартная
 | ||
| сеть состоит из $L$ слоев, пронумерованных слева направо. Каждый
 | ||
| слой содержит совокупность нейронов с едиными входными сигналами.
 | ||
| Внешние входные сигналы подаются на входы нейронов входного слоя
 | ||
| (его часто нумеруют как нулевой), а выходами сети являются
 | ||
| выходные сигналы последнего слоя. Кроме входного и выходного слоев
 | ||
| в многослойной нейронной сети есть один или несколько скрытых
 | ||
| слоев, соединенных последовательно в прямом направлении и не
 | ||
| содержащих связей между элементами внутри слоя и обратных связей
 | ||
| между слоями. Число нейронов в слое может быть любым и не зависит
 | ||
| от количества нейронов в других слоях. Архитектура нейронной сети
 | ||
| прямого распространения сигнала приведена на рисунке~\ref{net1}.
 | ||
| 
 | ||
| На каждый нейрон первого слоя подаются все элементы внешнего
 | ||
| входного сигнала. Все выходы нейронов $i$-го слоя подаются на
 | ||
| каждый нейрон слоя $i+1$.
 | ||
| 
 | ||
| Нейроны выполняют взвешенное суммирование элементов входных
 | ||
| сигналов. К сумме прибавляется смещение нейрона. Над результатом
 | ||
| суммирования выполняется нелинейное преобразование "--- функция
 | ||
| активации (передаточная функция). Значение функции активации есть
 | ||
| выход нейрона. Приведем схему многослойного персептрона. Нейроны
 | ||
| представлены кружками, связи между нейронами "--- линиями со
 | ||
| стрелками.
 | ||
| 
 | ||
| \begin{figure}[ht]
 | ||
| 	\centering
 | ||
| 	%\includegraphics{NN-Scheme}
 | ||
| 	\caption{Архитектура многослойной сети прямого
 | ||
| 	распространения}\label{net1}
 | ||
| \end{figure}
 | ||
| 
 | ||
| Функционирование сети выполняется в соответствии с формулами:
 | ||
| \[
 | ||
| 	s_j^{\left[ k \right]} = \sum\limits_{i = 1}^{N_{k - 1} }
 | ||
| 	{w_{ji}^{\left[ k \right]} y_i^{\left[ {k - 1} \right]} +
 | ||
| 	b_j^{[k]} ,\ \ j = 1,\ldots ,N_k ,\ \ k = 1,\ldots ,L;}
 | ||
| \]
 | ||
| \[
 | ||
| 	 y_j^{\left[ k \right]} = f(s_j^{\left[ k \right]} ),\ \ j =
 | ||
| 	1,\ldots ,N_k ,\ \ k = 1,\ldots ,L-1,
 | ||
| \]
 | ||
| \[
 | ||
| 	 y_j^{\left[ L \right]} = s_j^{\left[ L \right]} ,
 | ||
| \]
 | ||
| где
 | ||
| \begin{itemize}
 | ||
| 	\item
 | ||
| 		$y_i^{\left[ {k - 1} \right]}$ "--- выходной сигнал $i$-го нейрона
 | ||
| 		$(k - 1)$-го слоя; \item $w_{ji}^{\left[ k \right]}$ "--- вес связи
 | ||
| 		между  $j$-м нейроном слоя $(k-1)$  и  $i$-м нейроном $k$-го
 | ||
| 		слоя;
 | ||
| 	\item
 | ||
| 		$b_j^{\left[ k \right]}$ "--- значение смещения $j$-го
 | ||
| 		нейрона $k$-го слоя;
 | ||
| 	\item
 | ||
| 		$y = f(s)$ "--- функция активации;
 | ||
| 	\item
 | ||
| 		$y_j^{\left[ k \right]}$ "--- выходной сигнал $j$-го
 | ||
| 		нейрона $k$-го слоя;
 | ||
| 	\item
 | ||
| 		$N_k$ "--- число узлов слоя $k$;
 | ||
| 	\item
 | ||
| 		$L$ "--- общее число основных слоев;
 | ||
| 	\item
 | ||
| 		$n = N_0$ "--- размерность входного вектора;
 | ||
| 	\item
 | ||
| 		$m = N_L$ "---
 | ||
| 		размерность выходного вектора сети.
 | ||
| \end{itemize}
 | ||
| 
 | ||
| На рисунке~\ref{net2} представлена сеть прямого распространения
 | ||
| сигнала с 5 входами, 3 нейронами в скрытом слое и 2 нейронами в
 | ||
| выходном слое.
 | ||
| \begin{figure}[hb]
 | ||
| 	\centering
 | ||
| 	%\includegraphics{NN-Persep}
 | ||
| 	\caption{Пример нейронной сети}\label{net2}
 | ||
| \end{figure}
 | ||
| 
 | ||
| 
 | ||
| \section{Раздел с подразделами}
 | ||
| \subsection{Текст с формулами и леммой}
 | ||
| 
 | ||
| Обозначим $[y_0,y_1,\ldots,y_p;f]$ разделенную разность порядка $p$ функции $f$ по узлам $y_0<y_1<\ldots<y_p$.
 | ||
| 
 | ||
| Обозначим $L_pf(x;y_0,y_1,\ldots,y_p)$ интерполяционный полином Ньютона функции $f$ по узлам $y_0,y_1,\ldots,y_p$:
 | ||
| \begin{equation} \label{eq:ex01}
 | ||
|     L_pf(x;y_0,y_1,\ldots,y_p)=\sum_{j=0}^p[y_0, \ldots,y_{j};f]
 | ||
|     \cdot \prod_{i=0}^{j-1}(x-y_i), \ \ x-y_{-1}\eqdef 1
 | ||
| \end{equation}
 | ||
| 
 | ||
| \begin{lem} \label{lem:1}
 | ||
|     Если $0\leqslant x_0<x_1<\ldots <x_p\leqslant 1$ и
 | ||
|     $f\in C[0,1]$ удовлетворяет условиям
 | ||
|     \begin{enumerate}
 | ||
|         \item
 | ||
|             \label{it:1lem1}$f(x)\geqslant 0, \ x\in [0,1]$;
 | ||
|         \item
 | ||
|             \label{it:2lem1}
 | ||
|             $[y_0,\ldots,y_{p+1};f]\geqslant 0$
 | ||
|             для всех $y_i \in [0,1], \
 | ||
|             i=0,\ldots,p+1,$
 | ||
|     \end{enumerate}
 | ||
|     тогда
 | ||
|     \begin{equation}\label{eq:ex02}
 | ||
|         L_pf(x;x_0,\ldots,x_p)\geqslant 0
 | ||
|     \end{equation}
 | ||
|     для всех $x\in [x_{p-(2k+1)},x_{p-2k}]$,
 | ||
|     $k=0,\ldots,\left[p/2\right]$,
 | ||
|     $x_{-1} \eqdef -\infty$.
 | ||
| \end{lem}
 | ||
| \begin{proof}
 | ||
|     Возьмем $x \in [x_{p-(2k+1)},x_{p-2k}]$,\ \ $k=0,\ldots,\left[p/2
 | ||
|     \right]$.
 | ||
| 
 | ||
|     Из условия \ref{lem:1} леммы следует, что
 | ||
|     \begin{displaymath}
 | ||
|         [x_0,\ldots,x_{p-(2k+1)},x,x_{p-2k},\ldots,x_p;f] \geqslant
 | ||
|         0,
 | ||
|     \end{displaymath}
 | ||
|     т.~е.
 | ||
|     \begin{multline}\label{eq:ex03}
 | ||
|      \Delta_pf(x;x_0,\ldots,x_p)\eqdef
 | ||
|      \\ \eqdef
 | ||
|       \begin{vmatrix}
 | ||
|        1 & x_0   & x_0^2 & \cdots & x_0^p & f(x_0) \\
 | ||
|        \vdots  & \vdots & \vdots & \ddots & \vdots & \vdots \\
 | ||
|        1 & x_{p-(2k+1)} & x_{p-(2k+1)}^2 & \cdots & x_{p-(2k+1)}^p & f(x_{p-(2k+1)}) \\
 | ||
|        1 & x & x^2 & \cdots & x^p & f(x) \\
 | ||
|        1 & x_{p-2k} & x_{p-2k}^2 & \cdots & x_{p-2k}^p & f(x_{p-2k}) \\
 | ||
|        \vdots  & \vdots & \vdots & \ddots & \vdots & \vdots \\
 | ||
|        1 & x_p & x_p^2 & \cdots & x_p^p & f(x_p) \\
 | ||
|       \end{vmatrix}
 | ||
|       \geqslant 0
 | ||
|     \end{multline}
 | ||
| 
 | ||
|     Из равенства
 | ||
|     \begin{equation*}
 | ||
|         \Delta_p f(x;x_0,\ldots,x_p)=(L_pf(x;x_0,\ldots,x_p)-f(x))
 | ||
|         \prod_{0\leqslant i<j\leqslant p}(x_j-x_i).
 | ||
|     \end{equation*}
 | ||
| 	и \eqref{eq:ex03} следует, что
 | ||
|     \begin{displaymath}
 | ||
|         L_pf(x;x_0,\ldots,x_p)\geqslant f(x).
 | ||
|     \end{displaymath}
 | ||
| 
 | ||
|     С учетом условия \ref{it:1lem1} леммы мы получаем утверждение \eqref{eq:ex02}.
 | ||
| \end{proof}
 | ||
| 
 | ||
| \subsection{Название другого подраздела}
 | ||
| \subsubsection{Более мелкий подраздел}
 | ||
| Если разность энергий электронно"=дырочных уровней $E_2-E_1$ близка к энергии предельного оптического фонона $\hbar\Omega_{LO}$, то в разложении волновых функций полного гамильтониана можно ограничиться нулевым приближением для всех состояний, за исключением близких по значению к $E_2$.
 | ||
| 
 | ||
| \subsubsection{Текст с таблицей}
 | ||
| В таблице~\ref{table-1} представлены результаты сокращения словарей неисправностей для схем из каталога ISCAS'89.
 | ||
| 
 | ||
| \begin{table}[!ht]
 | ||
| 	\small
 | ||
| 	\caption{Результат сокращения словарей неисправностей при помощи масок} \label{table-1}
 | ||
| 	\begin{tabular}{|l|c|c|c|c|r|r|r|}
 | ||
| 		\hline 1 & 2& 3& 4& 5& 6& 7& 8\\
 | ||
| 		\hline S298 & 177 & 1932 & 341964 & 61 & 10797 & 3,16\% & 0,61\\
 | ||
| 		\hline S344 & 240 & 1397 & 335280 & 59 & 14160 & 4,22\% & 0,53\\
 | ||
| 		\hline S349 & 243 & 1474 & 358182 & 62 & 15066 & 4,21\% & 0,60\\
 | ||
| 		\hline S382 & 190 & 12444 & 2364360 & 55 & 10450 & 0,44\% & 3,78\\
 | ||
| 		\hline S386 & 274 & 2002 & 548548 & 91 & 24934 & 4,55\% & 1,40\\
 | ||
| 		\hline S400 & 194 & 13284 & 2577096 & 58 & 11252 & 0,44\% & 4,28\\
 | ||
| 		\hline S444 & 191 & 13440 & 2567040 & 60 & 11460 & 0,45\% & 4,26\\
 | ||
| 		\hline S510 & 446 & 700 & 312200 & 70 & 31220 & 10,00\% & 0,63\\
 | ||
| 		\hline S526 & 138 & 13548 & 1869624 & 38 & 5244 & 0,28\% & 2,41\\
 | ||
| 		\hline S641 & 345 & 5016 & 1730520 & 132 & 45540 & 2,63\% & 7,06\\
 | ||
| 		\hline S713 & 343 & 3979 & 1364797 & 131 & 44933 & 3,29\% & 5,61\\
 | ||
| 		\hline S820 & 712 & 21185 & 15083720 & 244 & 173728 & 1,15\% & 126,99\\
 | ||
| 		\hline S832 & 719 & 21603 & 15532557 & 253 & 181907 & 1,17\% & 135,18\\
 | ||
| 		\hline S953 & 326 & 322 & 104972 & 91 & 29666 & 28,26\% & 0,27\\
 | ||
| 		\hline S1423 & 293 & 750 & 219750 & 93 & 27249 & 12,40\% & 0,57\\
 | ||
| 		\hline S1488 & 1359 & 22230 & 30210570 & 384 & 521856 & 1,73\% & 541,69\\
 | ||
| 		\hline
 | ||
| 	\end{tabular}
 | ||
| \end{table}
 | ||
| 
 | ||
| \subsubsection{Текст с кодом программы}
 | ||
| Термин <<разреженная матрица>> впервые был предложен Гарри Марковицем. В 1989 он был награжден премией имени Джона фон Неймана в том числе и за вклад в теорию методов для разреженных матриц.
 | ||
| 
 | ||
| В большинстве источников, разреженной матрицей называется матрица, в которой мало ненулевых элементов. Это нельзя назвать определением из-за слова <<мало>>. В  понятие разреженной матрицы определяется так: <<Мы можем называть матрицу разреженной, если применение к ней методов, описываемых в книге, экономит память и/или время>>. Таким образом, следует дать определение алгоритму для разреженных матриц. Алгоритмом для разреженных матриц будем называть алгоритм, у которого время работы и необходимый объем памяти зависят от количества ненулевых элементов в матрице.
 | ||
| 
 | ||
| Размерность квадратной матрицы $A$ будем обозначать $n$, а количество ненулевых элементов в ней $|A|$.
 | ||
| 
 | ||
| Плотные матрицы обычно хранятся в качестве двумерного массива $n\times n$. Будем обозначать такой массив a. Разреженные матрицы не стоит хранить таким способом из-за слишком большого потребления памяти, которая будет занята в основном нулевыми элементами.
 | ||
| 
 | ||
| Один из вариантов представления разреженных матриц в памяти компьютера "--- в виде трех массивов: \verb"column", \verb"value" и \verb"rowIndex". Размеры массивов \verb"column" и \verb"value" равны $|A|$. Размер \verb"rowIndex" равен $n+1$. Ненулевые элементы матрицы $A$ хранятся последовательно по строкам в этих массивах. Элемент \verb"column[i]" содержит номер столбца, в котором содержится \verb"i"-й ненулевой элемент, а \verb"value[i]" "--- его величину. Массив \verb"rowIndex[i]" содержит в себе индекс первого ненулевого элемента \verb"i"-й строки. Все ненулевые элементы \verb"i"-й строки содержатся в массивах \verb"column" и \verb"value" в элементах с индексами от \verb"rowIndex[i]" по \verb"rowIndex[i + 1]-1". Для удобства полагают \verb"rowIndex["$n$\verb"]"$=|A|$.
 | ||
| 
 | ||
| Для примера рассмотрим следующую матрицу:
 | ||
| \[
 | ||
|     \left(
 | ||
|     \begin{matrix}
 | ||
|         1 & 0 & 5 & 0 & 0 \\
 | ||
|         0 & 2 & 7 & 4 & 0 \\
 | ||
|         0 & 0 & 1 & 0 & 0 \\
 | ||
|         9 & 6 & 0 & 3 & 0 \\
 | ||
|         0 & 0 & 3 & 0 & 5
 | ||
|     \end{matrix}
 | ||
|     \right)
 | ||
| \]
 | ||
| 
 | ||
| Массивы \verb"column", \verb"value" и \verb"rowIndex" для этой матрицы представлены в таблице~\ref{tab:mat-arrays}.
 | ||
| \begin{table}[ht]\small
 | ||
| 	\caption{Массивы \texttt{column}, \texttt{value} и \texttt{rowIndex}}\label{tab:mat-arrays}
 | ||
| 	\begin{tabular}{|l|c|c|c|c|c|c|c|c|c|c|c|c|} \cline{2-13}
 | ||
| 		\multicolumn{1}{c|}{} & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 \\ \cline{2-13}\hline
 | ||
| 		\verb"column" & 0 & 2 & 1 & 2 & 3 & 2 & 0 & 1 & 3 & 2 & 4 &  \\ \hline\hline
 | ||
| 		\verb"value" & 1 & 5 & 2 & 7 & 4 & 1 & 9 & 6 & 3 & 3 & 5 &  \\ \hline\hline
 | ||
| 		\verb"rowIndex" & 0 & 2 & 5 & 6 & 9 & 11 &  &  &  &  &  &  \\ \hline
 | ||
| 	\end{tabular}
 | ||
| \end{table}
 | ||
| 
 | ||
| Неизвестный вектор и вектор правой части хранятся в виде массивов размера $n$. Массив неизвестного вектора обозначают \verb"x", а массив правой части "--- \verb"rhs".
 | ||
| 
 | ||
| Рассмотрим пример алгоритма для разреженных матриц. Алгоритм решения СЛАУ, представленной нижнетреугольной матрицей \verb"a", можно реализовать двумя вложенными циклами по \verb"n":
 | ||
| \begin{Verbatim}[fontsize=\small, numbers=left]
 | ||
| for(int i = 0; i $<$ n; ++i){
 | ||
|     x[i] = rhs[i];
 | ||
|     for(int j = 0; j $<$ i; ++j)
 | ||
|         x[i] -= a[i][j] * x[j];
 | ||
|     x[i] /= a[i][i];
 | ||
| }
 | ||
| \end{Verbatim}
 | ||
| 
 | ||
| Но, если матрица \verb"a" хранится в разреженном виде, то в данном алгоритме можно проходить только по ненулевым элементам \verb"a":
 | ||
| \begin{Verbatim}[fontsize=\small, numbers=left]
 | ||
| for(int i = 0; i $<$ n; ++i){
 | ||
|     x[i] = rhs[i];
 | ||
|     for(int j = rowIndex[i]; j $<$ rowIndex[i + 1] - 1; ++j)
 | ||
|         x[i] -= value[j] * x[column[j]];
 | ||
|     x[i] /= value[rowIndex[i + 1] - 1];
 | ||
| }
 | ||
| \end{Verbatim}
 | ||
| В первом случае оценка времени работы будет $O(n^{2})$, а во втором $O(|A|)$.
 | ||
| 
 | ||
| Методы для разреженных матриц основаны на следующих главных принципах
 | ||
| 
 | ||
| 
 | ||
| % Раздел "Заключение"
 | ||
| \conclusion
 | ||
| В настоящей работы приведен пример оформления студенческой работы средствами системы \LaTeX.
 | ||
| 
 | ||
| Показано, как можно оформить документ в соответствии:
 | ||
| \begin{itemize}
 | ||
|     \item с правилами оформления курсовых и выпускных квалификационных работ, принятых в Саратовском государственном университете в 2012 году;
 | ||
|     \item с правилами оформления титульного листа отчета о прохождении практики в соответствии со стандартом.
 | ||
| \end{itemize}
 | ||
| 
 | ||
| 
 | ||
| %Библиографический список, составленный вручную, без использования BibTeX
 | ||
| %
 | ||
| %\begin{thebibliography}{99}
 | ||
| %  \bibitem{Ione} Источник 1.
 | ||
| %  \bibitem{Itwo} Источник 2
 | ||
| %\end{thebibliography}
 | ||
| 
 | ||
| %Библиографический список, составленный с помощью BibTeX
 | ||
| %
 | ||
| \bibliographystyle{gost780uv}
 | ||
| \bibliography{thesis}
 | ||
| 
 | ||
| % Окончание основного документа и начало приложений
 | ||
| % Каждая последующая секция документа будет являться приложением
 | ||
| \appendix
 | ||
| 
 | ||
| \section{Нумеруемые объекты в приложении}
 | ||
| 
 | ||
| \begin{table}[!ht]
 | ||
| 	\footnotesize
 | ||
| 	\caption{Results of pass-fail dictionary reduction with the help
 | ||
| 	of masks} \label{table-2}
 | ||
| 	\begin{tabular}{|p{1.5cm}|
 | ||
| 	                 p{1.5cm}|
 | ||
| 	                 p{1.5cm}|
 | ||
| 	                 p{1.5cm}|
 | ||
| 	                 p{1cm}|
 | ||
| 	                 p{1.5cm}|
 | ||
| 	                 p{1.5cm}|
 | ||
| 	                 p{1cm}|}
 | ||
| 		\hline \centering Circuit & Number of modelled faults & Number of test
 | ||
| 		vectors in the test set & The volume of pass-fail dictionary,
 | ||
| 		\linebreak bit & The volume of found mask & The volume of
 | ||
| 		masked dictionary, \linebreak bit & \raggedright \% of pass-fail dictionary
 | ||
| 		& CPU running time, \linebreak min
 | ||
| 		\\
 | ||
| 		\hline S298 & 177 & 322 & 56994 & 30 & 5310 & 9,32\% & 0,07\\
 | ||
| 		\hline S344 & 240 & 127 & 30480 & 29 & 6960 & 22,83\% & 0,04\\
 | ||
| 		\hline S349 & 243 & 134 & 32562 & 35 & 8505 & 26,12\% & 0,05\\
 | ||
| 		\hline S382 & 190 & 2074 & 394060 & 28 & 5320 & 1,35\% & 0,43\\
 | ||
| 		\hline S386 & 274 & 286 & 78364 & 65 & 17810 & 22,73\% & 0,26\\
 | ||
| 		\hline S400 & 194 & 2214 & 429516 & 32 & 6208 & 1,45\% & 0,99\\
 | ||
| 		\hline S444 & 191 & 2240 & 427840 & 30 & 5730 & 1,34\% & 0,98\\
 | ||
| 		\hline S526 & 138 & 2258 & 311604 & 28 & 3864 & 1,24\% & 0,61\\
 | ||
| 		\hline S641 & 345 & 209 & 72105 & 58 & 20010 & 27,75\% & 0,24\\
 | ||
| 		\hline S713 & 343 & 173 & 59339 & 58 & 19894 & 33,53\% & 0,19\\
 | ||
| 		\hline S820 & 712 & 1115 & 793880 & 147 & 104664 & 13,18\% & 9,09\\
 | ||
| 		\hline S832 & 719 & 1137 & 817503 & 151 & 108569 & 13,28\% & 9,20\\
 | ||
| 		\hline S953 & 326 & 14 & 4564 & 13 & 4238 & 92,86\% & 0,01\\
 | ||
| 		\hline S1423 & 293 & 150 & 43950 & 58 & 16994 & 38,67\% & 0,15\\
 | ||
| 		\hline S1488 & 1359 & 1170 & 1590030 & 158 & 214722 & 13,50\% & 26,69\\
 | ||
| 		\hline
 | ||
| 	\end{tabular}
 | ||
| \end{table}
 | ||
| 
 | ||
| \begin{equation}
 | ||
|   F(x)=\int\limits_a^bf(x)\,dx.
 | ||
| \end{equation}
 | ||
| 
 | ||
| 
 | ||
| \begin{figure}[!ht]
 | ||
| 	\centering
 | ||
| 	\includegraphics[width=6cm]{fig2.png}
 | ||
| 	\caption{\label{fig:f3}%
 | ||
| 	Подпись к рисунку}
 | ||
| \end{figure}
 | ||
| 
 | ||
| 
 | ||
| \begin{table}[!ht]
 | ||
| \caption{}
 | ||
| \begin{tabular}{|c|c|}
 | ||
|   \hline
 | ||
|   0 & 1\cr
 | ||
|   \hline
 | ||
|   1 & 0\cr
 | ||
|   \hline
 | ||
| \end{tabular}
 | ||
| \end{table}
 | ||
| 
 | ||
| 
 | ||
| \section{Листинг программы}\label{pril-1}
 | ||
| Код приложения \verb"task.pl".
 | ||
| 
 | ||
| \VerbatimInput[fontsize=\small, numbers=left, numbersep=2pt]{task.pl}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| \section{Многостраничная таблица}
 | ||
| 
 | ||
| \noindent
 | ||
| 
 | ||
| 
 | ||
| \end{document}
 |