Hkr32 / Python-Algorithm-Stepik

A set of solutions to problems from the course "Algorithms: Theory and Practice. Methods" from Stepik.org

Home Page:https://stepik.org/course/217/syllabus

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Python-Algorit-Stepik (Tasks solution)

Python-Algorit-Stepik (Tasks solution)

Алгоритмы для задача из курса "Алгоритмы: теория и практика. Методы" на Stepik.org/ URL курса: https://stepik.org/course/217/

PS: При нахождении каких-либо ошибок или недочётов оставляйте изменения ввиде Pull реквестов или комментируйте в Issues.

Глава 2 (Введение)

Наименование Условие Реализация
1. Небольшое число Фибоначчи Дано целое число n от 1 до 40, необходимо вычислить n число Фибоначчи fibonacci.py
2. Последняя цифра большого числа Фибоначчи Дано число 1 < n < 10^7, необходимо найти последнюю цифру n-го числа Фибоначчи. fibonacci_last_digit.py
3. Огромное число Фибоначчи по модулю Даны целые числа 1 <= n <= 10^18 и 2 <= m <= 10^5, необходимо найти остаток от деления n-го числа Фибоначчи на mm. fibonacci_remainder.py
4. Наибольший общий делитель По данным двум числам 1 <= a,b <= 2 * 10^9 найдите их наибольший общий делитель. nod.py

Глава 4 (Жадные алгоритмы)

Наименование Условие Реализация
1. Покрыть отрезки точками По данным n отрезкам необходимо найти множество точек минимального размера, для которого каждый из отрезков содержит хотя бы одну из точек. В первой строке дано число 1 < n < 100 отрезков. Каждая из последующих n строк содержит по два числа 0 <= l <= r <= 10^9, задающих начало и конец отрезка. Выведите оптимальное число mm точек и сами mm точек. Если таких множеств точек несколько, выведите любое из них. point_range.py
2. Непрерывный рюкзак Первая строка содержит количество предметов 1 <= n <= 10^3 и вместимость рюкзака 0 <= W <= 2 * 10^6. Каждая из следующих nn строк задаёт стоимость 0 <= Ci <= 2 * 10^6 и объём 0 < Wi <= 2 * 10^6 предмета (n, W, Ci, Wi — целые числа). Выведите максимальную стоимость частей предметов (от каждого предмета можно отделить любую часть, стоимость и объём при этом пропорционально уменьшатся), помещающихся в данный рюкзак, с точностью не менее трёх знаков после запятой. bag.py
3. Различные слагаемые По данному числу 1 <= n <=10^9 найдите максимальное число k, для которого nn можно представить как сумму k различных натуральных слагаемых. Выведите в первой строке число k, во второй — k слагаемых. number_terms.py
4. Кодирование Хаффмана По данной непустой строке s длины не более 10^4, состоящей из строчных букв латинского алфавита, постройте оптимальный беспрефиксный код. В первой строке выведите количество различных букв k, встречающихся в строке, и размер получившейся закодированной строки. В следующих kk строках запишите коды букв в формате "letter: code". В последней строке выведите закодированную строку. haffman_encode.py
5. Декодирование Хаффмана Восстановите строку по её коду и беспрефиксному коду символов. В первой строке входного файла заданы два целых числа k и l через пробел — количество различных букв, встречающихся в строке, и размер получившейся закодированной строки, соответственно. В следующих k строках записаны коды букв в формате "letter: code". Ни один код не является префиксом другого. Буквы могут быть перечислены в любом порядке. В качестве букв могут встречаться лишь строчные буквы латинского алфавита; каждая из этих букв встречается в строке хотя бы один раз. Наконец, в последней строке записана закодированная строка. Исходная строка и коды всех букв непусты. Заданный код таков, что закодированная строка имеет минимальный возможный размер.В первой строке выходного файла выведите строку s. Она должна состоять из строчных букв латинского алфавита. Гарантируется, что длина правильного ответа не превосходит 10^4. haffman_decode.py
6. Очередь с приоритетами Первая строка входа содержит число операций 1 <= n <= 10^5. Каждая из последующих nn строк задают операцию одного из следующих двух типов: Insert x , где 0 <= x <= 10^9 — целое число; ExtractMax Первая операция добавляет число xx в очередь с приоритетами, вторая — извлекает максимальное число и выводит его. priority_queue.py

Глава 6 (Разделяй и властвуй)

