Разбор репо с Copilot Пока не успеваю написать следующий пост про алгоритмы, хочу поделиться с вами прикольным способом изучать репо. Вероятно, многие из вас уже знают об этом, но другим этот вариант может быть будет полезен. P.S. Вероятнее всего, будет работать с изменением локации через сторонние сервисы. Когда вы заходите на страницу проекта на GitHub через компьютер или ноутбук, то в правом верхнем углу есть иконка Copilot - ИИ агента от Microsoft. При нажатии на эту кнопку открывается стран...
Solidity. Смарт контракты и аудит
Обучение Solidity. Уроки, аудит, разбор кода и популярных сервисов
Графики
📊 Средний охват постов
📉 ERR % по дням
📋 Публикации по дням
📎 Типы контента
Лучшие публикации
20 из 20def bellman_ford(graph, start): distances = {node: float("infinity") for node in graph} distances[start] = 0 for _ in range(len(graph) - 1): # V-1 итераций for node in graph: for neighbor, weight in graph[node].items(): if distances[node] + weight < distances[neighbor]: distances[neighbor] = distances[node] + weight return distances Сложность Беллмана–Форда выше — O(V·E), но он способен обнаруживать отрицательные циклы и, соответственно, определять, что задача не имеет решения. Сравним два подхо...
Сравнивая эти два подхода для лабиринта, можно выделить несколько критериев. Для задачи нахождения любого выхода оба алгоритма работают, но DFS требует меньше памяти. Для поиска кратчайшего пути BFS гарантирует результат, а DFS — нет. В глубоких лабиринтах рекурсивный DFS рискует переполнить стек, тогда как итеративный и BFS безопасны. В широких лабиринтах BFS может потребить много памяти, а DFS остается эффективным. Что касается вычислительной сложности, то и для DFS, и для BFS она одинакова. В...
Фиксы SoliditySet Спасибо всем, кто сообщал мне о проблемах на платформе и подсказывал лучшие решения для тех или иных случаев. Сегодня был выполнен очередной фикс: 1. Были исправлены некоторые не работающие ссылки; 2. Обновлено отображение на мобильных экранах: немного удобнее использовать на планшетах; 3. К нумерации уроков были добавлены заголовки уроков; 4. Подсказки и ответы для модуля 5 (практика поиска уязвимостей) были скрыты под спойлером. (Тут я еще думаю как сделать это красивее...). ...
Важно понимать разницу между динамическим программированием и подходом «Разделяй и властвуй». Оба метода дробят задачу, но делают это по-разному. В «Разделяй и властвуй» подзадачи независимы и не перекрываются — каждая решается отдельно и больше не встречается. Классический пример — сортировка слиянием (Merge Sort), где массив делится на независимые половины, которые сортируются сами по себе и никогда не влияют на вычисление друг друга. В динамическом программировании подзадачи обязательно перек...
Эта книга не про IT, это больше популярное чтиво о том, как работает физика в конструкциях. Язык и объяснения невероятно простые. Если бы так физику преподавали в школе, я бы точно получал одни пятерки! Потрясающие графики и фотографии, рисунки и силуэты, описания базовых принципов растяжения и деформации и много другое! Просто зачитываюсь в свободное время и наслаждаюсь, как можно просто писать о таких сложных вещах! Есть еще несколько других интересных книг, но расскажу о них позже, если вам з...
Сравнивая эти классы, можно выстроить их от самого быстрого к самому медленному: O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2ⁿ) < O(n!). Важно помнить, что нотация Big O применяется не только ко времени, но и к памяти — это называется пространственной сложностью (space complexity). Алгоритм может работать очень быстро, но при этом потреблять огромное количество оперативной памяти, и иногда приходится сознательно выбирать: потратить больше памяти ради скорости или наоборот. Стоит учитывать и...
Теперь разберём реализацию алгоритма на языке Python с использованием модуля heapq, который предоставляет приоритетную очередь. Приоритетная очередь отличается от обычной тем, что всегда возвращает элемент с наименьшим ключом (в нашем случае — расстоянием). Это как раз соответствует жадному выбору ближайшей вершины. import heapq # Модуль для приоритетной очереди (мин-куча) def dijkstra(graph, start): # 1. Инициализация: все расстояния = бесконечность distances = {node: float("infinity") for node...
Для разработчиков Solidity и смарт-контрактов это открывает новое поле для творчества. Востребованными становятся контракты инфраструктуры кошельков: пэймастеры, менеджеры сессионных ключей, плагины и контракты для обработки интентов. Сама архитектура интентов, где пользователь говорит «что я хочу», а кошелек и сеть солверов думают «как это сделать», становится мейнстримной. Это порождает новые типы контрактов — settlement contracts и filler contracts. Важно понимать, что это не просто теория. Т...
Алгоритмы. Обход в глубину (DFS) После небольшой паузы мы продолжаем разбирать различные алгоритмы. Обход в глубину (DFS) — это один из фундаментальных алгоритмов на графах, и его легче всего понять через аналогию с исследованием пещеры. Представь, что ты стоишь в системе туннелей с множеством разветвлений. Твоя стратегия заключается в том, чтобы выбрать первый попавшийся проход и идти по нему до тех пор, пока не упрешься в тупик. Только тогда ты возвращаешься назад к последнему перекрестку, где...