IT-PythonHub-LeetCode
292 subscribers
35 photos
10 videos
34 links
🚀 Добро пожаловать в IT канал — твой проводник в мире программирования и алгоритмов!

📚 Полезные материалы по Python программированию и алгоритмам.

🔥Разборы LeetCode задач с реальных собеседований

Ссылка на GitHub: https://github.com/ZheglY
Download Telegram
🔥Что такое HTTP Response Codes? Какие основные коды и что о них нужно знать?

HTTP-коды ответов (Status Codes) — это трехзначные числа, которые сервер отправляет клиенту для информирования о результате обработки запроса.

📌 Информационные коды (1xx)

🔵100 Continue — Сервер получил заголовки запроса и ожидает тело запроса. Клиент должен продолжить отправку данных

🔵102 Processing — Сервер обрабатывает запрос, но ответ ещё не готов

💡Успешные коды (2xx)

🟢200 OK — Стандартный ответ для успешных HTTP-запросов.

🟢201 Created Запрос успешно выполнен, и на сервере создан новый ресурс

🟢204 No Content Сервер успешно обработал запрос, но не возвращает тело ответа

📌 Перенаправления (3xx)

🔵301 Moved Permanently Запрошенный ресурс навсегда перемещён на новый URL

🔵302 Found (или 307 Temporary Redirect) Ресурс временно доступен по другому URL

🔵304 Not Modified Сервер сообщает, что ресурс не изменился с момента последнего запроса.

🧑‍💻@IT_Python_ZheglY | #python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍118👏8🔥2💩2🍾1
💡Http Response Codes 400 / 500

HTTP-коды состояния 400 (Client Error) и 500 (Server Error) — это две основные категории ошибок, которые указывают на проблемы при обработке запроса. Вот их ключевые различия и особенности:

⛔️ Ошибки клиента (4xx)

● 400 Bad Request Сервер не понял запрос из-за синтаксической ошибки

● 401 Unauthorized Требуется аутентификация

● 403 Forbidden Доступ запрещён

● 404 Not Found Сервер не нашёл запрашиваемый ресурс

● 405 Method Not Allowed Используется неподдерживаемый HTTP-метод

🚫 Ошибки сервера (5xx)

● 500 Internal Server Error — Общая ошибка сервера

● 502 Bad Gateway — Проблема с прокси-сервером или API

● 503 Service Unavailable — Сервер временно недоступен.

📚 Доп материалы для прочтения:

1. Полный список кодов с пояснениями от Mozilla
2. QaRocks

🧑‍💻@IT_Python_ZheglY | #python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🍓5👏4🦄4💩21🍾1
🌳 Основные деревья в Python и их применение

🗣️ Деревья — иерархические структуры данных, где каждый узел (нода) имеет родителя (кроме корня) и потомков. Используются для представления файловых систем, иерархий данных, оптимизации поиска и сортировки. В Python нет встроенных деревьев, но их реализуют через классы или библиотеки (например, bigtree).

🔵Красно-черное — Самобалансирующееся BST. Основа словарей Python, СУБД.

🔵B+ -дерево — Оптимизировано для дисковых операций. Стандарт для индексов баз данных.

🔵Бинарная куча — Min/Max-куча для приоритетных очередей. Основа для алгоритма Дейкстры.

🔵AVL-дерево — Строго сбалансированное BST. Для систем с гарантированным временем поиска.

🔵Trie (Префиксное) — Хранит строки как цепочки символов. Для автодополнения и словарей.

🔵B-дерево — Многопутевое дерево для файловых систем. Оптимизация чтения/записи блоков.

🔵BST (Бинарное) — Базовое дерево поиска и понимания устройства | Учебные проекты.

🔵Общее дерево — Узлы с произвольным числом потомков. Для XML/JSON и иерархий.

📚 Дополнительные материалы для прочтения:

базовые знание деревьев sky.pro

кратко об обходах и построениях

🔜Далее мы вместе подробнее изучим каждое дерево и разберем код их построения!

