Техники визуализации при разработке алгоритмов
Постановка задачи
Комплексный процесс проектирования, анализа, реализации, настройки, отладки и экспериментальной оценки алгоритмов можно обозначить как «разработку алгоритмов». В этом процессе алгоритмика рассматривается скорее как инженерная, чем как чисто математическая дисциплина. Реализация алгоритмов и разработка алгоритмических кодов представляют собой важнейший этап процесса передачи алгоритмических технологий, часто требующих опыта высокого уровня, более широким и разноплановым сообществам, и их эффективного внедрения в отраслях и практических приложениях.
Эксперименты позволяют измерять величину практических индикаторов, таких как константные множители конкретной реализации, узкие места при практическом применении, локальность ссылок, поведение кэша и коммуникационная сложность, которые может оказаться очень сложно предсказать теоретически. К сожалению, как и в любых других эмпирических науках, порой бывает сложно на основе экспериментов сформировать заключения общего характера по поводу алгоритмов. С этой целью некоторые исследователи предложили точные и исчерпывающие рекомендации по различным аспектам эмпирической оценки алгоритмов, сложившиеся на основе их собственного опыта работы в этой сфере (см., например, [1, 15, 16, 20]). В работе [ ] можно найти аннотированную библиографию источников по теме экспериментальной алгоритмики, охватывающую вопросы методологии, инструментов и техник.
Процесс реализации, отладки, тестирования, проектирования и экспериментального анализа алгоритмических кодов представляет собой сложную и деликатную задачу, сопряженную с множеством затруднений и ловушек. В этом контексте ни традиционные текстовые отладчики низкого уровня, ни промышленные среды разработки не особенно полезны для проектировщиков алгоритмов, которые больше заинтересованы в алгоритмических идеях высокого уровня, чем в зависящих от языка и платформы деталях фактической реализации. Среды визуализации алгоритмов предоставляют им инструменты для абстрагирования от несущественных деталей программ и конвертации высокоуровневого поведения фрагментов программного кода в статические или анимированные изображения.
В числе других инструментов, полезных для разработки алгоритмов, системы визуализации используют интерактивную графику для дополнения процессов разработки, представления и понимания компьютерных программ [27]. Обеспечивая возможность передачи значительных объемов информации в компактной и удобной для понимания человеком-наблюдателем форме, системы визуализации помогают разработчикам получать представление о работе алгоритмов, тестировать слабые места реализации и настраивать используемые эвристики для повышения практической эффективности алгоритмических кодов. Некоторые примеры подобного использования приведены [12].