Всё про Алгоритмы и Структуры данных
رفتن به کانال در Telegram
Мы не претендуем на оригинальность контента, мы лишь собираем материал из открытых источников. Ссылка: @Portal_v_IT Сотрудничество, авторские права: @oleginc, @tatiana_inc Канал на бирже: https://telega.in/c/structuredata
نمایش بیشتر7 756
مشترکین
-124 ساعت
-37 روز
-2530 روز
آرشیو پست ها
Бинарный поиск на Python
В этом видео вы узнаете, что такое алгоритм, алгоритм бинарного поиска, О-большое
Перейти к просмотру [13:59]
🕵 Курс "Алгоритмы и структуры данных от А до Я"
Курс посвящен изучению базовых алгоритмов и структур данных, знание которых необходимо для эффективного решения разнообразных задач программирования. Рассматриваются различные алгоритмы сортировки, линейные структуры данных, такие как очереди и списки.
Длительность курса: 4 урока
Перейти к курсу
Рекурсия и сортировка Quick Sort простыми словами на JavaScript
Если хотите разобраться, как устроена рекурсия и сортировка массива Quick Sort, то читайте статью ниже. В ней автор простыми словами разбирает эти алгоритмы на JavaScript.
👉Читать статью
Шаги решения любой задачи
Нашел статью недавно и понимаю теперь где я косячил в самом начале.
Никогда не пытайтесь сразу решать задачу оптимизированно. Или, что еще хуже, тупо не разбираясь в самой проблеме стараться ее зазубрить. Поверьте - это не выход и так вы ничему не научитесь.
В статье описываются шаги того, что надо сделать приступая к любой проблеме:
1. Понять саму проблему
2. Выбрать общее направление по решению проблемы.
3. Подумайте что вы можете сделать (используя ваш предыдущий опыт)
4. Попробуйте найти, что вы не можете сделать. А также в этом кейсе подумайте и над исключительными ситуациями, которые могут произойти.
5. Только теперь подумайте над тем, что вы можете улучшить в текущем решении.
Экспоненциальный поиск или Finger Search
Finger Search ищет элемент в отстортированном массиве, перескакивая 2 ^ i элеентов на каждой итерации, где i представляет значение переменной управления циклом. После идет проверка: присутствует ли элемент поиска между последним и текущим переходом.
Как это работает?
1. Проходите по элементам массива по 2 ^ i за один раз, выполняя поиск условия:
Array[2 ^ (i - 1)] < valueWanted < Array[ 2 ^ i]Если 2 ^ i больше, чем длина массива, установите верхнюю границу равной длине массива 2. Выполните двоичный поиск между массивами Array[2 ^ (i - 1)] и Array[2 ^ i]
Знакомим с разработкой и учим думать, как программист.
Подготовительный 14-дневный курс по Python для новичков 🐍
Даём только мясную и прикладную информацию. Никакой воды и траты времени! По окончании вы уже владеете базовым знанием языка.
Вас ждет 69 уроков теории и практики прямо в браузере, вебинары, лайвкодинг и первая собственная программа на Python, написанная под руководством опытного наставника.
Начинаем 9 ноября, вы с нами?
Алгоритм Interpolation Search
1. В цикле вычисляем значение позиции (pos), используя формулу, что обсуждали в предпоследнем посте.
2. Если есть совпадения, то вернуть индес элемента и выйти из цикла
3. Если элемент меньше, чем позиционный элемент, вычислить положение для левого подмассива, в противном случае в правом подмассиве
4. Повторять, пока не найдется совпадение или пока подмассив не уменьшится до нуля.
Выбор позиции для поиска в Interpolation Search
Чтобы разделить массив на две части, мы используем следующую формулу:
mid = Lo + ((Hi - Lo) / (A[Hi] - A[Lo])) * (X - A[Lo]), гдеA - наш искомый массив X - элемент, который мы ищем Lo - наименьший индекс массива Hi - наивысший индекс массива An - значение, хранящееся под индексом n в списке. Если средний элемент больше, чем искомый элемент, то позиция снова вычисляется, но уже в подмассиве. Это продолжается до тех пор, пока размер подмассива не уменьшится до нуля
Interpolation Sort
Имея отсортированный массив нам надо написать функцию поиска элемента. Линейный поиск сделает это за время O(n) , Jump Search - O(√ n), а бинарный за O(log n).
Поиск с интерполяцией (Interpolation Sort) является улучшением по сравнением с бинарным поиском для экземпляров, где значения в отсортированном массиве равномерно распределены.
Двоичный поиск всегда переходит к центру. Interpolation Sort может идти в разные места в соответствии с значением ключа, по которому выполняется поиск. Например, если значение ближе к последнему элементу, поиск выгоднее начать с конца.
Сложность выйдет O(log(log n)). О том как выбрать значения ключа, поговорим в следующем посте.
📣 Распродажа IT-курсов в Академии ТОР!
✅ До конца недели скидка 50% на первые два месяца обучения на курсы
• Тестирование (QA)
• Графический дизайн
• Python-разработчик
• Java-разработчик
✅ До конца месяца 20% скидка на все обучение.
✅ До конца месяца 25% скидка на детское обучение.
🔥промокод TGSUPER
Связаться с менеджером
Когда стоит использовать Jump Search
Бинарный поиск - лучше, чем Jump Search. Для чего же тогда использовать Jump Search. У него есть одно преимущество перед бинарным поиском: мы возвращаемся назад только один раз. Для бинарного поиска может потребоваться до O(logN) переходов в ситуации, когда мы захотим найти элемент, который является наименьшим или даже меньше чем наименьший.
Занимаетесь кодингом, разрабатываете и оптимизируете проекты, интересуетесь грамотными подходами их проектирования? Тогда вам к нам!
На __Just code IT__ вы узнаете много крутого из мира программирования😏
— Обсуждения тонкостей языков, алгоритмов, ИБ, компиляторов;
— Посты про качество кода и системное программирование;
— Дайджесты в сфере прикладного IT и научно-популярные статьи.
Ловите несколько горячих постов про архитектуру и механизмы работы проектов:
● ОС для OISC-процессоров;
● Первое знакомство с языком ассемблера;
● Поддержка микроядер в железе;
● Хардкорные инструменты для WEB-разработки.
Переходите __по ссылке__, чтобы не пропустить ни одного полезного материала🔥
Оптимально выбрать блок для пропуска в Jump Search
В худшем случае мы должны делать n/m перехов. Где n - длина массива, а m - длина размера перехода. Если проверенное значение больше, чем искомый элемент, мы выполним m-1 сравнений больше, так как будем использовать линейный поиск.
Общее количество сравнений в наихудшем случае будет ((n / m) + m - 1). Значение функции ((n / m) + m - 1) будет минимальным, когда m = √n. Следовательно, лучший размер шага будет являться m = √n
Jump Search
Как и бинарный поиск, поиск с переходом(прыжком) выполним только для отсортированных массивов. Основная идея состоит в том, чтобы проверять меньшее количество элементов, перескакивая вперед на фиксированное количество шагов, пропуская их.
Рассмотрим массив - 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, длина - 16. Размер блока возьмем - 4. Jump Search найдет значение 55 с помощью следующих шагов:
1. Переход от индекса 0 к индексу 4
2. Переход с индекса 4 к индеку 8
3. Перейсти с индекса 8 к индексу 12
4. Поскольку элемент с индексом 12 больше 55, мы вернемся на шаг назад. Переходим на индекс 8
5. Выполняем линейный поиск с индекса 8, чтобы получить элемент 55
Операция поиска в Splay Tree
Операция поиска в Splay Tree выполняет стандартный поиск BST, помимо поиска, также происходит и перемещение узла в корень.
Если поиск успешный, то найденный узел перемещается и становится корневым. В противном случае последний узел, к которому было обращение (до достижения NULL) - перемещается в корень.
Доступ к узлу
1. Через корень
2. Узел является дочерним по отношению к корню, либо левым потомком (применим правое вращение), либо правм потомком
3. Другие 2, которые расмотрим в будущем
4PDA теперь в Telegram!
4PDA – крупнейший в рунете тематический ресурс, посвященный технологиям, приложениям и кодингу. Специально для программистов у них появился официальный канал в телеграм, где вы увидите сливы платных курсов, интересные статьи и много другого!
Подписывайтесь: @4pda_forum
Расширяющее (косое) дерево - Splay Tree
Основная идея Splay Tree состоит в том, чтобы перенести элемент, к которому недавно осуществлен поиск(или доступ) в корень дерева. Тем самым дать возможность достучаться к нему повторно за O(1).
Представьте себе ситуацию, когда у нас есть миллионы ключей, и лишь некоторые из них используются чаще других, что кстати говоря весьма вероятно во многих приложениях.
Все операции с Splay Tree выполняются в среднем за O(log N) времени, где N - количество записей в дереве.
В ближайшие дни рассмотрим основные операции над данным деревом.
Видеокурсы — лучший способ выучить язык программирования
Вот каналы, которые собирают лучшие видеокурсы:
Python Expert – 585 видео про Python с нуля, Backend, Flask, Django, Data Science, Разработка Telegram ботов, Machine Learning.
ITLES – 1764 видео по Frontend, Java, Git, C#, C++, PHP, SQL, Figma, CSS, Linux, Data Science, Верстка, GameDev.
Скачивать ничего не нужно — все выложили на YouTube с доступом по ссылке.
Курс по python-разработке для тех, кто хочет сменить профессию.
Неважно, сколько вам лет и есть ли у вас опыт в IT — за 9 месяцев учёбы освоить разработку сможет каждый. Это возможно, если правильно выстроить программу и усердно заниматься. Упорство зависит от вас, а о качестве материалов позаботилась команда Яндекс Практикума.
— Программа основана на реальных требованиях работодателей к младшим специалистам.
— Интерактивный тренажёр помогает освоить теорию и закрепить её в тестах.
— Практика идёт на учебных проектах для портфолио: от чат-бота и сайта-отзовика до соцсети и многофункционального сервиса.
А ещё на курсе много работы с опытными специалистами:
— наставники-разработчики разбирают сложные темы на живых вебинарах.
— код-ревьюеры проверяют проекты и подсказывают, как их улучшить.
— кураторы помогают с организацией и расписанием.
— карьерный центр учит работать с резюме, мотивационными письмами, портфолио и собеседованиями.
78% наших выпускников находят работу в новой сфере. Они берут проекты на фрилансе, устраиваются в стартапы и крупные компании — Яндекс, ВТБ, МТС, Перекрёсток, Playrix, Сбер и другие.
Посмотреть, как учит Практикум, можно в бесплатной вводной части курса →
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