🧑‍💻@IT_Python_ZheglY | #python
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍9🤮1
🌳 Основные деревья в Python |Красно-чёрное дерево (КЧД)

🗣️ Красно-чёрное дерево (КЧД) — это умная структура данных, которая автоматически балансируется при добавлении или удалении элементов. Благодаря этому операции поиска, вставки и удаления работают за O(log n) — быстро даже для больших данных!

🔖 Основные правила:

🔵Цвета — каждый узел красный или чёрный.

🔵Корень и листья — всегда чёрные (листья — это пустые узлы NIL).

🔵Красные узлы — не могут быть родителями красных (нет двух красных подряд).

🔵Чёрная высота — на всех путях от корня до листьев одинаковое число чёрных узлов.

Как оно балансируется?
Если после вставки нарушаются правила, дерево перекрашивает узлы и делает повороты (влево/вправо).

Например, если два красных узла оказались рядом, один перекрашивается в чёрный.

💡 Зачем это нужно?
КЧД используется в базах данных, языковых библиотеках и везде, где важен быстрый поиск и динамическое обновление.

📚 Дополнительные материалы для прочтения:

Основные знания Tproger

Код реализации можно посмотреть здесь: https://github.com/ersul4ik/rbt

🧑‍💻@IT_Python_ZheglY | #python #деревья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1210🤮1
🌳 Основные деревья в Python | Бинарная куча

Бинарная куча — это специальная древовидная структура данных, которая удовлетворяет свойству кучи

🔵 Min-куча: каждый родительский элемент меньше или равен своим дочерним элементам

🔵 Max-куча: каждый родительский элемент больше или равен своим дочерним элементам.

Это позволяет эффективно добавлять и извлекать элементы с наивысшим приоритетом, используя алгоритмическое время O(log n).

🔜В Python для работы с бинарными кучами используется встроенный модуль heapq, который реализует алгоритм очереди с приоритетами.

📚 Дополнительные материалы для прочтения:

Официальная документация Python

🧑‍💻@IT_Python_ZheglY | #python #деревья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥106🥰2🤡1
Базовая реализация бинарной кучи (применение модуля heapq)

import heapq

print("🧠 БИНАРНАЯ КУЧА: ОСНОВНЫЕ СЦЕНАРИИ")

# 1. БАЗОВЫЕ ОПЕРАЦИИ
print("\n1️⃣ БАЗОВЫЕ ОПЕРАЦИИ")
numbers = [7, 2, 5, 9, 1, 3]
heap = numbers.copy()
heapq.heapify(heap)
print(f"Исходный: {numbers}")
print(f"Куча: {heap}")
print(f"Минимум: {heap[0]}")
print(f"Извлечение: {[heapq.heappop(heap) for _ in range(3)]}...")

# 2. MAX-КУЧА
print("\n2️⃣ MAX-КУЧА")
max_heap = [-x for x in [3, 1, 4, 5]]
heapq.heapify(max_heap)
print(f"Max-куча: {max_heap}")
print(f"Максимум: {-max_heap[0]}")

# 3. ПРИОРИТЕТНАЯ ОЧЕРЕДЬ
print("\n3️⃣ ПРИОРИТЕТНАЯ ОЧЕРЕДЬ")
tasks = []
heapq.heappush(tasks, (2, "Почистить код"))
heapq.heappush(tasks, (0, "Пофиксить баг!"))
heapq.heappush(tasks, (1, "Деплой"))

print("Очередь по приоритету:")
while tasks:
priority, task = heapq.heappop(tasks)
print(f"Приоритет {priority}: {task}")
🔥8👍4🤯3🤮1
🤡3🤮1💩1
Какой будет вывод этого кода?
Anonymous Quiz
49%
[1] [2]
15%
[1] [1, 2]
10%
[1, 2] [1, 2]
6%
[1] [2, 1]
20%
Ошибка
7👍6👏2🤮1🤡1
🌳 Основные деревья в Python | B+ дерево ( B+ tree )

Вы когда-нибудь задумывались, как базы данных мгновенно находят нужные записи среди огромного количества данных? Всё дело в эффективной структуре данных — B+ дереве.

