Разработка в среде C# программной реализации алгоритма выделения структурных особенностей | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 30 ноября, печатный экземпляр отправим 4 декабря.

Опубликовать статью в журнале

Библиографическое описание:

Разработка в среде C# программной реализации алгоритма выделения структурных особенностей / Д. Л. Павлов, О. А. Кащеева, А. А. Иванова [и др.]. — Текст : непосредственный // Молодой ученый. — 2020. — № 27 (317). — С. 54-59. — URL: https://moluch.ru/archive/317/72298/ (дата обращения: 16.11.2024).



В работе описана реализация алгоритма выделения структурных особенностей матриц на языке C#. Представлена архитектура программы. Были проведены вычислительные эксперименты, результаты которых продемонстрированы в виде графиков.

Ключевые слова: разработка приложения, реализация алгоритма, структурные особенности, C#, архитектура приложения, анализ работы программы.

Структурный метод интегрирования систем m уравнений общего вида [1], [2].

предполагает, что существует преобразование, приводящее систему (1) к виду (2)-(4)

Группы (3), (4) структурно тождественны. Каждое уравнение одной из этих групп занимает определенное место в последовательности уравнений всей группы. Его правая часть не зависит от искомых функций, поведение которых описывается этим и всеми последующими уравнениями этой же группы. Группа уравнений (1) называется <<общей>> и включает в себя все уравнения, не имеющие структурных особенностей, описанных выше.

Алгоритм выделения структурных особенностей предполагает, что существует преобразование, приводящее случайную структурную матрицу к виду блочной нуль-диагональной матрицы. Задача состоит в том, чтобы найти такую перестановку π=(π(1), π(2), …, π(m)), при которой эффект от структурного подхода будет максимизирован.

В данной работе будет рассматриваться программная реализация алгоритма, выделяющего данные структурные особенности, а также анализ влияния параметров исходной структурной матрицы на быстродействие исполняемого кода.

Архитектура

Следующим шагом является разработка архитектуры программы. В работе активно используются списки (List), так как изначально неизвестен размер множеств и списки позволяют эффективно перемещаться по уровням дерева перебора. В качестве стандартов наименования была принята статья [3].

Логика работы алгоритма описана в исполняемом классе Program. Поля, начиная с omega, представлены в виде массива из двух элементов, каждый элемент массива отвечает за свое дерево перебора. Для удобства, каждый пункт алгоритма вынесен в отдельную функцию, названия которых совпадают с наименованием шага алгоритма. Основные поля и методы приведены в Листинге 0.

Листинг 0 . Класс Program

public class Program

{

public static int n; //размерность матрицы

public static List weights; //весовые коэффициенты

public static int [] transition; //перестановка

public static int taskType; //тип задачи

private static Matrix A; //исходная структурная матрица

private static int [,] B; //преобразованная структурная матрица

private static List > [] omega;//множествa Омега

private static OrderedMultitude recordMultitude;//рекордное можество

private static OrderedMultitude orderedMultitude;//упорядоченное множество

private static List > [] supportingMultitudeF;//первое вспомогательное множество

private static List > [] supportingMultitudeQ;//второе вспомогательное множество

private static int [] searchTreeLevel; //уровни дерева перебора

private static CentralElement centralElement;//центральный элемент

private static PossibleExtension knotElement;//узловой элемент

private static List > [] quantityOfPossibleExtension;//Множество возможных продолжений для первого множества

public static void Main(string [] args){…}

static void FirstStep(){…}

private static void SecondStep(){…}

private static void SecondStepA(){…}

private static void SecondStepA1(){…}

private static void SecondStepA1b(){…}

private static void SecondStepA1c(){…}

private static void SecondStepB(){…}

private static void ThirdStep(){…}//перебор для задачи 1 начинается с этого пункта

private static void FourthStep(){…}

private static void FourthStepA(){…}

private static void FourthStepA0(){…}

private static void FourthStepA1a(){…}

private static void FourthStepA1b(){…}

private static void FourthStepA1c(){…}

private static void FourthStepB(){…}

private static void FourthStepB1(){…}

private static void FourthStepB1a(){…}

private static void FourthStepB2(){…}

private static void FifthStep(){…}

private static void SixthStep(){…}

private static void OrderFirstMultitude(){…}

private static void OrderSecondMultitude(){…}

}

Сущностью, на основе которой строится работа с входными и выходными данными, является класс Matrix. В данном классе существуют методы, определяющие подготовительную работу алгоритма и выполняющие перестановку матрицы. Объекты данного класса необходимы для работы со структурными матрицами. Поля и методы класса Matrix приведены в листинге 1.

Листинг 1. Класс Matrix

public class Matrix

{

public static int rows; //число строк

public static int cols; //число столбцов

public static int [,] A; //структурная матрица

public Matrix(int row, int column){…}// конструктор

public int this [int row, int column]{…}//индексатор

public void Fill(){…}//Заполнение матрицы из файла

public int [,] Displacement(int [] pi) //применение перестановки, pi- вектор перестановки

private static List > FindE(){…}//горизонтальное структурное множество

private static List > FindH(){…}//вертикальное структурное множество

public List > FindOmegaZero(){…} //омега (1,0)

public static D FindD(List omega){…} //на вход омега, исходя из него строятся множества

public void Print(){…} //печать матрицы в консоль

}

