АлкоРитм - Алгоритмы и Структуры данных
105 subscribers
13 photos
12 videos
20 links
Download Telegram
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
ups: НОВЫЙ ВИДОСИК

Смотреть обязательно, если:
любите натягивать алгоритмические задачки на реальные;
не понимаете, где может пригодиться "объединение нескольких массивов в один";
дошли до Кучи на курсе.
Please open Telegram to view this post
VIEW IN TELEGRAM
32