🔖Основные особенности дерева:

🔵Все данные — в листьях. Внутренние узлы выступают лишь как «указатели» или «оглавление», что делает поиск по диапазону невероятно быстрым (например, «найти всех пользователей с 10 по 100»).

🔵Листья связаны в список. Это позволяет легко и быстро обходить все данные в отсортированном порядке.

🔵Высота дерева минимальна. Благодаря этому для поиска любой зап

🔜Где используется? Практически везде! Это основа индексов в MySQL, PostgreSQL, MongoDB и многих других СУБД. Именно B+-дерево позволяет им работать быстро и стабильно.

📚 Дополнительные материалы для прочтения:

Базовые знания habr.com

Реализация дерева GitHub

🧑‍💻@IT_Python_ZheglY | #python #деревья
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍4👏4🤮1
🤮2🤡1
9👍3👎2🔥2💩1
⚖️ Что такое балансировка дерева?

Балансировка — это процесс поддержания дерева в «стройной» форме, чтобы не было очень длинных веток и очень коротких.

Зачем это нужно? Балансировка гарантирует, что высота дерева остаётся логарифмической по отношению к числу элементов, а значит, операции поиска, вставки и удаления будут выполняться за O(log n) — то есть, очень быстро.

🔖Основные виды балансировки:

1. Балансировка поворотами |AVL-деревья

🔵Следят за идеальным балансом
🔵После каждого изменения проверяют разницу высот веток
🔵Если разница > 1 — делают повороты для выравнивания
🔵Идеально для частого поиска
❗️ Много поворотов замедляет добавление/удаление

2. Балансировка разделкнием и слиянием | B-деревья и B+-деревья

🔵Хранят несколько ключей в одном узле
🔵При переполнении делятся пополам
🔵При опустошении объединяются с соседом
🔵Идеальны для работы с диском и базами данных
❗️ Сложнее в реализации

3. Красно-чёрные деревья

🔵 Не гонятся за идеальным балансом
🔵 Следят за цветом узлов (красный/чёрный) по простым правилам
🔵Быстрое добавление и удаление
❗️Поиск чуть медленнее, чем в AVL

📚 Дополнительные материалы для прочтения:

Информация по деревьям

Информация по балансировкам

🧑‍💻@IT_Python_ZheglY | #python #деревья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍94🔥2🤮2👏1
👍65
🔍 ОСНОВНЫЕ ОПЕРАЦИИ С ДАННЫМИ: ЧТЕНИЕ, ПОИСК, ВСТАВКА, УДАЛЕНИЕ

📖 ЧТЕНИЕ (Access) Доступ к данным по известному местоположению(индексу или ключу)

🔵Массивы: O(1) — мгновенный доступ по формуле "адрес = начало + индекс × размер"
🔵Связные списки: O(n) — требуется последовательный проход от начала
🔵Хэш-таблицы: O(1) — вычисление хэша и мгновенный доступ к ячейке
🔵Деревья: O(log n) — быстрый спуск по ветвям
🔜Применение: загрузка профилей, отображение товаров, чтение конфигураций

🔍 ПОИСК (Search) Нахождение элемента по значению(а не по позиции)

🔵Линейный поиск: O(n) — последовательная проверка всех элементов (долго)
🔵Бинарный поиск: O(log n) — работает только с отсортированными данными
🔵Хэш-таблицы: O(1) — идеально для поиска по ключу
🔵Деревья: O(log n) — эффективный поиск в сбалансированных структурах
🔜Применение: поиск пользователей, проверка авторизации, фильтрация данных

ВСТАВКА (Insertion) Добавление новых элементов в структуру данных

🔵Массивы: O(n) — требует сдвига элементов (кроме вставки в конец)
🔵Связные списки: O(1) — быстрое изменение указателей
🔵Хэш-таблицы: O(1) — вычисление позиции по хэшу и запись
🔵Деревья: O(log n) — поиск места
и балансировка
🔜Применение: регистрация
пользователей, добавление заказов, логирование

