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}
|