Data Science: Алгоритмы и Структуры данных
前往频道在 Telegram
Мы не претендуем на оригинальность контента, мы лишь собираем материал из открытых источников. Ссылка: @Portal_v_IT Сотрудничество: @oleginc Канал на бирже: https://telega.in/c/structuredata
显示更多7 575
订阅者
-324 小时
-197 天
-6630 天
帖子存档
Структура данных - хеш-таблица
Хеш-таблица - структура данных, в которой данные хранятся ассоциативно. По факту, данные хранятся в формате массива, где каждое значение имеет свое уникальное значение индекса. Доступ к данным становится очень быстрым, если мы знаем этот индекс, а не идем перебором.
Таким образом данная структура данных примечательна тем, что операция вставки и поиска - выполняются очень быстро и независимо от размера данных.
Хеширование - метод для преобразования диапазона значений ключа в диапазон индекса массива. Внутри используется оператор по модулю, чтобы получить как раз таки этот диапазон значений ключа.
Если ячейка индекса уже занята, то мы будем искать следующее пустое место в массиве, просматривая следующую ячейку, пока не найдем пустую. Данный способ называется линейным зондированием
14 сентября начнется наш подготовительный курс по Python 📚 🐍📚
Даём только мясную и прикладную информацию. Никакой воды и траты твоего времени.
По окончании 14-дневного курса ты уже владеешь базовым знанием языка и даже напишешь собственную программу!
Прямо сейчас переходи по ссылке и бронируй место!
⚡️ Теперь не нужно платить за обучение, оно стало совершенно бесплатным!
Все лучшие курсы от Skillbox, Яндекс.Практикум, Udemy и других топовых IT школ сливают на канал CourseHunter. Если вы не нашли нужный вам курс, смело пишите в предложку и вскоре его выложат.
Специально для наших подписчиков будет бонус - архив с топ-10 курсов по мнению админа в личных сообщениях после подписки.
Решение задачи: проверка балансировки скобок в выражении на JS/Python/C++
Задача: проверка балансировки скобок в выражении
Очень типичная задача на использование Stack как структуры данных. Суть такова, необходимо проверить что в выданном вами выражении - правильный порядок скобок разного типа (“{“, “}”, “(“, “)”, ““, “”)
К примеру:
1. exp = "(){}({})"
result = true
2. exp = "(){)"
result = false
Алгоритм:
1. Объявить стек символов S
2. Проходимся по всей строке от начала до конца:
Если текущий символ является начальной скобкой, если да поместить в стек
Если текущий символ закрывающая скобка (обратный вариант), то достаем из стека и сверяем совпадают ли по типу данные скобки (естественно предварительно надо иметь либо object(JS, TS), либо dictionary(python) с соответствием)
Если скобки не совпадают - соответствено выражение не сбалансировано и можно кидать сразу False
3. После полного обхода, если в стеке еще осталась какая-либо скобка - выражение также не сбалансировано
Совет от админа: пройди курс, который давно хотел пройти, но откладывал это из-за его стоимости.
Теперь не нужно платить деньги за обучение, ведь оно стало совершенно бесплатным благодаря канала CourseHunter. Здесь уже слито сотни гигабайтов платных курсов от топовых школ, и каждый день их количество растёт. Если ты не нашёл нужный тебе курс, смело пиши в предложку и его обязательно выложат.
Сохраняй канал, пока его не забанили:
https://t.me/+hpOYSy0WBjVlMzRi
Асимптотический анализ
Я часто говорю о какой-то сложности алгоритма, но так ни разу и не сказал, как же эта сложность вычисляется и откуда берется!
Асимптотический анализ алгоритма относится к определению математического формирования его производительности во время выполнения. Используя данный анализ, мы можем очень хорошо определить наилучший, средний и худший сценарии алгоритма.
Асимптотический анализ так или иначе связан с входными параметрами. Если они отсутствуют, мы можем считать, что алгоритм работает за константное время.
Асимптотический анализ относится к вычислению времени выполнения любой операции в математических единицах вычисления. Например, время выполнения одной операции вычисляется как f (n) и может быть для другой операции оно вычисляется как g (n 2 ). Это означает, что время выполнения первой операции будет линейно увеличиваться с увеличением n, а время выполнения второй операции будет увеличиваться экспоненциально при увеличении n.
Python пришел в телеграм!
Python — второй по популярности язык в мире. Он очень универсален: можно писать сайты, а можно искусственный интеллект. Теперь у Python есть русскоязычный канал. Это первоисточник всего, что появляется в платных курсах и остальных ресурсах. Стоит подписаться!
Метод 2
Мы видим, что Si в день i можно легко вычислить, если нам известен ближайший день, предшествующий i, при условии что цена больше, чем в этот день, чем цена в день i. Если такой день существует, назовем его h(i), в противном случае мы определим h(i) = -1
Теперь вычисления сводятся к простой арифметике Si = i - h(i)
Для реализации этой логики я использовал стек для хранения дней i, h (i), h (h (i)) и т. д. Когда мы переходим от дня i-1 к i, мы извлекаем дни, когда цена акции была меньше или равна цене i, а затем помещаем значение дня i обратно в стек.
Photoshop теперь в телеграм!
Photoshop — самый популярный графический редактор в мире! Это незаменимый инструмент для любого дизайнера. А сейчас в телеграмме появился официальный русскоязычный канал. Это первоисточник всего, что появляется в платных курсах и остальных ресурсах. Стоит подписаться!
Задача диапазоны Stocks
Я люблю достаточно различные задачи, которые помогают в реальной жизни. К примеру эта задача по теме финансов. У нас есть список из n еженедневных котировок цены за акцию, и нам нужно рассчитать диапазон цены акции для всех n дней.
Промежуток Si цены акции в день i определяется как максимальное количество последовательных дней непосредственно перед данным днем, для которых цена акции в текущий день меньше или равна ее цене в данный день.
Например, если массив цен за 7 дней задан как { 100, 80, 60, 70, 60, 75, 85 }, то значения диапазона для соответствующих 7 дней будут { 1, 1, 1, 2, 1, 4, 6 }
Метод 1
Посмотреть массив входных цен, для каждого посещаемого элемента перемещаться по элементам слева от нег ои увеличивать значение диапазона, пока элементы слева меньше.
Короче, вот вам архивы с платными книгами, иначе так не выучите ни один язык:
📚 Полка Разработчика
📖 Кладовая Книг
🗂 Архив Разработчика
🚽 IT Memes — тут чисто поржать, пока компилятор там возится;
🗞 3D News — актуальные новости IT-индустрии на случай, если мемы надоели.
Сохраняй, пригодится⚡️ Skillbox подали иск на телеграм канал CourseHunter
Теперь CourseHunter грозит блокировка, но они продолжают сливать платные курсы самых топовых онлайн школ.
Успей сохранить, пока канал не забанили: https://t.me/+W4heP2l59PM3NGEy
Накупить курсов на 100,000₽ или поехать отдыхать? Выбор за вами, но теперь можно и на отдых поехать и курсы проходить!
Спросите "как??" - Просто! Появился канал CourseHunter, где сливают самые популярные курсы от топовых школ совершенно бесплатно.
Успей сохранить канал, пока его не забанили:
https://t.me/+6lyvOgXCLm9jNDU6
Второй способ решения задачи из стека в очередь
В этом случае операция dequeue будет для нас дорогостоящей. При операции enqueue новый элемент вводится наверх stack1. А при операции удаления из очереди, если stack2 пуст - все элементы перемещаются в stack2 и возвращается вершина stack2.
enqueue операция:
1. Push x в stack1(если учитывать что размер стека бесконечный)
Time Complexity: O(1)
dequeue операция:
1. Если оба стека пусты - кинуть ошибку
2. Если stack2 пустой - то пока не будет пустой stack1 пихать все значения в stack2
3. Pop() элемент из stack2 и вернуть его пользователю
Time Complexity: O(N)
1. Frontend Planet – самые продуктивные приложения собраны в одном месте.
2. IT MIX– канал с полезными шпаргалками, которые облегчат вам жизнь.
3. Frontend Project - здесь собраны лучшие проекты с codepen.
4. Visual Studio Code - канал с плагинами, которые прокачают ваш редактор кода.
✔️(Жми на название канала и получай знания)
Задача: реализовать очередь через стек
Нам дается структура данных стека с операциями push и pop, задача - реализовать очередь с использованием экземпляров структуры данных стека и операций над ними.
Очередь может быть реализована с использованием двух стеков. Пусть очередь, которая будет реализована, равна q, а стеки, используемые для реализации q, - stack1 и stack2. q можно реализовать двумя способами:
Метод 1 Метод гарантирует: что самый старый введенный элемент всегда находится наверку stack1, так что операций dequeue() просто достает значения из stack1. Чтобы поместить элемент вверху stack1, используется stack2
enqueue(x) операция:
1. пока stack1 не пустой, пушить все из stack1 в stack2
2. push x в stack1 (учитывая что стек бесконечный)
3. cнова все данные из stack2 запушить в stack1
Time Complexity: O(N)
dequeue операция:
1. если stack1 пустой - вернуть ошибку
2. достать(pop) элемент из stack1 и вернуть его
Time Complexity: O(1)
Команда айтишников из Яндекса создала канал, где обучает фронтенду и созданию необычных анимаций
По словам ребят, фронтенд – одна из самых перспективных ниш в айти. Даже полный лентяй сможет освоить её за 2-3 недели и начать зарабатывать.
На этом канале есть всё для этого. Зашли – выбрали понравившийся эффект – с нуля воссоздали его по готовой инструкции.
💡Не упусти шанс освоить профессию мечты – @vollex_frontend