Следуя принципу ООП — декомпозиции [4], были созданы структуры, отвечающие за основные элементы в работе алгоритма, такие как:

− множество D (D);

− элемент множества возможных продолжений (PossibleExtension);

− центральный элемент (CentralElement);

− весовой коэффициент (WeightCoefficient);

− упорядоченное множество (OrderedMultitude).

В каждой структуре существует конструктор. В большинстве структур представлены методы, связанные с поиском нужных элементов. Структуры и их методы представлены в Листинге 2.

Листинг 2 . Класс Matrix

public struct D

{

public List i;

public List j;

public List > index;

public D(List _i, List _j, List > _index){…}

}

public struct PossibleExtension

{

public int i;

public int j;

public int weight;

public List elements;

public PossibleExtension(int _i, int _j, int _weight, List _elements) {…}

public static List FindPossibleExtensions(List omega){…}

public static PossibleExtension FindKnot(List possibleExtensions){…}

}

public struct CentralElement

{

public int index;

public int weight;

public CentralElement(int _index, int _weight){…}

public static CentralElement FindCentral(List newOmega){…}

}

public struct WeightCoefficient

{

public int index;

public int weight;

public WeightCoefficient(int _index, int _weight){…}

}

public struct OrderedMultitude

{

public int weight;

public List elements;

public OrderedMultitude(int _weight, List _elements){…}

}

Анализ результатов работы.

После завершения тестирования алгоритма был проведен анализ работы программы на задаче 2. Анализ производился при помощи встроенных инструментов Visual Studio. Затраты ресурсов памяти проверялись при помощи Visual Studio Diagnostic Tools [5], а времени при помощи System.Diagnostics.Stopwatch [6].

В ходе анализа работы программы была выявлена зависимость ресурсов от размерности при фиксированной плотности и от плотности при фиксированной размерности.

Для тестирования зависимости параметров работы программы от плотности были случайным образом сгенерированы по 10 случайных структурных матриц размерности 10×10 с фиксированной плотностью и брались средние результаты затрат памяти и времени. Таким образом была получена данная зависимость.

Для демонстрации результатов была выбрана логарифмическая шкала, из-за удобства отображения в ней больших диапазонов значений величин. Для этого время (t) переведено в мс., а память (w) в Мб, затем данные значения прологарифмированы по основанию 2. Результаты представлены на рис. (1), (2).

Стоит отметить, что самой ресурсозатратной оказалась плотность 0,2. Это связано с тем, что при такой плотности граф является слабосвязным, работа алгоритма не завершается за один проход алгоритма и существует большое количество перспективных перестановок.

Зависимость времени от плотности

Рис. 1. Зависимость времени от плотности

Зависимость памяти от плотности

Рис. 2. Зависимость памяти от плотности

При тестировании зависимости параметров работы программы от размерности, при фиксированной плотности были сгенерированы матрицы размерностями от 10 до 25 включительно. Данный процесс был повторен для плотностей с 0,35 до 0,65 включительно с шагом 0,5. В связи с тем, что разброс результатов оказался невелик, результаты представлены без преобразований, время (t) в секундах и память (w) в Мб. Результаты работы продемонстрированы на рис. (3), (4).

Зависимость времени от размерности

Рис. 3. Зависимость времени от размерности

Зависимость памяти от размерности

Рис. 4. Зависимость памяти от размерности

Литература:

  1. Олемской И. В. Явный метод типа Рунге — Кутты пятого порядка // ЖВТ. 2005. № 2.
  2. Олемской И. В. Модификация алгоритма выделения структурных особенностей // Вестник СПбГУ. Серия 10. Прикладная математика. Информатика. Процессы управления. 2006. № 2.
  3. C#: требования и рекомендации по написанию кода. https://habr\\.com/ru/post/26077/
  4. Luca Cardelli, Peter Wegner. On Understanding Types, Data Abstraction, and Polymorphism // ACM Computing Surveys. — New York, USA: ACM, 1985. — Vol. 17, n. 4 — pp 471–522 — ISSN 0360–0300.
  5. Measure memory usage in Visual Studio. https://docs.microsoft.com/en-us/visualstudio/profiling/memory-usage?view=vs-2019
  6. Class Stopwatch. https://docs.microsoft.com/en-us/dotnet/api/system\\.diagnostics.stopwatch?view=netcore-3.1
Основные термины (генерируются автоматически): исходная структурная матрица.


Ключевые слова

C#, структурные особенности, разработка приложения, реализация алгоритма, архитектура приложения, анализ работы программы

Похожие статьи

Многопоточность в языке Swift

В статье рассмотрим основной способ выполнять код асинхронно, который используется в iOS приложениях. Подробно разобран основной функционал Grand Central Dispatch (GCD) и сценарии, в которых можно реализовать многопоточность с его помощью.

