Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Герои Войны - микс стратегии и РПГ. Собери лучшую армию и победи всех врагов. В игре 7 различных режимов - как для любителей PvE, так и PvP.

Герои Войны

Стратегии, Мидкорные, Экшены

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Java + Telegram (ссылка)

С этим тегом используют

Программирование IT Программист IT юмор Обучение Android Python Вертикальное видео Юмор Картинка с текстом Короткие видео Девушки Эротика Кот Все
39 постов сначала свежее
4
mimokrokodilchik
mimokrokodilchik
1 год назад
Серия Деревья

Продолжаем решать деревья. Инвертирование дерева - одна из самых популярных задач⁠⁠

Эта часть является продолжением цикла лекций про деревья. В этой части мы снова воспользуемся рекурсией чтобы инвертировать дерево. Задача довольно популярна и по сложности является довольно простой.

Допустим у нас есть дерево

Допустим у нас есть дерево ниже:

Продолжаем решать деревья. Инвертирование дерева - одна из самых популярных задач IT, Программист, Telegram, Telegram (ссылка), Java

Инвертируем дерево

Целью является инвертировать дерево. Те для каждого узла нужно поменять местами его левый и правый наследники. Логику надо также применять к наследникам наследников.

Продолжаем решать деревья. Инвертирование дерева - одна из самых популярных задач IT, Программист, Telegram, Telegram (ссылка), Java

Давайте проговорим какие этапы нужно продумать:

  • Проитерироватсья по всем узлам рекурсией те нам понадобится функция которая будет вызывать саму себя.

  • Нижние пустые null узлы нужно будет проигнорировать

  • Для всех остальных узлов нужно выполнить смену ссылок для правого и левого наследников

Решение:

Продолжаем решать деревья. Инвертирование дерева - одна из самых популярных задач IT, Программист, Telegram, Telegram (ссылка), Java

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

Показать полностью 2
[моё] IT Программист Telegram Telegram (ссылка) Java
3
19
mimokrokodilchik
mimokrokodilchik
1 год назад
Лига программистов
Серия Деревья

Используем рекурсию для решения задач на деревья. Ищем максимальную глубину дерева⁠⁠

В прошлой части мы рассмотрели разные подходы рекурсивного обхода дерева. Давайте воспользуемся некоторыми из них для решения довольно известных задач.

Находим максимальную глубину дерева.

Одна из самых популярных и простых задач на деревья - поиск узла находящегося на максимально удаленом расстоянии. Рассмотрим дерево ниже:

Используем рекурсию для решения задач на деревья. Ищем максимальную глубину дерева IT, Программист, Telegram (ссылка), Telegram, Java, Длиннопост

Высота данного дерева - пять

Довольно очевидно что самый длинный узел в данном дереве - M и он является пятым по счету если головной является первым.

Как решать данную задачу используя рекурсию.

Если сильно упрощать то нам нужно сделать 2 действия:

  • Обойти все узлы

  • Каким то образом "сохранять" состояния каждый раз когда мы обходим узлы

Но как же сохранять состояния о той глубине на которой мы побывали? Тут есть как минимум два варианта:

  • Использовать возвращемое значение самой рекурсивной функции и "возвращать" её на уровень выше.

  • Иметь какой то объект в котором мы будем сохранять состояния находясь внутри рекурсии

Воспользуемся первым подходом. Сосредоточимся на следующих аспектах:

  • Рекурсивная функция должна передавать значение сама себе "наверх"

  • Определить какое именно значение должно перебрасываться.

Логика передаваемого "наверх" значения.

  • Самые нижние уровни (те что указывают на null) должны возвращать 0 тк они не включены в расчет глубины данного подграфа

  • Нижний уровень который с листьями имеет лишь null предков должен вернуть 1 тк он является первым уровнем

  • Узел выше чем 1й (те не лист) должен выбирать максимальный уровень из двух его наследников и добавлять 1 тк находится на уровень выше из наибольшего из них.

После данных рассуждений у нас вырисовывается вот такая картина:

Используем рекурсию для решения задач на деревья. Ищем максимальную глубину дерева IT, Программист, Telegram (ссылка), Telegram, Java, Длиннопост

null уровни 0, листья 1 и все остальные узлы - выбирает наибольшее из наследников и добавляют 1.

К чему привели наши рассуждения?

Все эти рассуждения намекают что в нашей итеративной функциии будет 3 разных сценария и функция которая выбирает наибольшее из двух. Именно подобные размышления чаще всего помогают перевести абстрактные размышления в код.

И так первая версия кода:

