Python_No_Panic
2.06K subscribers
123 photos
18 videos
49 links
Самый перспективный, полезный и ламповый канал по Python в русскоязычном телеграме!

Обучающие посты в хронологическом порядке, посты по софт скиллам и чат, где вам всегда помогут админы и комьюнити.

Сотрудничество:
@Niik_Whaale
Download Telegram
Что такое пузырьковая сортировка

В прошлом посте мы рассказали вам о такой важной теме как словари. А сегодня поговорим о чем-то более замысловатом, но в меру сложном. Мы вправду хотим подробно рассказать вам о том, как пройти техническое интервью не в самые простые компании. Наша задача состоит в том, чтобы помочь вам расти и быть вашим каналом-помощником в обучении. Так что надеемся, что этот пост будет для вам действительно полезен. А теперь к делу!

Пузырьковая сортировка — это простой алгоритм сортировки, который многократно проходит по списку, сравнивает соседние элементы и меняет их местами, если они расположены в неправильном порядке. Алгоритм получил свое название из-за того, что более мелкие элементы «всплывают» вверх списка. Вот реализация Python алгоритма пузырьковой сортировки выглядит следующим образом:

def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1] :
arr[j], arr[j+1] = arr[j+1], arr[j]

В приведенном выше коде arr — это список для сортировки, а n — длина списка. Внешний цикл для i в диапазоне (n) проходит через все элементы в массиве. Внутренний цикл для j в диапазоне (0, n-i-1) проходит через несортированную часть списка. Оператор if arr[j] > arr[j+1] проверяет, больше ли текущий элемент, чем следующий элемент, и если это так, то два элемента меняются местами.

Анализ временной сложности:

Временная сложность алгоритма пузырьковой сортировки составляет O(n^2), где n — количество элементов в списке. Это связано с тем, что в худшем случае внутренний цикл будет выполняться n*(n-1) раз, что дает в общей сложности n^2 - n итераций.

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

Отличного вам настроения!

#learning_python_algorithms
👍17💯2🍌1
Реализация и анализ сортировки выбором

Всем привет! Совсем недавно мы говорили с вами про bubble sort - сортировку пузырьком. А теперь пришло время говорить о более быстрых алгоритмах, так как в прошлом посте мы выяснили, что сортировка пузырьком хоть и выполняет свою задачу, но делает это не очень эффективно. И так начнем:

Сортировка выбором — это простой алгоритм сортировки, который многократно находит минимальный элемент из несортированной части массива и помещает его в начало массива. Он работает, выбирая наименьший элемент и заменяя его элементом в текущей позиции, пока весь массив не будет отсортирован.

Вот реализация сортировки выбором в Python:

def selection_sort(arr):
n = len(arr)
for i in range(n):
min_idx = i
for j in range(i+1, n):
if arr[j] < arr[min_idx]:
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
return arr

Внешний цикл проходит от 0 до n-1, где n — длина массива. На каждой итерации минимальный элемент находится из несортированной части массива (т. е. от i+1 до n-1) с помощью внутреннего цикла. Затем минимальный элемент заменяется элементом в текущей позиции (т. е. i).

Временная сложность:

Временная сложность сортировки выбором O (n ^ 2)

Надеемся вам понравился наш разбор сортировки выбором. Если у вас есть какие-то предложение, то пишите их в комментариях. Также не забудьте поставить вашу реакцию на этот пост, ведь именно это мотивирует нас делать крутой контент.

Всем отличного дня!

#learning_python_algorithms
👍113
Реализация и анализ Insertion Sort

Всем привет!
Мы продолжаем радовать вас контентом, который обычно заставляет нас боятся собеседований. Надеемся вы пытаетесь осмыслить все алгоритмы, которые мы тут с вами разбираем, ведь совсем скоро вступим в бой с задачками на лит код и будем устранять все пробелы в наших знаниях.
Если вы забыли про что мы говорили в предыдущем посте, то мы советуем освежить его в памяти, перейдя по этой ссылке. А теперь вернемся к нашим красивым алгоритмам :)

Сегодня разговор пойдет про insertion sort.
Алгоритм работает, перебирая массив и вставляя каждый элемент в правильное положение в отсортированной части массива.

Реализация алгоритма:

