АлкоРитм - Алгоритмы и Структуры данных
106 subscribers
13 photos
12 videos
20 links
Download Telegram
Media is too big
VIEW IN TELEGRAM
AlcoRhythm Lab

Изучать алгоритмы и структуры данных ради литкода - занятие сомнительное, а где применять полученные знания - не понятно.

На самом деле все вокруг нас, стоит просто оглянуться…

Пример из жизни:
14 января. Неплохо бы поздравить маму со Старым Новым Годом. Берешь телефон, открываешь контакты, в поиске вводишь «Мама».
Хм…интересно, а как работает поиск контактов в айфоне? Если там может быть до 50 000 карточек, то вряд ли это простой перебор.


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

Формат телеграма хорошо зашел для курса, но не всем интересно полноценное обучение (или пока просто не готовы). Я создал отдельный канал, где буду разбирать алгоритмы и структуры данных на практике. Первое видео прикреплено к посту, а уже завтра напишу реализацию префиксного дерева.

Мне не нравится современная тенденция - подписываться на все подряд, поэтому я установил минимальную сумму - 200р (вчера 1 огурец и 1 томат купил за 150…лол)

Если вам интересен данный формат, увидимся в AlcoRhythm Lab ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
221
Media is too big
VIEW IN TELEGRAM
AlcoRhythm Lab

Второе видео про поиск в Контактах.

Создание Prefix Tree c функциями:
• добавление слова
• проверка слова целиком
• нахождение слов по префиксу

Присоединиться
Please open Telegram to view this post
VIEW IN TELEGRAM
Array(s.utf8) -vs- Array(s)

Частенько, решая задачи со строками, не попадаешь в первый столбик, хотя написал оптимальное решение. Наиболее частая ошибка - Array(s).

Давайте разберемся почему в самом быстром решении Array(s.utf8) и что это такое.
___

В Swift строка String - не массив символов.

String:
• хранится в UTF-8;
• поддерживает Unicode;
• каждый Character может занимать различное число байт;
• доступ к Character - операция не O(1).

При такой записи

for ch in s { ... }

Swift под капотом:
• декодирует UTF-8;
• собирает Character;
• проверяет границы;
• создает value type Character.
___

s.utf8 - последовательность байтов (UInt8), уже лежащих в памяти строки.

Array(s.utf8) это:
• линейный массив байтов;
• без Unicode-логики;
• без декодирования;
• с прямым доступом по индексу.
___

String(bytes: array, encoding: .utf8)
• однократное создание строки;
• без поэлементного append;
• без пересчета индексов String.Index;
• без проверки Unicode.
___

Решая задачу на собеседовании важно уточнить:
Т.к. вход ограничен ASCII-символами, можно безопасно работать с UTF-8 байтами и получить линейный алгоритм без накладных расходов Unicode.
31
❗️Решение "в лоб" - не для всех задач

На днях смотрел собеседование в Т-Банк. Увидев первую задачу, с легкостью решил ее в голове, НО! это произошло только благодаря насмотренности.


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


Появилось решение в голове? Наверняка нет.
Это чистый техтекст, без намеков на алгоритмы и структуры данных. Сухо, как в документации.
___

Есть целая категория задач, где алгоритмы и структуры данных ни при чем.

Условие может быть любым:
• соседние элементы меняются знаками;
• необходимо поменять знаки у k элементов;
• необходимо поменять знаки k раз;
• и т.д.

💡 Ловите алгохак:

Если видите задачу про смену знаков - почти всегда сортируйте массив.

Сделали сортировку - дальше будет проще.

Проверьте на задаче 1005. Maximize Sum Of Array After K Negations.
___

Мораль: Круто, когда кто-то берет тебя за руку и показывает куда смотреть, а куда нет :Ъ
Please open Telegram to view this post
VIEW IN TELEGRAM
41
Media is too big
VIEW IN TELEGRAM
AlcoRhythm Lab, продолжаем...

Идею с практикой вы не поддержали, но я все равно хочу развивать это направление 🙂
___

Список контактов в телефоне
Часть 3 - удаление слова из префиксного дерева
___

Присоединиться к AlcoRhythm Lab
Please open Telegram to view this post
VIEW IN TELEGRAM
11
Cобеседование би лайк
3
ASCII

ASCII (American Standard Code for Information Interchange) - стандарт кодирования букв латинского алфавита, цифр, некоторых специальных знаков и управляющих символов, принятый в 1963 году Американской ассоциацией стандартов как основной способ представления текстовых данных в ЭВМ.

Проще говоря: таблица соответствий.
___

Классический ASCII содержит 128 символов, которые делятся на 3 группы:

1. Управляющие символы (0–31)
Это не буквы и не цифры. Их не видно. Необходимы для управления текстом.
0 - конец строки
9 - TAB

2. Печатные символы (32–126)
Пробел и знаки
32 - " "
33 - "!"
64 - "@"

Цифры
48 - "0"
49 - "1"
...
57 - "9"

Большие буквы
65 - "A"
66 - "B"
...
90 - "Z"

Прописные буквы
97 → "a"
98 → "b"
...
122 → "z"

3. DEL (127)
Исторический символ удаления. Сейчас почти не используется.