Используем рекурсию для решения задач на деревья. Ищем максимальную глубину дерева IT, Программист, Telegram (ссылка), Telegram, Java, Длиннопост

Версия рабочая но слишком многословная - хотя для собеседования вполне подойдет.

Самый важная часть кода - итеративный вызов левого и правого поддерева и последующий расчет максимального значения среди них. И конечно же добавление 1 наибольшему из них чтобы учесть и текущую высоту.

Этот код можно было бы улучшить удалив случай когда мы находимся в самом низу - дело в том что если условие истино то возвращаемое значение maxDepth + 1 будет также равно 1.

Спасибо за внимание, всем кому интересна промышленная разработка приглашаю в мой канал.

Показать полностью 2
[моё] IT Программист Telegram (ссылка) Telegram Java Длиннопост
1
5
mimokrokodilchik
mimokrokodilchik
1 год назад
Серия Деревья

Рекурсивно обходим деревья. Прямой, Центрированый, Обратный обходы⁠⁠

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

Рекурсивно обходим деревья. Прямой, Центрированый, Обратный обходы Telegram (ссылка), Программист, Java, Программирование, IT, Дерево, Длиннопост

Обход деревьев часто ощущается как лабиринт

Давайте рассмотрим уже знакомое дерево:

Рекурсивно обходим деревья. Прямой, Центрированый, Обратный обходы Telegram (ссылка), Программист, Java, Программирование, IT, Дерево, Длиннопост

Прямой обход дерева (Префиксный) - NLR

В прошло части мы уже итерировались по дереву рекурсивно. В нем мы сначала печатали значение узла (Node) затем посещаем левое поддерево (Left) и лишь потом правое поддерево (Right). Такой подход называется прямым или еще префиксным - NLR.

Рекурсивно обходим деревья. Прямой, Центрированый, Обратный обходы Telegram (ссылка), Программист, Java, Программирование, IT, Дерево, Длиннопост

Распечатка значения и последующее движение влево вниз и уже затем вправо.

Центрированный обход дерева (Инфиксный) LNR

Теперь сделаем одно минимальное изменение - сначала мы пойдем в левое поддерево (Left) затем распечатаем значение узла (Node) и потом пойдем в правое поддерево (Right) - этот обход называют Инфиксным (от лат. in внутри fixus закрепленный) или центрированным - LNR. Понятие инфиксный прошло из математики. Если очень упрощать значит что N находится между L и R.

Рекурсивно обходим деревья. Прямой, Центрированый, Обратный обходы Telegram (ссылка), Программист, Java, Программирование, IT, Дерево, Длиннопост

разница лишь в 1 линии но процес "обхода" меняется.

И так вроде рекурсия выполнила ровно такой же обход, но теперь процесс распечатки значения узла мы стали делать после того как уходим "влево". Теперь если задуматься то первая печать произойдет лишь когда мы дойдем до нижнего левого узла. Давайте изобразим как будет выглядеть "обход" а порядок печати значений узлов:

Рекурсивно обходим деревья. Прямой, Центрированый, Обратный обходы Telegram (ссылка), Программист, Java, Программирование, IT, Дерево, Длиннопост

Обратный или Постфиксный обход. LRN

Думаю уже понятно что данный подход подразумевает печать значения узла (Node) после посещения левого (Left) поддерева и правого (Right) поддерева - LRN

Рекурсивно обходим деревья. Прямой, Центрированый, Обратный обходы Telegram (ссылка), Программист, Java, Программирование, IT, Дерево, Длиннопост

Печатаем лишь после обхода левого и затем правого поддеревьев.

Порядок распечатки изображен ниже:

Рекурсивно обходим деревья. Прямой, Центрированый, Обратный обходы Telegram (ссылка), Программист, Java, Программирование, IT, Дерево, Длиннопост

Минимальные изменения - большие последствия.

Изза минимальных изменений (меняя лишь порядок одной строчки) мы получили разные обходы дерева. Это позволит нам решать разные задачи в будущем.

Следующий этап.

В следующей статье мы рассмотрим какие задачи мы можем решать используя описанные подходы. Одна из главных целей цикла статей - помочь преодолеть страх задач про деревья во время собеседований. Думаю стоит повторить еще раз - как только вам прилетела задача на деревья во время собеса начинайте с того что напишите функцию обхода. Большинство алгоритмических задач решается именно через рекурсию (но не только через неё).

Кому интересна промышленная разработка и Java приглашаю в мою группу. Спасибо за внимание.

Показать полностью 6
[моё] Telegram (ссылка) Программист Java Программирование IT Дерево Длиннопост
1
11
mimokrokodilchik
mimokrokodilchik
1 год назад
Серия Деревья

