Алгоритмы и структуры данных

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

Как решать задачи

Вы можете писать код на любом удобном вам языке программирования. Чтобы вы могли проверить, что решили задачу правильно, я буду выдавать к ним тесты. Задачи должны предполагать, что получают данные из стандартного ввода, т.е. клавиатуры, а печатают результат в консоль. Тесты распространяются в виде набора файлов с расширениями, соответственно, in и out. Для проверки решения необходимо запускать программу, перенаправляя стандартный ввод и вывод, чтобы не надо было по-настоящему вводить с клавиатуры. При запуске из командной строки это делается следующим образом:

program.exe <test.in >program.out

При запуске из среды разработки нужно настроить параметры запуска и указать там перенаправление ввода и вывода, это делается по-разному в зависимости от среды разработки.

Для проверки правильности ответа нужно сравнить ваш вывод с правильным. Из командной строки это делается следующим образом:

diff program.out test.out

Добавьте ключ --strip-trailing-cr, чтобы игнорировать различие в символах перевода строки:

diff --strip-trailing-cr program.out test.out

Есть графические программы для сравнения текстовых файлов, например, Meld. Но, думаю, ваша среда разработки тоже умеет сравнивать файлы. В средах от JetBrains (IntelliJ IDEA, PyCharm) вы можете выбрать файлы и нажать Ctrl + D.

Задания

  1. Двоичный поиск и двоичный поиск по ответу
  2. Двоичные деревья