Реферат
Введение 3
1 Анализ задания 4
1.1 Выбор анализатора 4
1.2 Обзор готовых решений 5
1.2.1 Google benchmark 5
1.2.2 BigO Calculator 5
1.2.3 Сравнение готовых решений 6
1.3 Требования к динамическому анализатору 8
1.4 Выводы по главе 8
2 Этапы проектирования 9
2.1 Выбор языка программирования 9
2.2 Вызов сторонней программы 10
2.3 Замер времени работы пользовательской программы 11
2.4 Аргументы пользовательской программы 11
2.5 Генерация входных аргументов 12
2.6 Сериализация и десериализация аргументов 13
2.7 Разработка алгоритма 13
2.8 Выводы по главе 15
3 Разработка анализатора 16
3.1 Организация модулей программы 16
3.2 Вызов пользовательской программы 16
3.3 Пользовательские аргументы 21
3.4 Алгоритм нахождения асимптотических временных сложностей 27
3.5 Вывод в консоль 28
3.6 Выводы по главе 30
4 Тестирование и документация 31
4.1 Модульные тесты 31
4.2 Тестирование на программах 32
4.3 Документация 34
4.4 Выводы по главе 35
Заключение 37
Список использованных источников 38
Приложение А 39
Приложение Б 41
Одна из важных вещей при проектировании и разработке программного обеспечения является выбор правильного алгоритма. Неподходящий алгоритм может в разы замедлить работоспособность программы, что негативно сказывается на её использовании.
Выбор алгоритма зависит не только от обрабатываемых данных, но и от архитектуры всего приложения. Из-за этого не всегда понятна его асимптотическая сложность. Трудности с определением асимптотических сложностей можно часто увидеть у студентов начальных курсов. Данная ситуация возникает, когда студенты работают с практическими заданиями по определению асимптотических сложностей алгоритмов. Одним из решений данной проблемы может быть специальная программа или встраиваемая библиотека, которая измеряет время выполнения пользовательской программы/кода с некоторыми входными данными, и на основании полученных результатов выводит асимптотическую сложность.
В результате проделанной работы был спроектирован и разработан динамический анализатор асимптотических временных сложностей в виде программы без интерфейса. Разработанный анализатор позволяет генерировать данные, запускать пользовательскую программу и замерять её время работы на основе конфигурационного файла. Анализатор позволяет выводить наиболее распространенные асимптотические временные сложности. Для анализатора была написана документация.
Исходный код анализатора доступен для скачивания с GitHub репозитория [11].
1. CTO 4.2—07—2014 Система менеджмента качества. Общие требования к построению, изложению и оформлению документов учебной и научной деятельности. Красноярск: СФУ, 2014. 60 с.
2. Справочное руководство LLVM IR [Электронный ресурс] — Режим доступа: https ://llvm. org/docs/LangRef.html.
1 Ознакомительная статья, посвященная FFI [Электронный ресурс] — Режим доступа: http: //wiki.c2 .com/?F oreignF unctionInterface.
2 Домашняя страница Google Benchmark [Электронный ресурс] — Режим доступа: https: //opensource. google/proj ects/benchmark.
3 Репозиторий BigO Calculator [Электронный ресурс] — Режим доступа: https://github.com/Alfex4936/python-bigO-calculator
3. Официальный сайт языка программирования Rust [Электронный ресурс] — Режим доступа: https://www.rust-lang.org/
4. Новость об образовании Rust Foundation [Электронный ресурс] — Режим доступа: https ://habr. com/ru/news/t/541600/
5. Описание структуры Command [Электронный ресурс] — Режим доступа: https://doc.rust-lang.org/std/process/struct.Command.html
6. Описание счетчика Instant [Электронный ресурс] — Режим доступа: https: //doc.rust-lang.org/std/time/struct.Instant.html
7. Официальный сайт serde [Электронный ресурс] — Режим доступа: https://serde.rs/
8. Репозиторий анализатора [Электронный ресурс] — Режим доступа: https: //github .com/Naymoll/time analyzer. git
9. Документация стандартной библиотеки Rust [Электронный ресурс] — Режим доступа: https://doc.rust-lang.org/std/
10. Репозиторий с описанием алгоритма и примером программы на C++
[Электронный ресурс] — Режим доступа:
https://github.com/ismaelJimenez/cpp.leastsq
11. Документация библиотеки chrono [Электронный ресурс] — Режим доступа: https: //docs. rs/chrono/0.4.19/chrono/
12. Документация библиотеки rand [Электронный ресурс] — Режим доступа: https: //docs.rs/rand/0.8.3/rand/
13. Метод наименьших квадратов [Электронный ресурс] — Режим доступа: https://web.williams.edu/Mathematics/sjmiller/public html/BrownClasses/54/h andouts/MethodLeastSquares.pdf