Для грамотной разработки программного кода нужно не только хорошо владеть языком программирования, но и предельно ясно представлять себе как эффективно организовывать хранение и обработку данных в процессе работы программы. Именно для этого и нужно знать основные структуры данных, понимать как они работают, какие у них преимущества и недостатки, чтобы грамотно выбирать лучшие способы представления данных при решении каждой конкретной задачи. Этот курс - очередная важная ступенька вашего становления, как грамотного IT-специалиста в области программирования. После того, как вы изучили базовые возможности языка, его объектно-ориентированную составляющую, следующим логичным шагом является изучение типовых, часто используемых структур данных, знание их сильных и слабых сторон для эффективного использования в своих проектах. Любая более-менее состоятельная программа использует хотя бы одну простейшую структуру данных, например, массивы. А в более сложных проектах всегда присутствуют и более сложные вроде связных списков, хэш-таблиц, множеств, ассоциативных массивов и так далее. Все это нужно знать, чтобы ваши программы получались максимально быстрыми и при этом экономно расходовали память устройства. Мало того, почти всегда на собеседованиях при приеме на работу на должность программиста задаются вопросы по структурам данных и способах оценки сложности алгоритмов, как правило, с позиции "О большого" (Big O). Как раз все эти важные темы входят в данный курс. Его прохождение позволит вам не только увереннее составлять алгоритмы, но и успешнее проходить собеседования при будущем трудоустройстве. Чему вы научитесь: Узнаете как правильно определять вычислительную сложность типовых алгоритмов (показатель О большое - Big O). Познакомитесь со статическими и динамическими массивами. Подробно изучите одно- и двусвязные списки, а также их использование для построения очередей и стеков. Увидите, что из себя представляют бинарные деревья и как они применяются для описания упорядоченных множеств. Познакомитесь с префиксными (нагруженными) деревьями и их применением для построения ассоциативных массивов. Изучите основы хэш-таблиц, способы построения хэш-функций и методами устранения коллизий. Для кого этот курс: Задания этого курса ориентированы на язык Python и С++. Поэтому его имеет смысл проходить после изучения базы и ООП этих языков: "Добрый, добрый Python" "Добрый, добрый Python ООП" "Добрый, добрый C/C++" "Добрый, добрый ООП C++" Идеально, если вы знаете оба языка программирования: и Python и C++. Но, можно его проходить, зная только один из них, или даже какой-либо другой. Правда тогда некоторые практические задания для вас будут непонятными. Но, тем не менее, вы, все равно, в полном объеме сможете изучить сами структуры данных. А это главная цель данного курса. Спойлер: Программа курса: 1. Учимся оценивать вычислительную сложность алгоритмов Введение в Big O Big O логарифмической и факториальной сложности 2. Простейшие структуры данных Статический массив Статический массив на С++ Динамический массив Динамический массив на Python Динамический массив на С++ 3. Связные списки Односвязный список Односвязный список на С++ Двусвязный список Двусвязный список на С++ с нуля Класс list двусвязного списка библиотеки STL языка С++ 4. Очереди и стек Очереди типов FIFO и LIFO Очередь collections.deque на Python Класс deque очереди библиотеки STL языка C++ Стек (stack) Реализация стека на Python и C++ 5. Деревья и множества Бинарные деревья Способы обхода и удаления вершин бинарного дерева Бинарное дерево на Python Множества (set). Операции над множествами Множества set и multiset в C++ Контейнер map библиотеки STL в C++ Префиксное (нагруженное, Trie) дерево. Ассоциативные массивы 6. Хэш-таблицы Хэш-таблицы Универсальное хэширование Метод открытой адресации. Двойное хэширование Хэш-таблицы в языках Python и С++