По поводу использования eval, кстати)) Запиши видос с решением задачи на CodeWars. Название задачи: "Evaluate mathematical expression". Я скидываю ее всем любителям eval и exec )) Будь даже этот видос на час или два, я обещаю, что посмотрю его от начала и до конца и даже подпишусь на канал) Только реши задачу)
А можно пару глупых вопросов, 1 - зачем в if писать == 0 или == 1, если len(arr)%2 вернет 0 или 1, а это уже будет или False или True? 2 - а как часто в продакшене используется eval? 3 - во втором задании у нас массив с 4 знаками, можно было бы проходить по цифрам и делать % 4, чтобы не создавать i_op?
а Вы не видите ее уровень? Прошу, не пиши никакие курсы только, не порть жизнь людям. Я после Гоши Дударя так много усилий тратил на переучивание людей
Нужно смотреть на условие, в заданиях для аналитика наверно больше будут смотреть на знания базовых понятий и работу с кодом, а если на программиста собеседование то конечно смотрят на сложность алгоритма
В 1 задаче я думаю подразумевалось сделать сортировку вставками(Insertion Sort), т.к она работает за О(n), а встроенный метод сортировки в Python за O(n log n)
Правильно ли я понял, что такая крупная компания, как Avito, требует от соискателя найти медиану тривиальным прямым методом с помощью сортировки за O(N*log(N))? Решение с вызовом метода и парой условий достаточно, а вещи типа QuickSelect не требуются, так?
Кстати еще важный момент, что задача из собеседование на аналитика, видимо как раз для того, чтобы посмотреть на знания про медиану, среднее и работу со списком. А если еще и написать какую-нибудь сортировку, то сразу возьмут в команду)
Тут тонкий момент. Т.к. это питон, то быстрое решение за O(N) почти наверняка окажется медленнее медленного решения за O(N log N). Видимо правильным для питона решением будет return statistics.median(arr) - но это решение обычно доказывает умение гуглить
@@krv76 Чтобы решение за O(N) наверняка оказывалось медленнее решения за O(N*log(N)) на том же самом языке программирования, даже если это Python, - это что-то новое в теории алгоритмов.
@@IvanYugov import statistics import random from datetime import datetime a = list(range(1000000)) random.shuffle(a) base = datetime.now() print(statistics.median(a)) print("С помощью statistics.median медиана найдена за ", datetime.now() - base) def quickselect_median(l, pivot_fn=random.choice): if len(l) % 2 == 1: return quickselect(l, len(l) / 2, pivot_fn) else: return 0.5 * (quickselect(l, len(l) / 2 - 1, pivot_fn) + quickselect(l, len(l) / 2, pivot_fn)) def quickselect(l, k, pivot_fn): """ Выбираем k-тый элемент в списке l (с нулевой базой) :param l: список числовых данных :param k: индекс :param pivot_fn: функция выбора pivot, по умолчанию выбирает случайно :return: k-тый элемент l """ if len(l) == 1: assert k == 0 return l[0] pivot = pivot_fn(l) lows = [el for el in l if el < pivot] highs = [el for el in l if el > pivot] pivots = [el for el in l if el == pivot] if k < len(lows): return quickselect(lows, k, pivot_fn) elif k < len(lows) + len(pivots): # Нам повезло и мы угадали медиану return pivots[0] else: return quickselect(highs, k - len(lows) - len(pivots), pivot_fn) base = datetime.now() print(quickselect_median(a)) print("С помощью quickselect_median медиана найдена за ", datetime.now() - base) base = datetime.now() a.sort() print((a[500000] + a[499999])/2) print("С помощью sort медиана найдена за ", datetime.now() - base)
Я тут недавно подумал для вычисления медианы, что если взять алгоритм для qsort и сделать чтобы он не сортировал ненужные участки, то сложность будет O(n) а не O(n*log n). Но это в среднем, а худшем случае у qsort сложность O(n^2)...
Эти задачи не уровень гугла, это уровень 4 класса школы. До решения задач уровня собеседования гугла Вам практики еще лет на 7-8. Постоянно смотрите на клавиатуру... Здесь явно очень слабенький уровень)
@@itgirl_luda слепая печать вам не знакома? Обучитесь. Пальцы должны бегать по клавиатуре без какого-либо взгляда на неё. пианисты играют на пианино и не смотрят на клавиши, так и здесь. Скорость печати возрастает в среднем в 3-4 раза Также изучите пепы питона, чтобы писать код в соответствии с рекомендациями. Уровень трейни на видео с натяжкой, как будто программирование изучаете последние 2-3 недели. Если это так, то ничего страшного
Вторую задачу решать через eval - это хак, медленный и не работает в толпе языков. На собеседовании это бы не прокатило. Надо честно строить обратную польскую запись и по ней вычислять.
По поводу использования eval, кстати)) Запиши видос с решением задачи на CodeWars. Название задачи: "Evaluate mathematical expression". Я скидываю ее всем любителям eval и exec )) Будь даже этот видос на час или два, я обещаю, что посмотрю его от начала и до конца и даже подпишусь на канал) Только реши задачу)
Увидел твой канал в рекомендациях. Мне понравились твои идеи решения. Формат крутой, снимай побольше похожих видео. Лайк поставил и подписался)
Спасибо 🙏
А можно пару глупых вопросов,
1 - зачем в if писать == 0 или == 1, если len(arr)%2 вернет 0 или 1, а это уже будет или False или True?
2 - а как часто в продакшене используется eval?
3 - во втором задании у нас массив с 4 знаками, можно было бы проходить по цифрам и делать % 4, чтобы не создавать i_op?
1. Написала для наглядности
2. Ни разу не использовала)
3. Можно
Понял, спасибо большое.
а Вы не видите ее уровень? Прошу, не пиши никакие курсы только, не порть жизнь людям. Я после Гоши Дударя так много усилий тратил на переучивание людей
Побольше видео такого формата, очень классно!👍🏻
Спасибо 🙏
Круто! Мне зашло! Снимай побольше такие видосы
Класс, спасибо за фитбек!
Нужно учитывать BigO при решении или просто нужно хоть как-то решить ?
Нужно смотреть на условие, в заданиях для аналитика наверно больше будут смотреть на знания базовых понятий и работу с кодом, а если на программиста собеседование то конечно смотрят на сложность алгоритма
Люда, молодец! Спасибо тебе за твои труды, видосов с решение различные задач на питоне с твоим участием хотелось бы больше!
Спасибо, приняла в сведения)
Используя eval всегда ходишь по "скользкой дорожке" в безопасности
Точно, нужно будет учесть
@@itgirl_ludaпривет а у тебя какой стэк
формат супер! лайк шер
продолжай!
Класс спасибо 🙏
Формат отличный! Такого точно нужно больше)
Спасибо 🙏
В 1 задаче я думаю подразумевалось сделать сортировку вставками(Insertion Sort), т.к она работает за О(n), а встроенный метод сортировки в Python за O(n log n)
Точно, хорошее замечание)
Сортировка вставками работает за O(n^2)
@@suhanovesа точно, тогда можно использовать сортировку слиянием О(n logn)
Интересный новый формат👍
Спасибо 🙏
Ура новый видосик
🙏🙏
Правильно ли я понял, что такая крупная компания, как Avito, требует от соискателя найти медиану тривиальным прямым методом с помощью сортировки за O(N*log(N))? Решение с вызовом метода и парой условий достаточно, а вещи типа QuickSelect не требуются, так?
Как и везде, чем быстрее работа программы, тем лучше, можно решать любым способом, который считаешь нужным😎
Кстати еще важный момент, что задача из собеседование на аналитика, видимо как раз для того, чтобы посмотреть на знания про медиану, среднее и работу со списком. А если еще и написать какую-нибудь сортировку, то сразу возьмут в команду)
Тут тонкий момент. Т.к. это питон, то быстрое решение за O(N) почти наверняка окажется медленнее медленного решения за O(N log N).
Видимо правильным для питона решением будет return statistics.median(arr) - но это решение обычно доказывает умение гуглить
@@krv76 Чтобы решение за O(N) наверняка оказывалось медленнее решения за O(N*log(N)) на том же самом языке программирования, даже если это Python, - это что-то новое в теории алгоритмов.
@@IvanYugov
import statistics
import random
from datetime import datetime
a = list(range(1000000))
random.shuffle(a)
base = datetime.now()
print(statistics.median(a))
print("С помощью statistics.median медиана найдена за ", datetime.now() - base)
def quickselect_median(l, pivot_fn=random.choice):
if len(l) % 2 == 1:
return quickselect(l, len(l) / 2, pivot_fn)
else:
return 0.5 * (quickselect(l, len(l) / 2 - 1, pivot_fn) +
quickselect(l, len(l) / 2, pivot_fn))
def quickselect(l, k, pivot_fn):
"""
Выбираем k-тый элемент в списке l (с нулевой базой)
:param l: список числовых данных
:param k: индекс
:param pivot_fn: функция выбора pivot, по умолчанию выбирает случайно
:return: k-тый элемент l
"""
if len(l) == 1:
assert k == 0
return l[0]
pivot = pivot_fn(l)
lows = [el for el in l if el < pivot]
highs = [el for el in l if el > pivot]
pivots = [el for el in l if el == pivot]
if k < len(lows):
return quickselect(lows, k, pivot_fn)
elif k < len(lows) + len(pivots):
# Нам повезло и мы угадали медиану
return pivots[0]
else:
return quickselect(highs, k - len(lows) - len(pivots), pivot_fn)
base = datetime.now()
print(quickselect_median(a))
print("С помощью quickselect_median медиана найдена за ", datetime.now() - base)
base = datetime.now()
a.sort()
print((a[500000] + a[499999])/2)
print("С помощью sort медиана найдена за ", datetime.now() - base)
классные сервис. видео интересное, спасибо
Спасибо 🙏
Ммм.. Мутируем входные данные. Ай-ай-ай
Я тут недавно подумал для вычисления медианы, что если взять алгоритм для qsort и сделать чтобы он не сортировал ненужные участки, то сложность будет O(n) а не O(n*log n). Но это в среднем, а худшем случае у qsort сложность O(n^2)...
QuickSelect
молодец, успехов
Спасибо 🙏
Ментану можно за линию находить
Как и все впринципе в питоне)
@@itgirl_luda питон сводит сложность любого алгоритма к O(n)?
Эти задачи не уровень гугла, это уровень 4 класса школы. До решения задач уровня собеседования гугла Вам практики еще лет на 7-8. Постоянно смотрите на клавиатуру... Здесь явно очень слабенький уровень)
Аххаха, так и есть) в Гугле же вообще в уме код пишут, не используя клавиатуру)
@@itgirl_luda слепая печать вам не знакома? Обучитесь. Пальцы должны бегать по клавиатуре без какого-либо взгляда на неё. пианисты играют на пианино и не смотрят на клавиши, так и здесь. Скорость печати возрастает в среднем в 3-4 раза
Также изучите пепы питона, чтобы писать код в соответствии с рекомендациями. Уровень трейни на видео с натяжкой, как будто программирование изучаете последние 2-3 недели. Если это так, то ничего страшного
Уровень задач - да, то что человек смотрит на клавиатуру - не показатель
@@itgirl_ludaтролли , на них даже внимание не стоит обращать
А ты в гугл работаешь?
Вторую задачу решать через eval - это хак, медленный и не работает в толпе языков.
На собеседовании это бы не прокатило.
Надо честно строить обратную польскую запись и по ней вычислять.
Поняла, больше не буду🙏
первая задачка легкая. В уме решил (ответ не 😮смотрел)
Пустой список можно и без условия проверить: можно воспользоваться функцией try - expect
Это правда)