Всё про Алгоритмы и Структуры данных
Open in Telegram
Мы не претендуем на оригинальность контента, мы лишь собираем материал из открытых источников. Ссылка: @Portal_v_IT Сотрудничество, авторские права: @oleginc, @tatiana_inc Канал на бирже: https://telega.in/c/structuredata
Show more7 757
Subscribers
+124 hours
-37 days
-2430 days
Posts Archive
Ребят, хватит спамить мне в лс по поводу безлимитных запросов к MidJourney-5.
Оставляю ссылку на официальный канал, где она доступна бесплатно без лимитов вместе с ChatGPT: @midjourney5
C++ - алгоритмы и структуры данных
В данном курсе автор рассказывает про основы языка, алгоритмы и структуры данных. Все изложено четко и понятно. Это базис, который должен знать каждый программист.
🎬 Смотреть на YouTube
Бинарный поиск на Python
В этом видео вы узнаете, что такое алгоритм, алгоритм бинарного поиска, О-большое
Перейти к просмотру [13:59]
C++ - алгоритмы и структуры данных
В данном курсе автор рассказывает про основы языка, алгоритмы и структуры данных. Все изложено четко и понятно. Это базис, который должен знать каждый программист.
🎬 Смотреть на YouTube
🧑💻 Самая простая и высокооплачиваемая работа в IT — Тестировщик.
Узнай, как стать тестировщиком без навыков программирования и зарабатывать от 80 000 ₽/мес.
Тестировщик ищет баги в приложениях, сайтах, играх и получает за это хорошие. Раньше было необходимо искать информацию самостоятельно и читать книжки. Сейчас достаточно БЕСПЛАТНО записаться на практикум в Geekbrains:
— в прямом эфире узнаешь, как тестировать сайты
— попробуешь себя в роли тестировщика и напишешь свой первый тест-кейс
— узнаешь, как получить первую работу по профессии тестировщик
— получишь набор знаний, нужный чтобы зарабатывать на тестировании от 80 000 рублей
Регистрируйся сейчас и получи грант 10 000 рублей на обучение
⚠️ Старт практикума 6 мая в 12:00 по МСК.
Реклама ООО "ГикБреинс"
erid: LjN8KENry
🕵 Курс "Алгоритмы и структуры данных от А до Я"
Курс посвящен изучению базовых алгоритмов и структур данных, знание которых необходимо для эффективного решения разнообразных задач программирования. Рассматриваются различные алгоритмы сортировки, линейные структуры данных, такие как очереди и списки.
Длительность курса: 4 урока
Перейти к курсу
Принципы, лежащие в основе алгоритмов и структур данных, всегда актуальны для любого стека технологий. Если вы уверенно владеете одним из языков программирования: C++, Python, Java, Go, JavaScript или C#, вам подойдет курс Яндекс Практикума «Алгоритмы и структуры данных». Мы поможем вам разложить все по полочкам, научим писать более чистый код, видеть разные варианты решения задачи и сравнивать их по эффективности, а ещё вы:
• разберётесь в основных алгоритмах;
• узнаете, как устроены структуры данных и когда какие применять;
• научитесь тестировать свой код и доказывать его корректность.
На всех этапах вас будут сопровождать опытные разработчики: мы не дадим просесть по учёбе и поможем выкроить время на образование. Вы будете практиковаться на реальных кейсах и положите в портфолио работающие проекты. А карьерные консультации подготовят вас к разговору о повышении или помогут с поиском новой работы.
Пройдите первый бесплатный урок с 1 по 14 мая и получите скидку 7% на оплату курса.
Рекурсия и сортировка Quick Sort простыми словами на JavaScript
Если хотите разобраться, как устроена рекурсия и сортировка массива Quick Sort, то читайте статью ниже. В ней автор простыми словами разбирает эти алгоритмы на JavaScript.
👉Читать статью
ГК «Астра» - звучит грозно и непонятно. Кто стоит за продуктами? Команды там или подразделения? Чем занимаются разработчики и что они используют?
Расставляем все точки над i в Astra Team. Здесь мы рассказываем о том, кто и как меняет ход IT.
В канале вы узнаете интересные факты о ведущем российском вендоре и познакомитесь с нашими разработчиками. Они расскажут о достижениях, работе в команде и своих задачах.
Новости, инсайты от ведущих специалистов, вакансии и полезные подборки от профессионалов своего дела - все это ждет вас в Astra Team!
Присоединяйся к тем, кто меняет ход IT! https://t.me/+6CsnY08TfPZiOTAy
Шаги решения любой задачи
Нашел статью недавно и понимаю теперь где я косячил в самом начале.
Никогда не пытайтесь сразу решать задачу оптимизированно. Или, что еще хуже, тупо не разбираясь в самой проблеме стараться ее зазубрить. Поверьте - это не выход и так вы ничему не научитесь.
В статье описываются шаги того, что надо сделать приступая к любой проблеме:
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]
Алгоритм 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 в списке. Если средний элемент больше, чем искомый элемент, то позиция снова вычисляется, но уже в подмассиве. Это продолжается до тех пор, пока размер подмассива не уменьшится до нуля
Java — один из самых популярных языков программирования. Он универсален и выступает основой всех типов сетевых приложений.
Специалисты, работающие с этим языком, востребованы на рынке. Если хотите к ним присоединиться, участвуйте в бесплатном тематическом онлайн-интенсиве.
Узнайте подробности: 👉 https://epic.st/qYqKfK
Сразу после регистрации отправим вам на почту гайд по профессии Java-разработчика. Из него вы узнаете, сложно ли изучить Java, сколько зарабатывают специалисты и как начать карьеру в этой сфере.
📌 Никакой скучной теории — только самый интересный материал и мощная практика. За 3 дня вы примерите на себя профессию Java-разработчика и поймёте, в каком направлении двигаться дальше.
📌 Спикером выступит директор центра подбора IT-специалистов SymbioWay Даниил Пилипенко. Он поделится секретами профессии и лайфхаками, расскажет, как найти первого заказчика.
🎁 Всех ждут подарки. Участвуйте, задавайте вопросы и получите сертификат на скидку 10 000 рублей на любой курс Skillbox.
Присоединяйтесь к онлайн-интенсиву с 27 по 29 апреля в 15:00 по московскому времени.
Алгоритмы и структуры данных: примеры реализаций на JavaScript
Если вы изучаете JavaScript, загляните в репозиторий на GitHub, в котором собраны реализации структур данных и множества популярных алгоритмов. К каждому алгоритму приложено короткое пояснение, которое поможет разобраться в коде.
Весь материал разделён на два уровня: для начинающих и для продвинутых:
https://github.com/trekhleb/javascript-algorithms
Введение в криптографию и шифрование
Когда-то материал из этой лекции читали в МГУ целых полгода. Поэтому в статье автор не углублялся в работу шифров и рассказал об общих терминах в криптографии и шифровании, а также разобрал простым языком несколько алгоритмов шифрования:
https://habr.com/ru/company/yandex/blog/324866/
Лекция на YouTube: https://youtu.be/mE_s-R5wvpw
Операции над Min Heap
1. getMin - возвращает корневой элемент вашего Min Heap
2. extractMin - удаляет минимальный элемент из MinHeap (сложность О(logN) из-за того что надо поддерживать свойства кучи)
3. reduceKey - уменьшает значение ключа (так же сложность O(logN)
4. insert - вставка нового элемента (занимает также O(logN)) Добавит вам новый ключ в конец дерева, если новый ключ больше, чем родительский, вам не придется ничего делать. В противном случае нужно пройти вверх, чтобы исправить свойства кучи
5. delete - удаление ключа (также займет в худшем случае O(logN)
Представление Двоичной кучи
Как мы вчера уже поняли - двоичная куча - это полноценное двоичное дерево. Представляется куча в виде массива.
Корневой элемент будет всегда в arr0 (нулевом индексе массива). В табличке (на картинке) - как раз указано, как в дальнейшем берутся индексы.
Есть интересные свойства:
1. arr(i-1) / 2 - вернет всегда родительский узел
2. arr(2 * i) + 1 - вернет левый дочерний узел
3. arr(2 * i) + 2 - вернет правый дочерний узел
Reverse Linked List
Операция заключается в себе то, что нам необходимо последний узел - первым, и соответственно перевернуть все остальные элементы также.
Для этого нам надо перейти сначала в конец списка. Конец списка(односвязного) всегда указывает на NULL своим указателем next. Теперь нам надо поменять его ссылку next на предыдущий элемент (который идет за ним).
Мы должны убедиться, что последний узел не является потеряным. Таким образом у нас будет создан временный узел, который выглядит как головной, указывающий на последний узел. Теперь надо сделать (через цикл), чтобы все левые узлы указывали не на следующий элемент, а на свой предыдущий.
Эту операцию надо сделать всем узлам, кроме первого. Первый же узел должен указывать на Null.
Теперь можем взять тот temp head и установить его как оригинальный head. Вуаля, мы перевернули наш связный список
Операция вставки в связный список (LinkedList)
Добавление нового узла в связный список - это не такое и простое действие для понимания. Поэтому стоит его разобрать (как и все последующие действия). На изображении вы можете увидеть подробности. А пока поговорим про операции.
Давайте представим ситуацию, когда мы хотим вставить узел С между узлами A и B.
Соответственно наша ссылка next нашего узла C должна сначала начинать указывать на узел(node) B.
После чего узел A также должен сменить свою ссылку next на новое место: на узел С, который мы и вставляем. Соответственно у узла А пропадет ссылка на узел B, которая была изначально.
Аналогичные шаги надо будет сделать, если узел вставляется в начало списка (только с указателем head не забыть его поставить на новое значение) Вставка в конец, новый узел будет указывать указателем next на Null - тоже не забудьте это.
Available now! Telegram Research 2025 — the year's key insights 