Наименование Условие Реализация
1. Двоичный поиск В первой строке даны целое число 1≤n≤10^5и массив A[1…n] из n различных натуральных чисел, не превышающих 10^9, в порядке возрастания, во второй — целое число 1≤k≤10^5 и k натуральных чисел b1....bk, не превышающих 10^9. Для каждого i от 1 до k необходимо вывести индекс 1 ≤ j ≤ n, для которого A[j] = bi, или -1, если такого j нет. binary_search.py
2. Число инверсий Первая строка содержит число 1 <= n <= 10^5, вторая — массив A[1…n], содержащий натуральные числа, не превосходящие 10^9. Необходимо посчитать число пар индексов 1 <= i < j <= n, для которыхA[i]>A[j]. (Такая пара элементов называется инверсией массива. Количество инверсий в массиве является в некотором смысле его мерой неупорядоченности: например, в упорядоченном по неубыванию массиве инверсий нет вообще, а в массиве, упорядоченном по убыванию, инверсию образуют каждые два элемента.) find_inversion(merge_sort).py
3. Точки и отрезки В первой строке задано два целых числа 1 ≤ n ≤ 50000 500001 ≤ m ≤ 50000 — количество отрезков и точек на прямой, соответственно. Следующие nn строк содержат по два целых числа a(i) и b(i) — координаты концов отрезков.Последняя строка содержит m целых чисел — координаты точек. Все координаты не превышают 10^8 по модулю. Точка считается принадлежащей отрезку, если она находится внутри него или на границе. Для каждой точки в порядке появления во вводе выведите, скольким отрезкам она принадлежит. quick_sort_and_bin_search_ranges.py
4. Сортировка подсчётом Первая строка содержит число 1 ≤ n ≤ 10^4, вторая — n натуральных чисел, не превышающих 10. Выведите упорядоченную по неубыванию последовательность этих чисел. counting_sort.py

Глава 8 (Динамическое программирование)

Наименование Условие Реализация
1. Наибольшая последовательнократная подпоследовательность Дано целое число 1≤n≤10^3 и массив A[1…n] натуральных чисел, не превосходящих 2⋅10^9 . Выведите максимальное 1≤k≤n, для которого найдётся подпоследовательность 1 ≤ i1 ​< i2 ​< … < ik ​≤ n длины k, в которой каждый элемент делится на предыдущий (формально: для всех 1 ≤ j < k, A[ij] A[i{j+1}]). largest_sequential_subsequence.py
2. Наибольшая невозрастающая подпоследовательность Дано целое число 1 ≤ n ≤ 10^5 и массив A[1…n], содержащий неотрицательные целые числа, не превосходящие 10^9. Найдите наибольшую невозрастающую подпоследовательность в A. В первой строке выведите её длину k, во второй — её индексы 1 ≤ i1 ​< i2 ​< … < ik ​≤ n (таким образом, A[i1] ≥ A[i2] ≥ … ≥ A[in]). largest_sequential_subsequence_fast.py
3. Расстояние редактирования Вычислите расстояние редактирования двух данных непустых строк длины не более 10^2 , содержащих строчные буквы латинского алфавита. editing_distance.py
4. Рюкзак Первая строка входа содержит целые числа 1 ≤ W ≤ 10 и 1 ≤ n ≤ 300 - вместимость рюкзака и число золотых слитков. Следующая строка содержит nn целых чисел 0 ≤ w1, ....., wn ≤ 10^5, задающих веса слитков. Найдите максимальный вес золота, который можно унести в рюкзаке. dynamic_bag.py
5. Лестница Даны число 1 ≤ n ≤ 10^2 ступенек лестницы и целые числа -10^4 ≤ a1 ​, … , an ​≤ 10^4, которыми помечены ступеньки. Найдите максимальную сумму, которую можно получить, идя по лестнице снизу вверх (от нулевой до nn-й ступеньки), каждый раз поднимаясь на одну или две ступеньки. steps_width.py
6. Калькулятор У вас есть примитивный калькулятор, который умеет выполнять всего три операции с текущим числом x: заменить x на 2x, 3x или x+1. По данному целому числу 1 ≤ n ≤ 10^5 определите минимальное число операций k, необходимое, чтобы получить n из 1. Выведите k и последовательность промежуточных чисел. calculate.py

Алгоритмы реализованы не обязательно самым оптимальным методом, но всегда проходят все тесты курса и удовлетворяют требованиям по памяти и времени. Для исполнения стоит использовать Python 3.x, поддержка Python 2.x не гарантируется.

About

A set of solutions to problems from the course "Algorithms: Theory and Practice. Methods" from Stepik.org

https://stepik.org/course/217/syllabus

License:The Unlicense


Languages

Language:Python 100.0%