Реализуйте алгоритм сортировки слиянием (Merge Sort) на Python. Напишите код и объясните, как работает этот алгоритм. Расскажите о его сложности и возможных оптимизациях.
Объяснение:
Алгоритм сортировки слиянием (Merge Sort) использует стратегию «разделяй и властвуй». Он состоит из двух основных шагов:
Разделение (Divide): Массив разделяется на две равные (при четном числе элементов) или почти равные (при нечетном) части. Этот процесс рекурсивно выполняется для каждой из подпоследовательностей.
Слияние (Merge): Отсортированные подпоследовательности сливаются обратно в один отсортированный массив.
Сложность:
Временная сложность: O(n log n) в худшем, лучшем и среднем случаях.
Пространственная сложность: O(n).
Оптимизации:
— При реализации можно использовать вставочную сортировку для маленьких подмассивов, так как у нее меньшая константа в асимптотике.
— Если массив уже отсортирован, можно добавить проверку и пропустить шаг сортировки.
— Вместо копирования подмассивов при каждом рекурсивном вызове можно использовать вспомогательный массив для слияния, что уменьшит использование памяти.
Объяснение:
Алгоритм сортировки слиянием (Merge Sort) использует стратегию «разделяй и властвуй». Он состоит из двух основных шагов:
Разделение (Divide): Массив разделяется на две равные (при четном числе элементов) или почти равные (при нечетном) части. Этот процесс рекурсивно выполняется для каждой из подпоследовательностей.
Слияние (Merge): Отсортированные подпоследовательности сливаются обратно в один отсортированный массив.
Сложность:
Временная сложность: O(n log n) в худшем, лучшем и среднем случаях.
Пространственная сложность: O(n).
Оптимизации:
— При реализации можно использовать вставочную сортировку для маленьких подмассивов, так как у нее меньшая константа в асимптотике.
— Если массив уже отсортирован, можно добавить проверку и пропустить шаг сортировки.
— Вместо копирования подмассивов при каждом рекурсивном вызове можно использовать вспомогательный массив для слияния, что уменьшит использование памяти.
Метод swapcase()
Метод
Результатом будет строка 'hELLO, wORLD!'.
#для_начинающих
Метод
swapcase() в Python является встроенным методом строк (str), который создает новую строку, меняя регистр каждой буквы в исходной строке. Если буква была в верхнем регистре, она будет преобразована в нижний регистр, и наоборот.Результатом будет строка 'hELLO, wORLD!'.
#для_начинающих
Только начинаете в разработке на Python, рабочее окружение собирается на глаз, а проект сложно воспроизвести у коллег?
На открытом уроке разберём, как настроить удобное и предсказуемое окружение для Python-проекта — от структуры приложения до инфраструктуры. Покажем архитектуру типового проекта, разберём, какие компоненты нужны для разработки и как собрать локальную среду, которая повторяет рабочую.
Отдельно рассмотрим сборку Docker-контейнеров и развёртывание в Kubernetes, чтобы вы понимали полный цикл жизни приложения. Вы увидите, как выстроить процесс так, чтобы код работал одинаково у вас, в команде и в рабочей среде. Это базовый навык, без которого невозможно уверенно расти в разработке.
👉 Открытый урок проходит в преддверии старта курса «Python-разработчик» 7 мая в 20:00 МСК. Регистрация: https://otus.pw/eBRf/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
На открытом уроке разберём, как настроить удобное и предсказуемое окружение для Python-проекта — от структуры приложения до инфраструктуры. Покажем архитектуру типового проекта, разберём, какие компоненты нужны для разработки и как собрать локальную среду, которая повторяет рабочую.
Отдельно рассмотрим сборку Docker-контейнеров и развёртывание в Kubernetes, чтобы вы понимали полный цикл жизни приложения. Вы увидите, как выстроить процесс так, чтобы код работал одинаково у вас, в команде и в рабочей среде. Это базовый навык, без которого невозможно уверенно расти в разработке.
👉 Открытый урок проходит в преддверии старта курса «Python-разработчик» 7 мая в 20:00 МСК. Регистрация: https://otus.pw/eBRf/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Метод math.perm()
Метод math.perm() в Python возвращает количество способов выбрать k элементов из n элементов с порядком и без повторения.
Синтаксис:
Где:
В первом примере метод возвращает количество способов выбрать 3 элемента из 5 элементов. В результате получается 60 способов.
Во втором примере метод возвращает количество способов выбрать 5 элементов из 10 элементов. В результате получается 252 способа.
#для_начинающих
Метод math.perm() в Python возвращает количество способов выбрать k элементов из n элементов с порядком и без повторения.
Синтаксис:
math.perm(n, k)
Где:
n: Количество элементов из которых выбираются k элементов.k: Количество элементов, которые выбираются.В первом примере метод возвращает количество способов выбрать 3 элемента из 5 элементов. В результате получается 60 способов.
Во втором примере метод возвращает количество способов выбрать 5 элементов из 10 элементов. В результате получается 252 способа.
#для_начинающих
Сцепление исключений
Сцепление исключений (exception chaining) позволяет сохранять информацию об исключении, которое произошло во вложенном блоке кода, в исключении более высокого уровня. Это полезно для отслеживания причин ошибок и обеспечения более полной информации о том, что произошло.
В примере на картинке, если возникает
#для_продвинутых
Сцепление исключений (exception chaining) позволяет сохранять информацию об исключении, которое произошло во вложенном блоке кода, в исключении более высокого уровня. Это полезно для отслеживания причин ошибок и обеспечения более полной информации о том, что произошло.
В примере на картинке, если возникает
ZeroDivisionError, мы попадаем в блок except, а затем выполняем вложенный код, который вызывает ValueError. С помощью ключевого слова from мы указываем, что исключение ValueError является следствием (частью) исключения ZeroDivisionError. Таким образом, информация об исключении ZeroDivisionError сохраняется.#для_продвинутых
Функция tell()
Функция
Возвращаемое значение: целое число, указывающее положение указателя в байтах от начала потока.
Аргументы:
#для_начинающих
Функция
tell() используется для получения текущей позиции указателя в потоке данных. Она применяется чаще всего при работе с файлами, но также может использоваться с другими типами потоков, например, сокетами или консольным вводом.Возвращаемое значение: целое число, указывающее положение указателя в байтах от начала потока.
Аргументы:
tell() не принимает никаких аргументов.#для_начинающих
Что нам стоит диаграмму в Python построить: 5 вариантов привлекающей внимание визуализации данных и кое-что ещё
Диаграммы помогают визуализировать как простые, так и самые сложные наборы данных. При этом диаграмм — множество видов, у каждого есть свои достоинства и недостатки. О наиболее эффектных и эффективных, реализуемых с Python, мы решили рассказать в сегодняшней подборке.
Смотреть статью
Диаграммы помогают визуализировать как простые, так и самые сложные наборы данных. При этом диаграмм — множество видов, у каждого есть свои достоинства и недостатки. О наиболее эффектных и эффективных, реализуемых с Python, мы решили рассказать в сегодняшней подборке.
Смотреть статью
В чем разница между is() и == в Python?
Операторы is и == в Python выполняют похожие функции, но работают немного по-разному. И если вы новичок, используете сравнения в коде, стоит понимать разницу. Это поможет реже прибегать к рефакторингу и дебагу.
Смотреть статью
Операторы is и == в Python выполняют похожие функции, но работают немного по-разному. И если вы новичок, используете сравнения в коде, стоит понимать разницу. Это поможет реже прибегать к рефакторингу и дебагу.
Смотреть статью
Узнаем сколько свободной памяти на компьютере
Для того, чтобы узнать сколько свободной памяти доступно на компьютере с помощью Python можно использовать модуль psutil.
Метод
Для того, чтобы узнать сколько свободной памяти доступно на компьютере с помощью Python можно использовать модуль psutil.
Метод
virtual_memory() возвращает объект с информацией о памяти системы. Свойство available объекта содержит количество свободной памяти в байтах.Ищем опечатки
Пакет
Пакет поддерживает шесть языков.
Документацию можно найти здесь.
Пакет
spellchecker позволяет отыскать ошибки в тексте, а также может предложить варианты исправлений. В примере проходимся по списку из двух слов, из которых одно ('therre') написано с опечаткой. Функция correction замечает это и предлагает одно самое вероятное исправление, а candidates — несколько.Пакет поддерживает шесть языков.
Документацию можно найти здесь.
Извлекаем имя из адреса электронной почты
Для извлечения имени из адреса электронной почты до символа ‘@‘ можно использовать регулярные выражения.
Это регулярное выражение начинает поиск с начала строки с помощью символа "^" и находит любую комбинацию строчных букв, цифр, дефисов, подчеркиваний, точек и знака минуса. Затем выражение находит символ "@" и останавливается.
Для извлечения имени из адреса электронной почты до символа ‘@‘ можно использовать регулярные выражения.
Это регулярное выражение начинает поиск с начала строки с помощью символа "^" и находит любую комбинацию строчных букв, цифр, дефисов, подчеркиваний, точек и знака минуса. Затем выражение находит символ "@" и останавливается.
cv3 — делаем OpenCV питоничным
cv3 - обёртка над opencv-python, которая ускоряет написание кода, не сужая функциональность
Смотреть статью
cv3 - обёртка над opencv-python, которая ускоряет написание кода, не сужая функциональность
Смотреть статью
Cравнение 2 аудиосообщений
Для сравнения двух аудиосообщений в Python нужно использовать библиотеку для анализа звука, например, librosa или PyAudio.
Здесь мы загружаем два файла и вычисляем их характеристики MFCC (Mel Frequency Cepstral Coefficients), которые представляют собой набор коэффициентов, описывающих звуковое пространство. Затем мы вычисляем расстояние между характеристиками с помощью функции dtln из librosa.core. Результат будет выведен в консоль.
Обратите внимание, что для сравнения аудиосообщений нужно, чтобы они имели одинаковую продолжительность и были записаны в одинаковых условиях (например, громкость, обработка шума).
Для сравнения двух аудиосообщений в Python нужно использовать библиотеку для анализа звука, например, librosa или PyAudio.
Здесь мы загружаем два файла и вычисляем их характеристики MFCC (Mel Frequency Cepstral Coefficients), которые представляют собой набор коэффициентов, описывающих звуковое пространство. Затем мы вычисляем расстояние между характеристиками с помощью функции dtln из librosa.core. Результат будет выведен в консоль.
Обратите внимание, что для сравнения аудиосообщений нужно, чтобы они имели одинаковую продолжительность и были записаны в одинаковых условиях (например, громкость, обработка шума).
Удаляем файл из папки на компьютере
Для удаления файла из папки на ПК в Python можно использовать модуль os.
Здесь сначала мы импортируем модуль os. Затем указываем полный путь к удаляемому файлу в переменной
Если файл существует, мы удаляем его с помощью функции
Для удаления файла из папки на ПК в Python можно использовать модуль os.
Здесь сначала мы импортируем модуль os. Затем указываем полный путь к удаляемому файлу в переменной
file_path. С помощью функции os.path.exists() проверяем, существует ли файл по указанному пути. Если файл существует, мы удаляем его с помощью функции
os.remove(). В противном случае выводим информацию, что такой файл не найден.argparse
Библиотека
В данном примере мы просто выводим значения аргументов на экран, но в реальном приложении вы можете использовать их для выполнения конкретных действий, например, чтения входного файла, обработки данных и записи результата в выходной файл.
Библиотека
argparse является стандартным инструментом для обработки аргументов командной строки в Python. Она позволяет легко определить и обработать аргументы, передаваемые программе при запуске из командной строки.В данном примере мы просто выводим значения аргументов на экран, но в реальном приложении вы можете использовать их для выполнения конкретных действий, например, чтения входного файла, обработки данных и записи результата в выходной файл.
Усыпляем программу
Иногда возникает необходимость остановить выполнение программы, чтобы можно было выполнить несколько других операций, или просто из-за требуемой утилиты. В такой ситуации может пригодиться функция sleep(), которая обеспечивает точный и гибкий способ остановки потока кода на любой период времени.
В нашем примере время начала и время окончания будут напечатаны с задержкой в 6 секунд.
Иногда возникает необходимость остановить выполнение программы, чтобы можно было выполнить несколько других операций, или просто из-за требуемой утилиты. В такой ситуации может пригодиться функция sleep(), которая обеспечивает точный и гибкий способ остановки потока кода на любой период времени.
В нашем примере время начала и время окончания будут напечатаны с задержкой в 6 секунд.
⚠️ Модель работает, но её сложно поддерживать: этапы обработки данных разрознены, обучение нестабильно, результат трудно воспроизвести. Без единого контура управления такие решения быстро теряют ценность.
1 июня в 18:00 МСК приглашаем вас на открытый урок курса «Машинное обучение. Продвинутый уровень».
🦾 На занятии вы разберёте, как с помощью Pipeline объединить подготовку данных, обучение и проверку модели в единую цепочку. Поймёте, как строить составные решения с промежуточными этапами и управлять ими без хаоса. Покажем, как это работает на практике и как применять в реальных задачах.
Вы познакомитесь с преподавателем, увидите формат обучения и сможете задать вопросы.
➡️ Зарегистрируйтесь, чтобы научиться выстраивать устойчивые решения в машинном обучении: https://otus.pw/igEZ/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
1 июня в 18:00 МСК приглашаем вас на открытый урок курса «Машинное обучение. Продвинутый уровень».
🦾 На занятии вы разберёте, как с помощью Pipeline объединить подготовку данных, обучение и проверку модели в единую цепочку. Поймёте, как строить составные решения с промежуточными этапами и управлять ими без хаоса. Покажем, как это работает на практике и как применять в реальных задачах.
Вы познакомитесь с преподавателем, увидите формат обучения и сможете задать вопросы.
➡️ Зарегистрируйтесь, чтобы научиться выстраивать устойчивые решения в машинном обучении: https://otus.pw/igEZ/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
hYPerSonic
hYPerSonic – это фреймворк на языках Python и C. Используется для разработки и эксплуатации конвейеров обработки звука, предназначенных для управления в реальном времени. Эта структура является низкоуровневой, в которой подсчитывается каждый байт, и это также включает объекты для звуковой карты, фильтрует операции с памятью, file – io и осцилляторы. Эта структура работает в операционных системах Linux и OSX.
https://github.com/lwcook/hypersonic-simulation
hYPerSonic – это фреймворк на языках Python и C. Используется для разработки и эксплуатации конвейеров обработки звука, предназначенных для управления в реальном времени. Эта структура является низкоуровневой, в которой подсчитывается каждый байт, и это также включает объекты для звуковой карты, фильтрует операции с памятью, file – io и осцилляторы. Эта структура работает в операционных системах Linux и OSX.
https://github.com/lwcook/hypersonic-simulation
GitHub
GitHub - lwcook/hypersonic-simulation: Python code for hypersonic vehicle simulation
Python code for hypersonic vehicle simulation. Contribute to lwcook/hypersonic-simulation development by creating an account on GitHub.
Разбиваем видео на n кол-во изображений
Для разбиения видео на n количество изображений вам понадобится использовать библиотеку OpenCV в Python.
В этом примере функция
Обратите внимание, что код использует целочисленное деление
Для разбиения видео на n количество изображений вам понадобится использовать библиотеку OpenCV в Python.
В этом примере функция
video_to_images принимает путь к видео (`video_path`) и количество желаемых изображений (`frames_count`). Она открывает видеофайл, читает каждый кадр и сохраняет каждый "шаг" кадров как отдельное изображение. Затем функция прекращает обработку, когда необходимое количество изображений сохранено.Обратите внимание, что код использует целочисленное деление
// и целочисленное преобразование int() для обеспечения, чтобы каждое изображение было сохранено через примерно одинаковое количество кадров, чтобы равномерно распределить их по времени видео.