Анализ эффективности программ на Python
- Неэффективность высокоуровневых операторов Python
- Использование итераций вместо циклов
- Списки вместо массивов — логарифмическая сложность вместо константы
Использование «настоящих» массивов из проекта NumPy
Анализ неэффективности реализации кодировщика в алгоритме преобразованиея Барроуза — Уилера:
Генератор входных данных: BurrowsWheeler_gen.py
Несколько вариантов алгоритма на Python: BurrowsWheeler.py
Алгоритм на C: BurrowsWheeler.c
Домашнее задание
Просто олимпиадные задачки.
(Письмо): По мнению Петра, сообщение является красивым, если любая прописная буква стоит левее любой строчной. Иными словами это правило описывает строки, в которых сначала идет ноль или более прописных букв, а затем — ноль или более строчных. Для приведения письма в красивый вид Петр может замазать некоторую букву и записать эту же букву в этом же месте в противоположном регистре (строчную букву заменить на прописную и наоборот). Петр заинтересовался вопросом — какое наименьшее число действий необходимо, чтобы привести письмо в красивый вид. Одним действием будет считать смену регистра буквы в письме. Никаких других действий Петр совершать не может.
Входные данные. В единственной строке входных данных содержится непустая строка из строчных и прописных латинских букв. Длина строки не превосходит 105.
Выходные данные. Выведите единственное число — наименьшее число действий, необходимое, чтобы письмо стало красивым.
(Задача про матанализ): Будем считать, что студенты группы пронумерованы от 1 до n, а у каждого студента i (1 ≤ i ≤ n) есть его лучший друг p[i] (1 ≤ p[i] ≤ n). Так получилось, что каждый из студентов является лучшим другом ровно одного студента, иными словами все p[i] — различны. Возможно, в группе присутствуют такие «оригиналы», для которых i = p[i].
- В первый день подготовки каждый студент учит матанализ по своим лекциям,
- утром каждого следующего дня каждый студент передает тетрадку с лекциями своему лучшему другу, но получает тетрадку от студента, чьим лучшим другом он является.
- a1, a2, ..., an, где ai обозначает студента, у кого в третий день подготовки находится тетрадь i-го студента;
- b1, b2, ..., bn, где bi обозначает студента, у кого в четвертый день подготовки находится тетрадь i-го студента.
Входные данные. В первой строке записано целое число n (1 ≤ n ≤ 105) — количество студентов в группе. Вторая строка содержит последовательность различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ n). Третья строка последовательность различных целых чисел b1, b2, ..., bn (1 ≤ bi ≤ n).
Выходные данные. Выведите последовательность n различных целых p[1], p[2], ..., p[n] (1 ≤ p[i] ≤ n). Гарантируется, что решение существует и оно единственно.
Условные обозначения
— тема по Linux
— необязательная тема
— теоретическое задание
— тема для самостоятельного изучения