Что такое деревья и как с ними работать. Используем Java⁠⁠

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

Деревья бывают разные. Мы рассмотрим двоичное сбалансированное.

В данной статье мы рассмотрим наиболее популярные — двоичные сбалансированные (красно-черные) деревья.

Что такое деревья и как с ними работать. Используем Java IT, Программист, Telegram, Telegram (ссылка), Дерево, Java, Программирование, Длиннопост

Пример бинарного дерева. У каждого листка может быть не более двух наследников.

Основные понятия.

Рассматривая бинарные деревья нужно знать следующие понятия:

  • Node - он же узел. Это элемент дерева, содержащий какое-то значение, которое может быть любым, от примитива (например, числа) до объекта (например, пользователя).

  • Edge или ребро. Ссылка, соединяющая один узел с другим или указывающая на пустое значение (null).

  • Root Node. Верхний узел дерева, от которого начинается вся структура.

  • Leaf - Узел, не имеющий наследников, то есть находящийся в самом низу иерархии.

  • Высота дерева - Количество "уровней", от корня до самого нижнего узла.

Что такое деревья и как с ними работать. Используем Java IT, Программист, Telegram, Telegram (ссылка), Дерево, Java, Программирование, Длиннопост

Несбалансированные деревья могут выродиться в связный список.

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

Что такое деревья и как с ними работать. Используем Java IT, Программист, Telegram, Telegram (ссылка), Дерево, Java, Программирование, Длиннопост

деградированное дерево вырожденное в связанный список.

Сбалансированные деревья.

Сбалансированные (например красно-черные) при каждом добавлении нового узла проверяют, является ли дерево "несбалансированным". Если условие истино то дерево делает "разворот" свои узлов.

Что такое деревья и как с ними работать. Используем Java IT, Программист, Telegram, Telegram (ссылка), Дерево, Java, Программирование, Длиннопост

Пример красно черного сбалансированного дерева. Именно такое используется в TreeMap

Сбалансированные деревья никогда не вырождаются в связанные списки. В J ava джаве деревья представлены коллекцие TreeMap и TreeSet (который инкапсулирует TreeMap внутри себя).

Как могут быть представлены деревья на уровне кода.

Если мы не используем готовые решения вроде TreeMap то простейшее дерево может быть представлено в виде следующего класса:

Что такое деревья и как с ними работать. Используем Java IT, Программист, Telegram, Telegram (ссылка), Дерево, Java, Программирование, Длиннопост

Простейший узел. По большому счету это единственный важный момент.

Итого что мы имеем:

  • String data это то значение которое хранит узел. Это может быть любым объектом - в нашем случае просто строка.

  • Node left - ссылка на левого наследника.

  • Node right - ссылка на правого.

Используя Node класс создадим дерево

Поочередно инициализируем наше дерево с 7 узлами

Что такое деревья и как с ними работать. Используем Java IT, Программист, Telegram, Telegram (ссылка), Дерево, Java, Программирование, Длиннопост

Изобразим полученное дерево:

Что такое деревья и как с ними работать. Используем Java IT, Программист, Telegram, Telegram (ссылка), Дерево, Java, Программирование, Длиннопост

Итерация по дереву - один из самых важных навыков для решения задач.

Большинство (если не все) задач, связанных с деревьями требуют итерации или обхода узлов. Чаще всего, умея обходить дерево, вы решаете львиную часть проблемы. В данной статье мы рассмотрим лишь 1 вариант итерации, я напишу отдельные статьи чтобы рассмотреть другие подходы.

Используем рекурсию для итерации и распечатки всех элементов.

Каждый раз когда вам прилетела задача по деревьям, помните - скорее всего в основании решения будет рекурсия (это не всегда так, но довольно часто). Те у вас будет функция которая будет вызывать сама себя. Для распечатки дерева напишем рекурсию которая обходит все элементы начиная с левого наследника:

Что такое деревья и как с ними работать. Используем Java IT, Программист, Telegram, Telegram (ссылка), Дерево, Java, Программирование, Длиннопост

Код вроде простой но не стоит его недооценивать. Давайте проговорим этапы:

  1. Распечатываем значение узла

  2. Идем к левому наследнику и повторяем действие (те опять распечатываем и идем влево)

  3. после того мы обошли все левые и уткнулись в null мы "возвращаемся" на уровень который находится наверху от нижнего левого и идем в правый наследник

  4. зайдя в правый распечатывем и идем влево повторяя шаги 2-3.

Все это звучит странно проще будет изобразить:

Что такое деревья и как с ними работать. Используем Java IT, Программист, Telegram, Telegram (ссылка), Дерево, Java, Программирование, Длиннопост

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

