Forwarded from DziS Science | Data Science
В процессе реализации решений на Leetcode понял, что совсем не помню алгоритмы прохода по бинарному дереву 🌳.
Предлагаю вспомнить варианты поиска в глубину (Depth-first search).
Классических вариантов 3:
1. DFS Preorder. Классический проход в глубину, где сначала проходится корень дерева, далее спускается по каждой ветке слева направо вглубь до самого глубокого листа.
2. DFS Inorder. Обратный проход. Начинается с левого листа, далее в вершину, потом обратно на уровень ниже в правый лист.
3. DFS Posorder. Обратный проход. Начинается с левого листа нижнего, проходя по всем одноуровневым листам слева направо, только потом поднимаемся на уровень выше.
Для тех кто ничего не понял, приведены картинки и справа для сравнения поиск в ширину (BFS).
Предлагаю рассмотреть красивые рекурсивные реализации данных методов для примера с картинки.
Предлагаю вспомнить варианты поиска в глубину (Depth-first search).
Классических вариантов 3:
1. DFS Preorder. Классический проход в глубину, где сначала проходится корень дерева, далее спускается по каждой ветке слева направо вглубь до самого глубокого листа.
2. DFS Inorder. Обратный проход. Начинается с левого листа, далее в вершину, потом обратно на уровень ниже в правый лист.
3. DFS Posorder. Обратный проход. Начинается с левого листа нижнего, проходя по всем одноуровневым листам слева направо, только потом поднимаемся на уровень выше.
Для тех кто ничего не понял, приведены картинки и справа для сравнения поиск в ширину (BFS).
Предлагаю рассмотреть красивые рекурсивные реализации данных методов для примера с картинки.
class Node:В целом, полезно знать при работе с графами. Могут спросить на душных технических собесах, к которым я и готовлюсь🤓💼
def __init__(self, key):
self.left = None
self.right = None
self.val = key
def preorder(root):
return [root.val] + preorder(root.left) + preorder(root.right) if root else []
def inorder(root):
return inorder(root.left) + [root.val] + inorder(root.right) if root else []
def postorder(root):
return postorder(root.left) + postorder(root.right) + [root.val] if root else []
# Пример
if __name__ == "__main__":
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
# Вызов функций
print(f"DFS preorder {preorder(root)}")
print(f"DFS inorder {inorder(root)}")
print(f"DFS postorder {postorder(root)}")
Forwarded from DevFM
Практика распила монолита
Несколько лет в индустрии шли жаркие споры "микросервисы против монолитов". У каждой из сторон было множество адептов. Однозначного решения нет.
Нам, как разработчикам, интересна статья про переход от монолитной архитектуры к микросервисной. Своё повествование автор ведет в разрезе высокоуровневых задач, которые приходится решать при использовании микросервисной архитектуры:
— оркестрация, управление множеством сервисов, их масштабированием и распределением нагрузки между разными серверами
— контейнеризация и хранение контейнеров
— применение API Gateway, настоящего швейцарского ножа в мире микросервисов для решения сотни инфраструктурных задач
— организация межсервисного взаимодействия. Вопрос организации остро встаёт с ростом числа команд, занимающихся разными сервисами. Без выстроенного взаимодействия уровень энтропии быстро нарастает, а проект превращается в хаос
— tracing, прослеживание пути запроса среди множества сервисов. Предлагаемое решение jaeger мы уже упоминали в отдельном посте про разухабистое логгирование
— шаблоны сервисов — не совсем очевидный пункт, но очень важный. Всё, что приведено выше, обычно решается в процессе расширения системы. Шаблонами же следует заняться с самого начала. В будущем сэкономит много времени и позволит избежать зоопарка таких похожих, но таких разных сервисов :)
В статье приводятся не только теоретические выкладки, но и конкретные инструменты. Отдельно можно порекомендовать сервис, которым пользуется автор для выбора инструментов — Cloud Native Computing Foundation. Очень классная интерактивная и наглядная карта, где для различных задач собраны сервисы, решающие эти задачи.
В заключении автор напоминает: прежде чем внедрять — подумайте, какие задачи и проблемы вы этим решаете. Эта истина применима к любой технологии
#skills
Несколько лет в индустрии шли жаркие споры "микросервисы против монолитов". У каждой из сторон было множество адептов. Однозначного решения нет.
Нам, как разработчикам, интересна статья про переход от монолитной архитектуры к микросервисной. Своё повествование автор ведет в разрезе высокоуровневых задач, которые приходится решать при использовании микросервисной архитектуры:
— оркестрация, управление множеством сервисов, их масштабированием и распределением нагрузки между разными серверами
— контейнеризация и хранение контейнеров
— применение API Gateway, настоящего швейцарского ножа в мире микросервисов для решения сотни инфраструктурных задач
— организация межсервисного взаимодействия. Вопрос организации остро встаёт с ростом числа команд, занимающихся разными сервисами. Без выстроенного взаимодействия уровень энтропии быстро нарастает, а проект превращается в хаос
— tracing, прослеживание пути запроса среди множества сервисов. Предлагаемое решение jaeger мы уже упоминали в отдельном посте про разухабистое логгирование
— шаблоны сервисов — не совсем очевидный пункт, но очень важный. Всё, что приведено выше, обычно решается в процессе расширения системы. Шаблонами же следует заняться с самого начала. В будущем сэкономит много времени и позволит избежать зоопарка таких похожих, но таких разных сервисов :)
В статье приводятся не только теоретические выкладки, но и конкретные инструменты. Отдельно можно порекомендовать сервис, которым пользуется автор для выбора инструментов — Cloud Native Computing Foundation. Очень классная интерактивная и наглядная карта, где для различных задач собраны сервисы, решающие эти задачи.
В заключении автор напоминает: прежде чем внедрять — подумайте, какие задачи и проблемы вы этим решаете. Эта истина применима к любой технологии
#skills
Хабр
Микросервисы для чайников: как на них перейти с монолита с нуля
Меня зовут Семен Катаев , я работаю в Авито над процессом перехода от монолитной архитектуры к микросервисам. Переход у нас все еще продолжается, но мне уже есть чем с вами поделиться. Это краткий...
Forwarded from Big data world
This media is not supported in your browser
VIEW IN TELEGRAM
Представляем PivotTableJS,которыйпозволяет интерактивно анализировать данные в Jupyter 🚀
https://shly.link/ghM2PV
https://shly.link/ghM2PV
#interview #ml #systemdesign
По описанию показалось, что там много материала. Но пробежаться достаточно
По описанию показалось, что там много материала. Но пробежаться достаточно
Forwarded from Записки MLEшника (Egor)
Как говорил Сократ: "Я знаю только то, что ничего не знаю". Словил сегодня вечером это чувство, когда блуждал по репе Тинькоф.
В секции подготовки к мл интервью много всякой годноты. Тут помимо прочего прилично ссылок на рускоязычные курсы, а тут по дизайну мл систем.
Ех, вот и как развиваться, когда глаза разбегаются 🥲
В секции подготовки к мл интервью много всякой годноты. Тут помимо прочего прилично ссылок на рускоязычные курсы, а тут по дизайну мл систем.
Ех, вот и как развиваться, когда глаза разбегаются 🥲
Forwarded from DevFM
Покоряем большие CSV
Классная практическая статья Working with large CSV files in Python from Scratch рассказывает о хитростях работы с большими CSV-файлами.
В статье рассматриваются примеры:
— подсчёт строк в большом файле. Для этого применяется mmap, который использует низкоуровневое API операционной системы. Это позволяет ускорить чтение большого файла. Сам mmap заслуживает отдельной статьи. В ней с примерами на питоне объясняется, откуда берётся ускорение, плюс другие интересности, в том числе уровня системных вызовов ядра
— разбиение большого файла на части, с которыми дальше удобнее работать
— перемешивание строк в файле. Такое бывает нужно, когда данные используются для обучения модельки машинного обучения
— хранение в виде столбцов ускорит выполнение запросов путём ограничения данных, среди которых идет поиск. Этот пункт достаточно хардкорный, рекомендуем пройтись отладчиком по коду — иначе не разобраться в нюансах
Мы на практике неоднократно сталкивались с гигабайтными CSV, которые иногда даже не умещались в оперативную память.
Например, вы знаете, что линуксовый sort --unique читает файл целиком в оперативную память? А для работы ему надо примерно в 2,5 раза больше памяти, чем весит исходный файл. То есть для сортировки файла в 10 гигов нужно около 25 гигов оперативной памяти. Решение этой проблемы заслуживает отдельного поста.
#python
Классная практическая статья Working with large CSV files in Python from Scratch рассказывает о хитростях работы с большими CSV-файлами.
В статье рассматриваются примеры:
— подсчёт строк в большом файле. Для этого применяется mmap, который использует низкоуровневое API операционной системы. Это позволяет ускорить чтение большого файла. Сам mmap заслуживает отдельной статьи. В ней с примерами на питоне объясняется, откуда берётся ускорение, плюс другие интересности, в том числе уровня системных вызовов ядра
— разбиение большого файла на части, с которыми дальше удобнее работать
— перемешивание строк в файле. Такое бывает нужно, когда данные используются для обучения модельки машинного обучения
— хранение в виде столбцов ускорит выполнение запросов путём ограничения данных, среди которых идет поиск. Этот пункт достаточно хардкорный, рекомендуем пройтись отладчиком по коду — иначе не разобраться в нюансах
Мы на практике неоднократно сталкивались с гигабайтными CSV, которые иногда даже не умещались в оперативную память.
Например, вы знаете, что линуксовый sort --unique читает файл целиком в оперативную память? А для работы ему надо примерно в 2,5 раза больше памяти, чем весит исходный файл. То есть для сортировки файла в 10 гигов нужно около 25 гигов оперативной памяти. Решение этой проблемы заслуживает отдельного поста.
#python
Medium
Working with large CSV files in Python from Scratch
5 Techniques
Forwarded from Aleksandr Isakov
https://habr.com/ru/company/glowbyte/blog/519382/
https://habr.com/ru/amp/post/524150/
https://habr.com/ru/company/glowbyte/blog/534610/
https://habr.com/ru/company/glowbyte/blog/552452/
https://habr.com/ru/amp/post/524150/
https://habr.com/ru/company/glowbyte/blog/534610/
https://habr.com/ru/company/glowbyte/blog/552452/
Хабр
ML и DS оттенки кредитного риск-менеджмента
Всем привет. Мы команда Advanced Analytics GlowByte и запускаем цикл статей о моделировании в задачах управления кредитным риском. Цель цикла — кратко рассказать о сфере, расширить словарь...
Forwarded from Love. Death. Transformers.
Hf выпустили годный блог по обучению на одной gpu
blog
blog
huggingface.co
GPU
We’re on a journey to advance and democratize artificial intelligence through open source and open science.
Forwarded from Кодим на Коленке | Уроки по программированию
Redis: основы и практическое использование
Redis — база данных типа «ключ-значение». Она невероятно простая, но хорошо себя зарекомендовала как хранилище временных данных.
Сейчас эта NoSQL'ка используется почти в каждом проекте или для хранения временных данных (сессии пользователей), или для кеширования запросов. Знать её просто необходимо.
Подробнее: 👉тут
#видео #теория
Redis — база данных типа «ключ-значение». Она невероятно простая, но хорошо себя зарекомендовала как хранилище временных данных.
Сейчас эта NoSQL'ка используется почти в каждом проекте или для хранения временных данных (сессии пользователей), или для кеширования запросов. Знать её просто необходимо.
Подробнее: 👉тут
#видео #теория
Forwarded from Борис опять
Forwarded from Kaggling (Vadim Irtlach)
Всем привет! Сегодня хочу с вами поделиться документом, которым я пользовался на протяжение всего Feedback Prize 3.0 соревнования, где мы получили серебро. Там какую-ту часть информации я удалил, потому что оно было связано больше с данными из соревнования, но все названия статей и соответственно к ним ссылки приложены.
Пусть это для вас будет как методичка или шпаргалка! Удачи на будущих NLP соревнованиях!
https://docs.google.com/document/d/11Kq3XbYCgYKB3sgHlntNDyF6pCD_Smn6pMbfQl-vuAU
Пусть это для вас будет как методичка или шпаргалка! Удачи на будущих NLP соревнованиях!
https://docs.google.com/document/d/11Kq3XbYCgYKB3sgHlntNDyF6pCD_Smn6pMbfQl-vuAU
Google Docs
Методичка для NLP соревнований
Pre-training Masked Language Modeling - https://arxiv.org/abs/1810.04805 Don’t Stop Pretraining: Adapt Language Models to Domains and Tasks - https://arxiv.org/abs/2004.10964 Replaced Token Detection - https://arxiv.org/abs/2003.10555 Frustratingly Simple…