Изучение двух распространенных способов повышения эффективности приложений

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

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

Тем не менее, работающее программное обеспечение не всегда является конечной точкой, в основном в отношении его эффективности.

Еще не так давно я мог считать все созданное мной программное обеспечение завершенным, когда оно работало должным образом, после тестирования и отладки. Но совсем недавно я понял, что время, затрачиваемое на выполнение программы, является ключевым аспектом всей программной базы.

Чтобы максимизировать эффективность программного обеспечения, разработано множество общих шаблонов, повышающих его надежность и улучшающих навыки разработчика.

Давайте посмотрим на theafm.

Что такое решение проблем?

Для разработчика программного обеспечения решение проблем — это бесконечный навык, который нужно оттачивать.

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

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

Он подходит для многих задач, например, для ремонта компьютера, решения математического уравнения и игры в шахматы.

Когда дело доходит до информатики, в решении проблем широко используются два общих шаблона решения. И, как будто этого недостаточно, они также являются шаблонами, которые в значительной степени требуются на собеседованиях в сфере ИТ.

В частности, это «шаблон двух указателей» и «шаблон счетчика частоты».

Без дальнейших церемоний, давайте перейдем к их открытию.

Шаблон двух указателей

Представьте это.

Вас попросили перевернуть строку. Обычно для этого нужно использовать до двух вложенных циклов. Это отлично сработало бы, хотя временная сложность программного обеспечения взлетела бы до O (n²), квадратичной сложности.

К счастью, есть эффективный обходной путь, чтобы предотвратить это с помощью шаблона Two Pointers.

Основная идея следующая:

  • Используйте два разных индекса в одном цикле. Первый начинается с начала строки, а второй — с последнего элемента.
  • Хотя второй индекс больше первого, я могу пойти дальше, поменяв местами внутренние символы.

С помощью этого шаблона вы сможете уменьшить временную сложность с O(n²) до O(nlogn). Следующий фрагмент демонстрирует этот шаблон на языке C++.

Счетчик частоты

Сколько раз вам приходилось считать что-то внутри АТД? Многие, я полагаю.

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

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

Например, если нам нужно проверить, все ли элементы, хранящиеся в массиве, также содержатся в другом массиве, одним из наиболее популярных решений является подход через два вложенных цикла и вывод true или false в зависимости от исследования.

Однако, введя карту, мы можем резко снизить временную сложность до O(1).

Давайте посмотрим, как это реализовать.

Мы рассмотрели два наиболее распространенных шаблона кодирования, чтобы повысить качество и эффективность программного обеспечения, которое мы создаем.

Подводя итог, помните, что иногда… меньше значит больше, особенно когда дело касается кода.

Большое спасибо за чтение.

Want to Connect?
If you want to reach me to discuss a project or simply chat, here’s my GitHub link.