Кому интересна разработка приглашаю в мой телеграм канал

Показать полностью 8
[моё] IT Программист Telegram Telegram (ссылка) Дерево Java Программирование Длиннопост
21
lifeofjuniordev
lifeofjuniordev
1 год назад

ПРОКЛЯТИЕ ДЖЕНЕРИКОВ⁠⁠

Дженерики могут показаться очень простой темой.

Например, вот так в Java выглядят классные и простые методы интерфейса List:

ПРОКЛЯТИЕ ДЖЕНЕРИКОВ Telegram (ссылка), Программирование, IT, Java

Но у обобщений много нюансов: вложенность, вариантность, границы и т.д. Это сильно усложняет их использование.

Вот не менее классный, но совсем непростой flatMap интерфейса Stream🙈:

ПРОКЛЯТИЕ ДЖЕНЕРИКОВ Telegram (ссылка), Программирование, IT, Java

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

Из-за таких сложностей, в языке Go (философия которого - простота и минимализм) дженерики появились аж через 12 лет после релиза языка. А первый коммент про то что нужны дженерики появился меньше чем через 24 часа🙃

Вообще, во многих популярных языках дженерики появились не с первой версии, но рано или поздно, разработчики были вынуждены их ввести:
- С++ вышел в 1979, а дженерики добавили в 1986
- Java - 1996, дженерики - 2004
- C# - 2001, дженерики - 2005
- Go - 2009, дженерики - 2021

👨‍💻 Джуниор

Показать полностью 1
Telegram (ссылка) Программирование IT Java
4
0
f.lattys
f.lattys
1 год назад

Java. Эффективное программирование⁠⁠

Java. Эффективное программирование Программирование, IT, Java, Книги, Обучение, Telegram (ссылка)

Автор: Джошуа Блох

Год: 2019

Количество страниц: 466

Язык программирования Java существенно изменился со времени предыдущего издания книги, опубликованного вскоре после выпуска Java б. Этот классический труд тщательно обновлен, чтобы читатели могли в полной мере воспользоваться возможностями последних версий языка и его библиотек функций. В современном Java поддерживается несколько парадигм программирования. Поэтому программисты часто испытывают потребность в конкретных рекомендациях, которые и описаны в данной книге.

Как и в предыдущих изданиях, каждая глава книги состоит из ряда разделов, в каждом из которых описаны конкретные советы, приведены тонкости платформы Java и содержатся обновленные примеры кода. Для каждой темы приводятся всеобъемлющее описание и пояснения, как следует поступить в данном случае, как не следует и почему.

Третье издание охватывает особенности языка программирования и библиотек, появившихся в Java 7, 8 и 9, в том числе конструкции функционального программирования, добавленные к своим объектно-ориентированным корням. В книгу включены также многие новые советы и глава, посвященная лямбда-выражениям и потокам.

Скачать книгу

Показать полностью 1
Программирование IT Java Книги Обучение Telegram (ссылка)
1
PythonWorld
PythonWorld
1 год назад

Дешевый ChatGPT-4 без VPN⁠⁠

Многие сталкиваются с проблемой получения доступа к OPENAI или переживают из-за большой цены за подписку. Специально для вас, мы встроили GPT-4 в Telegram бота, который также работает с изображениями. Наверное, это лучший бот, которого вы когда-либо видели. Тестируйте: t.me/Gpt4_NeuroBot?start=14

IT ChatGPT Gpt4 Нейронные сети VPN Чат-бот Telegram бот Подписки Текст Telegram (ссылка) Python Java C++ Javascript SQL
6
1
f.lattys
f.lattys
1 год назад

Книжка для новичков - Легкий способ выучить Java⁠⁠

Книжка для новичков - Легкий способ выучить Java Программирование, IT, Java, Обучение, Книги, Telegram (ссылка)

Автор: Брайсон Пейн

Год: 2019

Количество страниц: 402

Java – один из самых популярных и востребованных языков программирования в мире, но и один из самых сложных для изучения, особенно для новичков. Автор этой книги, Брайсон Пейн, разработал собственный метод обучения, который строится на прохождении материала исключительно на практических примерах. Начните изучать Java, создавая несложные игры для ПК и Android, узнавайте, как работает инструмент JShell, используйте популярные среды разработки Eclipse и Android Studio, учитесь искать и исправлять ошибки в коде и становитесь востребованным программистом с книгой «Легкий способ выучить Java»!

Скачать книгу

Показать полностью 1
Программирование IT Java Обучение Книги Telegram (ссылка)
2
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии