Telegram Group & Telegram Channel
Алгоритмическая секция | Live-coding - как проходить?

Очень мало компаний, которые выделяют алгоритмы (или лайвкодинг, далее все это будет алгоритмами😎) в отдельную секцию. Обычно данные секции вставляют вместе с вопросами по ML или по питону. Но идея везде одна, и она поможет вам проходить алгоритмический секции максимально эффективно. Более того, данный подход уместен на практике и взять ровно оттуда.

Что проверяет алгоритмическая секция?

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

Но как?

В программировании есть шикарная техника разработки TDD(Test Driven Development). Идея метода состоит в том, что сначала мы пишем тесты для программы, а потом сам функционал.

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

Рассмотрим на примере:

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


cards_1 = [1, 2, 3, 4, 5]
cards_2 = [20, 5, 10, 15, 30]
nominal = 20


Алгоритм решения:

Читаем условие задачи и пытаемся придумать примеры, которые могут быть критичны. Например:
- А что если миниммальная сумма стоимости карт меньше номинала?[10, 20], [30, 40], 5 -> ?
- А если один из списков пустой?
- А если подходящих номиналов несколько?
Сразу фиксируем данные тесты для последующей проверки. Если есть тесты, которые вызывают вопросы, спрашиваем у интервьюера.

Проговариваем решение вслух.
Как только мы учли все случаи, которые нам пришли в голову переходим к решению. Сначала придумываем самое простое решение, которое вы можете придумать:


"В данной задаче можно пройтись сначала по первому списку, потом по второму и считать, когда сумма будет равняться номиналу, но данное решение будет работать за O(N * M) и кажется слишком простым, возможно, получится быстрее решить задачу."
PS N и M длины первого и второго списка соответственно.

И потом начинаем рассуждать над его улучшением:

"На каждом шаге основного цикла мы просто проверяем вхождение элемента в список за O(M) N раз, возможно, можно оптимизировать этот процесс. Есть смысл использовать словарь для второго списка, так как скорость проверки наличия элемента в словаре равен O(1). Таким образом, нам удастся снизить время выполнения до O(max(M, N)), что вполне себе линейно"

Пытаемся понять, можно ли быстрее:

"Так как данные у нас не отсортированы, и нам нужно пройтись по всем данным быстрее, чем за линейное, не удастся реализовать данный метод"

И учитываем тонкости новой реализации:

"Так как нас попросили посчитать все возможные комбинации таких карт, нужно не забыть учесть дубли"

И тут дописываем еще один тест на этот случай.
Все, теперь мы готовы написать код программы!

Пишем само решение и после прогоняем несколько тестов.
Вы великолепны!

Немного общих советов

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

- Не забывайте про нейминг!

Желаю удачи!

Раскатываем ML кабины
Please open Telegram to view this post
VIEW IN TELEGRAM



group-telegram.com/ml_cabin_destroyers/16
Create:
Last Update:

Алгоритмическая секция | Live-coding - как проходить?

Очень мало компаний, которые выделяют алгоритмы (или лайвкодинг, далее все это будет алгоритмами😎) в отдельную секцию. Обычно данные секции вставляют вместе с вопросами по ML или по питону. Но идея везде одна, и она поможет вам проходить алгоритмический секции максимально эффективно. Более того, данный подход уместен на практике и взять ровно оттуда.

Что проверяет алгоритмическая секция?

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

Но как?

В программировании есть шикарная техника разработки TDD(Test Driven Development). Идея метода состоит в том, что сначала мы пишем тесты для программы, а потом сам функционал.

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

Рассмотрим на примере:

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


cards_1 = [1, 2, 3, 4, 5]
cards_2 = [20, 5, 10, 15, 30]
nominal = 20


Алгоритм решения:

Читаем условие задачи и пытаемся придумать примеры, которые могут быть критичны. Например:
- А что если миниммальная сумма стоимости карт меньше номинала?[10, 20], [30, 40], 5 -> ?
- А если один из списков пустой?
- А если подходящих номиналов несколько?
Сразу фиксируем данные тесты для последующей проверки. Если есть тесты, которые вызывают вопросы, спрашиваем у интервьюера.

Проговариваем решение вслух.
Как только мы учли все случаи, которые нам пришли в голову переходим к решению. Сначала придумываем самое простое решение, которое вы можете придумать:


"В данной задаче можно пройтись сначала по первому списку, потом по второму и считать, когда сумма будет равняться номиналу, но данное решение будет работать за O(N * M) и кажется слишком простым, возможно, получится быстрее решить задачу."
PS N и M длины первого и второго списка соответственно.

И потом начинаем рассуждать над его улучшением:

"На каждом шаге основного цикла мы просто проверяем вхождение элемента в список за O(M) N раз, возможно, можно оптимизировать этот процесс. Есть смысл использовать словарь для второго списка, так как скорость проверки наличия элемента в словаре равен O(1). Таким образом, нам удастся снизить время выполнения до O(max(M, N)), что вполне себе линейно"

Пытаемся понять, можно ли быстрее:

"Так как данные у нас не отсортированы, и нам нужно пройтись по всем данным быстрее, чем за линейное, не удастся реализовать данный метод"

И учитываем тонкости новой реализации:

"Так как нас попросили посчитать все возможные комбинации таких карт, нужно не забыть учесть дубли"

И тут дописываем еще один тест на этот случай.
Все, теперь мы готовы написать код программы!

Пишем само решение и после прогоняем несколько тестов.
Вы великолепны!

Немного общих советов

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

- Не забывайте про нейминг!

Желаю удачи!

Раскатываем ML кабины

BY Раскатываем ML кабины




Share with your friend now:
group-telegram.com/ml_cabin_destroyers/16

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

Stocks dropped on Friday afternoon, as gains made earlier in the day on hopes for diplomatic progress between Russia and Ukraine turned to losses. Technology stocks were hit particularly hard by higher bond yields. The S&P 500 fell 1.3% to 4,204.36, and the Dow Jones Industrial Average was down 0.7% to 32,943.33. The Dow posted a fifth straight weekly loss — its longest losing streak since 2019. The Nasdaq Composite tumbled 2.2% to 12,843.81. Though all three indexes opened in the green, stocks took a turn after a new report showed U.S. consumer sentiment deteriorated more than expected in early March as consumers' inflation expectations soared to the highest since 1981. Anastasia Vlasova/Getty Images So, uh, whenever I hear about Telegram, it’s always in relation to something bad. What gives? Artem Kliuchnikov and his family fled Ukraine just days before the Russian invasion.
from in


Telegram Раскатываем ML кабины
FROM American