5 Техник оптимизации кода для ускорения программ

5 техник оптимизации кода для повышения скорости работы программы

Сделайте свой код более эффективным и профессиональным с помощью этих языко-независимых методов

Фото от Shubham Dhage на Unsplash

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

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

Извлечение инвариантов циклов

Рассмотрим следующий код на Python, который проверяет список строк на соответствие регулярному выражению, чтобы найти все совпадения:

import regex as re# Получить некоторые строки в качестве вводаstrings = get_strings()# Список для хранения всех совпаденийmatches = []# Перебор входных строкfor string in strings:      # Компиляция регулярного выражения  rex = re.compile(r'[a-z]+')    # Проверка строки на соответствие регулярному выражению  matches = rex.findall(string)    # Наконец, добавляем совпадения в список  matches.extend(matches)

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

Выражение `rex = re.compile(r’[a-z]+’)` выполняется с постоянным вводом: строкой регулярного выражения. Для каждой итерации цикла это выражение делает одно и то же независимо от ввода цикла. Если мы извлечем это инвариантное выражение и выполним его один раз перед циклом, код все еще будет иметь ту же общую функциональность, при этом сэкономив некоторое количество тактов центрального процессора.

import regex as re# Получить некоторые строки в качестве вводаstrings = get_strings()# Список для хранения всех совпаденийmatches = []# Компилируем регулярное выражение только один раз перед цикломrex = re.compile(r'[a-z]+')# Перебор входных строкfor string in strings:    # Проверка строки на соответствие регулярному выражению  matches = rex.findall(string)    # Наконец, добавляем совпадения в список  matches.extend(matches)