RAM-модель
Оглавление
Модель вычислений
В прошлом разделе мы говорили о том, что время работы алгоритма зависит от размера входных данных, ввели $O$-нотацию. Однако, чтобы формализовать это понятие, нам нужно ввести модель вычислений. Модель вычислений определяет набор операций, который мы можем выполнять за константное время.
Интуиция
Интуитивно мы будем ожидать от модели следующих свойств:
- Ввод-вывод данных занимает константное время
- Арифметические операции выполняются за константное время
- Обращение к произвольному элементу массива выполняется за константное время
RAM-модель
- RAM-модель может совершать арифметические и битовые операции, операции присваивания с числами длины $O(C)$ за константное время. Здесь $C$ - некоторая заранее заданная константа.
- RAM-модель может обращаться к произвольному элементу массива за константное время.
- RAM-модель может совершать ветвления и циклы за константное время.
- RAM-модель может выделять память под массив любой длины за константное время.
Проблемы RAM-модели
- RAM-модель не учитывает кэши процессора, которые могут сильно влиять на время работы алгоритма.
- RAM-модель не может учесть многоядерность процессора.
- Процессоры обрабатывают разные операции за разное время, например деление дольше умножения, которое дольше сложения.
- Современные процессоры поддерживают разные дополнительные инструкции, которые могут работать за 1 такт, однако в RAM-модели они считаются не константными, например операция подсчета количества бит в числе.
И хотя RAM-модель не учитывает все эти нюансы, она является удобным инструментом для оценки времени работы олимпиадных алгоритмов.