Чем вы пользуетесь для визуализации наборов данных, при решении алгоритмических задач?
Публичный постОколо месяца назад я решил подтянуть свои навыки по алгоритмическим задачкам и начал регулярно заниматься на LeetCode по роадмапу.
Первый шаг к решению задачи - это её понимание. Чтобы понять задачу, лучше нарисовать её и решить вручную. Только, чаще всего, приходится рисовать несколько наборов данных для проблемы. Это помогает посмотреть как придуманный алгоритм работает в других случаях и найти какие-то пограничные случаи ломающие логику работы.
Сначала я это делал на листочке, потом перешёл в рисовалку на компьютере. Но я чувствую, что мне не хватает фичей и остается много рутины в процессе изображения данных. В итоге я хотел бы найти софт, который даёт возможность визуализировать и менять набор данных на ходу.
Например, я вписываю одномерный массив чисел. Выбираю нужный вид, например столбики или точки на оси. Вижу визуализированное представление. Нажимаю кнопку отсортировать числа, вижу отсортированный массив.
Нашёл интересные рекомендации в интернете:
- Python Tutor - позволяет визуализировать всё что происходит в коде для Python, JS, C, C++. В целом выглядит интересно, но нету моего C#, и достаточно ограниченные возможности по визуализации.
- Набор анимаций по различным алгоритмам - небольшая база интерактивных анимаций по различным вариантам алгоритмов. Позволяет увидеть что происходит с данными в различных структурах. Даёт хорошую базу по визуализации, но мало кастомизации
- Excel. Пока писал этот вопрос в голову пришла идея попробовать Excel для этой проблемы. Из-за большого количества диаграмм и прямого доступа к данным звучит как неплохой вариант. Но всё равно интересно, если что-то лучше, чем пользуются обитатели клуба.
Листок и ручка. Или меловая доска. Или маркерная доска.
Чтобы сделать хоть сколько-то разумную визуализацию алгоритма, мне кажется, надо уже понимать задачу и решение. Чтобы знать, какие крутилки выставить, что показывать, что скрывать. И сделать хороший визуализатор — отдельная задача, имеющая мало отношения к пониманию задачи. Больше про UX, что ли.
Например, в алгоритме Дейкстры можно визуализировать честно сам алгоритм, а можно визуализировать его похожесть с обходом в глубину и идти по всем рёбрам одновременно. И вот второе даст куда больше понимания.
А то что рутина — так в этом и смысл. Посмотреть на задачу с десятка-сотни сторон, вдумчиво, неторопливо, изучая каждый пример. Чтобы интуицию выработать.
Захотел я как-то визуализировать работу алгоритма Дейкстры. Но не просто, а на реальных данных - построение маршрута по Калининграду:
Взял карту. Проставил на ней ручками over 700 точек. Нанял человека, который проставил этим точкам координаты. После написал примерно 380 строк кода для того, чтобы система сама могла ставить точки на карте в соответствии с координатами и работой алгоритма.
В целом каждый алгоритм приходится разбирать на бумаге. И чем сложнее, тем больше нужно листов. Какого-то универсального инструмента нет.
Разве что вот visualgo периодически помогает.
https://diagrams.github.io/
Это не готовое решение для визуализации данных, а просто конструктор для создания диаграмм, но я им пользуюсь постоянно, когда нужно нарисовать что-то из входных данных.
У меня есть репозиторий, в который я закидываю сложные схемы, но в последнее время забываю: https://github.com/d86leader/diagrams-collection
А ещё куча примеров откуда потырить код есть здесь: https://diagrams.github.io/gallery.html
Для конкретной задачи - алгоритмы для литкода хорошо подходят уже готовые визуализации из книжек по алгоритмам.
Если какой-то алгоритм приходится выдумывать на ходу, то пользоваться надо теми инструментами, которые будут на собесе, вроде ручки и бумаги или простенького текстового редактора, иначе мозг заклинит на воображении, как бы ты решал это в своем любимом хитром инструменте визуализации, которого сейчас нет.
PowerBI. Удивительный инстумент, даже не подумаешь, что сделали его в современном MS. Ну а если не сработает, то ELK. Это уже из категоии супер-тяжеловесов.
Хотя, как мне сказал один раз директор очень крупной компании "молодой человек, никогда недооценивайте количесво бизнесов, которые работают на Excel"