ASCII - только латиница. Никаких эмодзи, кириллицы или китайских иероглифов.
___

Самое важное свойство ASCII - символы идут подряд
___

Идея в любом языке одинаковая:
Символ = число

Всегда можно:
• получить код символа;
• работать с ним как с числом;
• превратить обратно в символ.
___

Unicode не заменил ASCII - он его включил.
В 70–90-х: операционные системы, файловые форматы, протоколы уже существовали и использовали ASCII. Unicode был вынужден подстроиться, а не диктовать условия.

"A" в ASCII = "A" в Unicode
"0" в ASCII = "0" в Unicode
Байтовые значения совпадают. Это сделано специально, чтобы ничего не сломать.
___

Весь интернет построен на ASCII
GET / index.html HTTP/1.1
Host: example.
com

• ключевые слова
• разделители
• управляющие символы
Все это ASCII.
2
⬆️ Понимание ASCII бывает полезно при решении задач.
Попробуйте решить задачу:
171. Excel Sheet Column Number
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
⬆️Подсказка к задаче выше

Использование ASCII позволит не создавать дополнительную структуру данных (например хеш-таблицу).
Please open Telegram to view this post
VIEW IN TELEGRAM
111
Чтобы понять хеш-таблицу, надо написать хеш-таблицу!

Привычно считается, что вставка, удаление и получение значения по ключу выполняется за O(1).
Так ли это на самом деле?
Что такое амортизированная сложность?
Зачем и когда делать resize?

Проясним окончательно эти вопросы, написав хеш-таблицу своими ручками :}

🍿 СМОТРЕТЬ БЕЗ РЕГИСТРАЦИИ
Но, желательно, с подпиской :Ъ
Please open Telegram to view this post
VIEW IN TELEGRAM
211
Media is too big
VIEW IN TELEGRAM
Как вам такой формат объяснений? 🍺
Please open Telegram to view this post
VIEW IN TELEGRAM
632
This media is not supported in your browser
VIEW IN TELEGRAM
А мы продолжаем...

В базовой части курса:
разобрали основные темы
решили по 5 задач на каждую тему
закрепили знания решением 20 задач
В итоге: 70 решеных задач.

Настало время двигаться дальше!

Открывают вторую часть (название пока не придумал) деревья и обходы в глубину/ширину.

ПРИСОЕДИНЯЙСЯ 🍺
Please open Telegram to view this post
VIEW IN TELEGRAM
221
Media is too big
VIEW IN TELEGRAM
Ваше мнение?

Такое объяснение:
🍺 - душняцкая душнота
- полезная душнота

П.С. Буду рад дополнительным комментам
Please open Telegram to view this post
VIEW IN TELEGRAM
411
Други, все чаще всплывают новости про блокировку/замедление телеграм.

В ВК есть группа. Там никакой движухи, только видео с ютуба.

Присоединяйтесь, чтобы не потеряться...
21
Алгоритм Луна - способ проверить, корректен ли номер (карты, ИНН, IMEI и т.д.) по контрольной цифре.

Не проверяет, существует ли карта.
Проверяет, правильно ли пользователь ввел данные / битые данные / и т.д.

Номер карты:
5106 2110 1025 5079

1 шаг:
Последняя цифра - контрольная. Начинаем с предпоследней.

Каждую вторую цифру умножаем на 2.
Если получилось значение больше 9 - вычитаем 9.

5 1 0 6 _ 2 1 1 0 _ 1 0 2 5 _ 5 0 7 9
1 0 4 2 2 4 1 5

2 шаг:
Далее суммируем все числа.
9 + 5 + 0 + 1 + 5 + 4 + 0 + 2 + 0 + 2 + 1 + 4 + 6 + 0 + 1 + 1 = 41

3 шаг:
Если сумма делится на 10 без остатка - номер корректный.

41 % 10 = 1 - Номер невалидный по Луну.
Просто картинка из Интернета

Алгоритм построен так, что:
• изменение одной цифры почти всегда ломает сумму;
• перестановка цифр часто обнаруживается;
Ловит большинство случайных ошибок.
Please open Telegram to view this post
VIEW IN TELEGRAM
333
Лайвфак

Если на leetcode вы решаете задачи на Кучу/Heap, вам не обязательно тащить Кучу за собой (по крайней мере для Swift).

Leetcode поддерживает swift-collections. Можно использовать Кучу из-под капота.

Официальных постов не нашел, но это легко проверить (см. скрин).

Присоединиться к курсу AlcoRhythm.

П.С. Пульни реакцию, если было полезно 🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
42
14 февраля ❤️

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

Связный список - отношения на расстоянии: каждый сам по себе, но ссылка хранится.

Дерево - классическая любовь: у нее есть корни, много потомков и, возможно, пара багов.

Граф - любовный треугольник. Лучше не надо.

Хеш-таблица - идеальная пара: "Ты мой ключ, я твое значение".

Пусть ваши отношения будут как красно-черное дерево: сложно, но сбалансированно. Пусть любовь/код будет чистым, а промокод - активным:
❤️ Влюбленным в скидки: FEB14
Вместо валентинки
Please open Telegram to view this post
VIEW IN TELEGRAM
5221