Реализация алгоритма поиска ближайших объектов с помощью K-D tree

В данной статье разработан алгоритм поиска ближайших объектов с помощью вспомогательной структуры, основанной на K-D tree, а также рассматривается приложение на языке Java, реализующее данный алгоритм.

Разработка приложения для решения задачи о максимальном потоке

В статье представлена процесс разработки пользовательского приложения, решающего задачу поиска максимального потока алгоритмами Форда-Фалкерсона и Эдмонса-Карпа.

Разработка программного модуля защиты информации методом стеганографии

В данной статье рассматривается процесс разработки программного модуля для шифрования текстовой информации в реальном изображении, с помощью языка программирования Rust, описываются основные аспекты стеганографии, в частности метод LSB.

Анализ эффективности алгоритмов сортировки и вcтроенных реализаций на примере языка программирования Java

В данной статье показана значительная роль проведения анализа работы алгоритмов сортировки на массивах данных различной размерности. Рассмотрены актуальные алгоритмы и стандартные реализации сортировки в языке программирования Java.

Интересные возможности программы Excel

В данной работе рассмотрены базовые принципы работы с программой Microsoft Excel. Исследуется применение возможностей программы Microsoft Excel для создания электронных таблиц, диаграмм и программных макросов в практических задачах.

Разработка систем рекомендаций на основе Big Data

В данной статье рассмотрены основные подходы к разработке систем рекомендаций на основе Big Data, включая коллаборативную фильтрацию, контентную фильтрацию и гибридные методы, а также представлены примеры реализации алгоритмов на языке программирован...

Анализ средств для реализации нейронных сетей на языке программирования Java

В данной статье рассматриваются основные требования к реализации нейронных сетей, описываются возможности языка Java по созданию компонентов нейронных сетей. Так же приводится анализ и сравнение уже существующих решений для данного языка и производит...

Моделирование квантового алгоритма Гровера для поиска схемотехнического решения в прикладной программе MATLAB

Целью статьи является ознакомление с разработанной имитационной моделью алгоритма Гровера в прикладной программе MATLAB, а также с результатами его работы, которые представлены в виде вычислений и графиков. Коротко описаны основы квантовых вычислений...

Разработка системы автоматизированного тестирования

В ходе данного исследования был рассмотрен процесс разработки системы автоматизированного тестирования. Для разработки приложения нами использовалась среда Microsoft Visual Studio 2010 Ultimate.

Похожие статьи

Многопоточность в языке Swift

В статье рассмотрим основной способ выполнять код асинхронно, который используется в iOS приложениях. Подробно разобран основной функционал Grand Central Dispatch (GCD) и сценарии, в которых можно реализовать многопоточность с его помощью.

Реализация алгоритма поиска ближайших объектов с помощью K-D tree

В данной статье разработан алгоритм поиска ближайших объектов с помощью вспомогательной структуры, основанной на K-D tree, а также рассматривается приложение на языке Java, реализующее данный алгоритм.

Разработка приложения для решения задачи о максимальном потоке

В статье представлена процесс разработки пользовательского приложения, решающего задачу поиска максимального потока алгоритмами Форда-Фалкерсона и Эдмонса-Карпа.

Разработка программного модуля защиты информации методом стеганографии

В данной статье рассматривается процесс разработки программного модуля для шифрования текстовой информации в реальном изображении, с помощью языка программирования Rust, описываются основные аспекты стеганографии, в частности метод LSB.

Анализ эффективности алгоритмов сортировки и вcтроенных реализаций на примере языка программирования Java

В данной статье показана значительная роль проведения анализа работы алгоритмов сортировки на массивах данных различной размерности. Рассмотрены актуальные алгоритмы и стандартные реализации сортировки в языке программирования Java.

Интересные возможности программы Excel

В данной работе рассмотрены базовые принципы работы с программой Microsoft Excel. Исследуется применение возможностей программы Microsoft Excel для создания электронных таблиц, диаграмм и программных макросов в практических задачах.

Разработка систем рекомендаций на основе Big Data

В данной статье рассмотрены основные подходы к разработке систем рекомендаций на основе Big Data, включая коллаборативную фильтрацию, контентную фильтрацию и гибридные методы, а также представлены примеры реализации алгоритмов на языке программирован...

Анализ средств для реализации нейронных сетей на языке программирования Java

В данной статье рассматриваются основные требования к реализации нейронных сетей, описываются возможности языка Java по созданию компонентов нейронных сетей. Так же приводится анализ и сравнение уже существующих решений для данного языка и производит...

Моделирование квантового алгоритма Гровера для поиска схемотехнического решения в прикладной программе MATLAB

Целью статьи является ознакомление с разработанной имитационной моделью алгоритма Гровера в прикладной программе MATLAB, а также с результатами его работы, которые представлены в виде вычислений и графиков. Коротко описаны основы квантовых вычислений...

Разработка системы автоматизированного тестирования

В ходе данного исследования был рассмотрен процесс разработки системы автоматизированного тестирования. Для разработки приложения нами использовалась среда Microsoft Visual Studio 2010 Ultimate.

Задать вопрос