def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i-1
while j >= 0 and key < arr[j] :
arr[j+1] = arr[j]
j -= 1
arr[j+1] = key

Вот как работает алгоритм:

⚡️ Мы начинаем со второго элемента массива (i=1) и предполагаем, что первый элемент (i=0) уже отсортирован.
⚡️ Мы сохраняем текущий элемент в переменной с именем key.
⚡️ Мы сравниваем ключ с каждым предшествующим ему элементом (j=i-1), начиная с последнего элемента отсортированной части массива, и перемещаем все элементы, которые больше ключа, на одну позицию вправо.
⚡️ Мы вставляем ключ в правильное положение в отсортированной части массива, вставляя его после последнего элемента, который меньше или равен ключу.
⚡️ Мы повторяем этот процесс для каждого элемента массива.

Временная сложность:
O(n)

Надеемся вам нравится наш материал. Если у вас есть какие-то предложения или идеи, то не стесняйтесь их озвучивать в комментариях. Мы желаем вам успехов в изучении алгоритмов и суперского настроения!

#learning_python_algorithms
5👍2💩2🆒2
Подход «divide-and-conquer» в программировании 💪

Всем привет! В прошлом посте мы говорили об Insertion Sort. А сегодня нам нужно двигаться дальше в нашей подготовке к собеседованию на крутую работу. Сегодня мы поговорим с вами про подходы в программировании. Начнем мы с подхода «разделяй и властвуй». И так давайте узнаем что это такое и зачем нам вообще знать про этот подход :) И так начнем!

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

Подход «разделяй и властвуй» работает путем рекурсивного разделения проблемы на более мелкие подзадачи до тех пор, пока они не станут достаточно простыми для непосредственного решения. Затем решения подзадач объединяются для получения решения исходной задачи. Ключевая идея этого подхода заключается в том, что если мы можем эффективно решить подзадачи, то мы также сможем эффективно решить исходную задачу.

Подход «разделяй и властвуй» используется во многих алгоритмах.

К примеру, в алгоритмах сортировки: Merge Sort and Quick Sort.

Или в алгоритмах поиска: Binary Search

А также в алгоритмах умножения матриц: Strassen's Algorithm.

Основные этапы подхода «разделяй и властвуй»:

👑 Разделите проблему на более мелкие подзадачи.
👑 Сделайте эффективное и правильное решение для подзадачи.
👑 Объедините решения подзадач, чтобы получить решение исходной задачи.

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

Надеемся вы узнали что-то новое из нашего поста. Оставляйте свои комментарии и реакции под этим материалом.

Всем отличного настроения и продолжения дня!

#learning_python_algorithms
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
Реализация и анализ алгоритма Quicksort

Всем привет!
В прошлом посте мы разбирали merge sort, а сегодня поговорим про один из самых крутых алгоритмов сортировки - quicksort. И так по нашей традиции мы советуем вам налить чаю и погрузится в чтение нашего материала.

Что за алгоритм?

Быстрая сортировка — это широко используемый алгоритм сортировки, использующий подход «разделяй и властвуй» для сортировки массива элементов. Он был разработан Тони Хоаром в 1959 году и до сих пор считается одним из самых эффективных алгоритмов сортировки.

Реализация алгоритма:

def quicksort(arr):
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
left = [x for x in arr[1:] if x < pivot]
right = [x for x in arr[1:] if x >= pivot]
return quicksort(left) + [pivot] + quicksort(right)

Функция quicksort() принимает на вход массив arr и сортирует его с помощью алгоритма quicksort. Алгоритм работает, выбирая опорный элемент, разбивая массив вокруг опоры и рекурсивно сортируя подмассивы.

Вот как работает алгоритм:
Если длина массива меньше или равна 1, массив уже отсортирован и мы можем просто вернуть его.
В противном случае мы выбираем опорный элемент (в данном случае первый элемент массива).
Мы разбиваем массив на два подмассива: один содержит все элементы, меньшие опорного, а другой содержит все элементы, большие или равные опорному.
Мы рекурсивно сортируем два подмассива, вызывая quicksort() для каждого из них.
Мы объединяем отсортированные подмассивы со сводным элементом между ними.

Временная сложность:
O(n*log n)

Надеемся вам понравился наш пост. Оставляйте ваши реакции и пишите комментарии.

Суперского вам настроения!

#learning_python_algorithms
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91