УДАЛЕНИЕ (Deletion) Удаление элементов из структуры данных

🔵Массивы: O(n) — требует сдвига всех последующих элементов
🔵Связные списки: O(1) — быстрое перенаправление указателей
🔵Хэш-таблицы: O(1) — пометка ячейки как удаленной
🔵Деревья: O(log n) — удаление узла с последующей балансировкой
🔜Применение: удаление аккаунтов, очистка кэша, отмена действий

📚 Дополнительные материалы для прочтения:

Основные структуры данных

🧑‍💻@IT_Python_ZheglY | #python
#программирование #алгоритмы #данные #структурыданных
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍5
🧠 Что такое энтропия Шеннона и как она измеряет хаос?

Представьте, что вы пытаетесь угадать, что скажет ваш друг. Если он всегда говорит «да» — это скучно и предсказуемо. Если он отвечает случайно — это хаос и неопределенность. Энтропия Шеннона — это число, которое точно измеряет эту самую неопределенность.

📉 Формула:

H = - Σ [p_i * log₂(p_i)]

Где:

H — энтропия (в битах).

p_i — вероятность каждого возможного события.

Σ — сумма по всем событиям.
———————————-————————————————————
Информационная энтропия подчиняется следующим закономерностям:

А) Энтропия события равна 0, если его вероятность равна 1 (100%);

Б) Энтропия двух независимых событий равна сумме энтропий этих событий;

В) Энтропия максимальна, если все события равновероятны.

Получается, чем сложнее предсказать исход события, тем больше информации оно несёт. Если событие редкое и непредсказуемое, мы называем его новостью и наделяем информационной ценностью. Если же оно повторяется часто и о нём постоянно рассказывают, его информационная ценность теряется.
———————————-————————————————————
🎲 Простой пример: Монетка

Честная монетка (орёл/решка по 50%).
Энтропия: H = - [0.5*log₂(0.5) + 0.5*log₂(0.5)] = 1 бит.
Максимальная неопределенность! Памяти на кодирование информации уйдет больше.

Нечестная монетка (орёл — 99%, решка — 1%).
Энтропия: H ≈ 0.08 бита.
Система предсказуема, неопределенность мала. Памяти на кодирование информации уйдет мало.

💡 Где это используется?

Энтропия — не просто теория, она везде в нашей цифровой жизни:

🔵Сжатие данных (ZIP, RAR): Алгоритмы ищут избыточность (низкую энтропию) в данных и упаковывают их меньше.

🔵Криптография: Случайные ключи должны иметь максимальную энтропию, чтобы их было невозможно угадать.

🔵Машинное обучение: С помощью энтропии строят деревья решений, задавая вопросы, которые сильнее всего уменьшают неопределенность.

🔵Связь: Помогает определить максимальную скорость передачи данных без ошибок через зашумленный канал.

Энтропия Шеннона — это фундаментальная мера хаоса и неопределенности, которая позволяет делать наши технологии эффективнее и умнее.

📚 Дополнительные материалы для прочтения:

Информация об информации. Энтропия Шеннона, демон Максвелла и предел Ландауэра

🧑‍💻@IT_Python_ZheglY | #python
#программирование #данные
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍4👏1
🔥Задача с Leetcode #392: Is Subsequence

Условие:
Даны две строки s и t. Проверить, является ли s подпоследовательностью t.

Что такое подпоследовательность?

Это последовательность, которую можно получить из другой последовательности путем удаления некоторых элементов без изменения порядка оставшихся элементов.

Примеры:

s = "abc", t = "ahbgdc" → true

s = "axc", t = "ahbgdc" → false

💡Идея решения:

🔵Идем по строке t и ищем символы из s по порядку

🔵Когда находим совпадение - двигаем указатель s на следующий символ.

🔵Если прошли всю s - возвращаем true

Сложность:

Время: O(n) - проходим по строке t один раз

💾 Память: O(1) - используем только константную память

🖥 Видео разбор задачи NeetCode

🧑‍💻@IT_Python_ZheglY | #leetcode #python
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3