Собеседование в Facebook - Разбор Для Начинающих

Поділитися
Вставка
  • Опубліковано 29 лис 2024

КОМЕНТАРІ • 213

  • @sashalukin
    @sashalukin  7 місяців тому

    Создал Telegram канал, в котором рассказываю о жизни в Лондоне, работе в Google и подготовке к собеседованиям. Подписывайтесь: t.me/saschalukin

  • @sb9185
    @sb9185 Рік тому +16

    Блин какой приятный парень! Можно целыми дня смотреть его уроки про задачи на собеседовании)

  • @dark.960
    @dark.960 Рік тому +15

    Видно как растёт качество видео. Спасибо за твою работу, очень помогаешь!

  • @IvanYugov
    @IvanYugov Рік тому +59

    Так, погодите... Да ведь это одна из тем задания №27 на ЕГЭ по информатике. Формулировки задания очень похожие, и на 2 первичных балла нужно написать решение как раз за O(N).

    • @runneso
      @runneso Рік тому +7

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

    • @IvanYugov
      @IvanYugov Рік тому +9

      @@runneso Да, наличие отрицательных чисел существенно влияет на способ решения. Задания с отрицательными числами пока официально не встречались, но во всяких тренировочных сборниках изредка попадаются.
      Зато можно почти серьёзно говорить старшеклассникам: осилите 27-е - получите задел на FAANG.

    • @nixxik__
      @nixxik__ Рік тому

      @user-jp8jl5mg3v то что ты назвал тоже очень легко, это прямо база информатики 27

    • @СтаниславВокеутов-ю2э
      @СтаниславВокеутов-ю2э Рік тому +1

      Гораздо сложнее 27

    • @violetjellyfish2089
      @violetjellyfish2089 3 місяці тому

      Ребят, я 5 лет работаю разрабом, у меня два высших, но я сейчас егэ по информатике глянула и не смогла там почти ничего решить😅 современные выпускники, похоже, гении))

  • @habib_sultan
    @habib_sultan Рік тому +9

    Класс! Спасибо за полезные видео.
    Снимай плиз пару выпусков про то, кто ты и как "докатился" до такой жизни, про свой опыт в бигтехе и фишечки, которые ты рекомендовал бы себе- младшему.

  • @blitz_kiy5104
    @blitz_kiy5104 Рік тому +5

    Вот жаль, что такое разом не приходит в голову. Сначала о втором способе подумал. Но логично ведь, что можно просто концы обрезать до 5. Мне в голову пришла идея где мы по массиву змейкой вперёд и назад идём постоянно сокращая на один шаг с каждой сменой направления, при этом, меняя направление, мы обнуляем сумму цифр и так пока числа не встретятся, вроде O(n), но скорее всего медленнее, правда и памяти лишней не затронет. Все варианты как раз высчитывает, ведь нет разницы с какой стороны подмассивы считать. Надо бы алгоритмы прокачать

  • @mavn-code
    @mavn-code Рік тому +5

    я от тембра голоса и манере преподавания автора восхищаюсь. Молодец!

    • @daitedve1984
      @daitedve1984 Рік тому +2

      Тоже восхищён - усыпить меня буквально за минуту - это талант! 😆

  • @kazarovroman
    @kazarovroman Рік тому +2

    Супер подробно объяснил. Спасибо. Побольше таких разжеванных задач!

  • @edmond-dantes-1796
    @edmond-dantes-1796 Рік тому +2

    Если нет опыта решения подобных задач (недавнего причем) то придумать самое быстро решение на собесе за 20 мин это какая то фантастика. IQ 150+ надо иметь наверн. Если дома посидеть спокойно, то за часик-2 конечно можно ну или с набитой рукой врываться на собесы.
    Контент в кайф кнчн)

    • @gggppp228
      @gggppp228 8 місяців тому +1

      Чтобы хорошо щёлкать алгоритмические, надо просто руку набивать. Мне первое решение для этой задачи сразу в голову пришло

    • @edmond-dantes-1796
      @edmond-dantes-1796 8 місяців тому

      @@gggppp228 согласен, надо готовиться к такому. Изниоткуда такой скил не появится

  • @v.demchenko
    @v.demchenko 6 місяців тому

    Я бы хотел поправить автора видео.
    Дело в том, что приобьяснении он говорит про итерацию по числам справа. Но по делу, скрипт работает с нулевым и последующими елементами.
    Для того, что бы реализовать процесс как было обьясненно. Нужно ко второму циклу накинуть +1 и в сумму в первом цикле обьявить как елемент по которому итерируемся.. плюс условия по проверке так же изменить на начало.

  • @Lammax2012
    @Lammax2012 Рік тому +1

    Классно! Всё предельно ясно-понятно! Спасибо!

  • @saveekglushchenko6903
    @saveekglushchenko6903 Рік тому +1

    Очень круто! Спасибо, футболки отличные)

  • @sudo_ku
    @sudo_ku Рік тому +1

    Топ🔥 Спасибо за работу!

  • @hopelesssuprem1867
    @hopelesssuprem1867 Рік тому +1

    Очень интересная задача. Спасибо большое

  • @user-qm5fv5by5z
    @user-qm5fv5by5z Рік тому +1

    да вот ничего подобного, первым в голову не такая дичь пришла), просто складываю все подряд слева направа в цикле и когда сложение выдает 5 то в счетчике +1, потом новый цикл со следующего индекса, и так 8 циклов с перебором (сложением) (длинна массива 8 - 8 циклов, с 1 элемента, потом со второго и т.д.). досмотрел ролик и подумал что мое решение получше будет)...

  • @kotikGGG
    @kotikGGG 7 місяців тому

    А проходы по хэшмэпу не увеличивают сложность до n^2?

  • @hello_world_zz
    @hello_world_zz Рік тому

    если вы не знаете что делать - то воспользуйся Hash. Золотые слова!

  • @Керик-у7ю
    @Керик-у7ю 5 місяців тому

    Последнее решение на доске верно объяснено, но код не корректный.
    Для массива 1 2 3 4 1 и k = 10, выдаст 3, хотя верный ответ 2

  • @Baha996
    @Baha996 Рік тому +1

    Классный ролик, продолжай 🔥🔥🔥

  • @hoopengo2289
    @hoopengo2289 Рік тому

    остановил видева. Я думаю можно отсортировать массив. Потом решить с помощью two pointers. Но там много заморочек, поэтому я бы еще подумал.

  • @Poli.Pavlovich
    @Poli.Pavlovich Місяць тому

    Финальное решение очень элегантное

  • @ПавелКононов-м6б
    @ПавелКононов-м6б Рік тому +11

    Саш, привет. Посоветуй литературу для прокачки алгоритмического мышления. Какие книги тебе помогали готовиться к собеседованиям?

    • @makige1378
      @makige1378 Рік тому +3

      Адитья Бхаргава "Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих"

    • @MaruiInfantry
      @MaruiInfantry Рік тому

      Алгоритмы это 3-4 вопроса из пары десятков на онсайте.

    • @konstantin1648
      @konstantin1648 Рік тому +2

      Роберт Лафоре "Структуры данных и алгоритмы"

    • @naneri
      @naneri Рік тому +4

      leetcode

    • @roman_je_rkoff
      @roman_je_rkoff Рік тому +3

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

  • @bzych8965
    @bzych8965 5 місяців тому

    мой способ менее эффективный, потому что я использовал поиск в массиве, а не в хэш таблице
    создаём массив префиксных сумм, потом проходимся по нему и ищем есть ли в нём (текущий элемент-5)

  • @ПаблоЭскобар-л8щ
    @ПаблоЭскобар-л8щ 2 місяці тому

    Спасибо за разбор задач, очень прокачивают. Угарнул с того, что на литкод добавили тест k = 0, nums =[1]. При моей реализации ответ выходит один, думаю, как разобрать этот случай

  • @SoulPervert
    @SoulPervert Рік тому +3

    13:16 а если бы между теми двумя подмассивами с суммой 8 был еще один какой-то?

    • @galo4kin
      @galo4kin Рік тому +1

      Вот у меня тоже возник вопрос, если я правильно понял, похожий, что будет, если после того, как мы взяли в ответ количество подмассивов с суммой 4, например, а потом снова плавится подмассив с такой же суммой и он нам снова потребуется. Тогда в ответе появится лишний +1 в ответе.

  • @dimasbka
    @dimasbka 7 місяців тому

    ох где же это видео раньше пряталось, если до первого и второго решения я додуатся сумел то третьего варианта мне явно не хватало

  • @vladsssl
    @vladsssl Рік тому

    привет, а что у тебя за монитор, подключенный к маку?

  • @Igorkornilovspb
    @Igorkornilovspb Рік тому +5

    Привет! Спасибо за твои видео! Очень интересно. Да и вообще классно знать что где-то есть люди, которые хорошо зарабатывают (предполагаю что в Лондоне программисту хорошо платят) но при этом они могут адекватно и доброжелательно излагать мысли.
    У меня только вопрос, а лично тебе какая польза от этого? Особенно вызывает удивление что рассказываешь на русском.

  • @vacsa
    @vacsa Рік тому

    Спасибо за труды!

  • @antonmuzeev
    @antonmuzeev Рік тому +4

    Саша, а сделай, плиз, объяснение на английском языке. Хочется набраться слов и фраз именно на английском языке.

  • @leomysky
    @leomysky Рік тому +1

    Очень крутое видео
    Большое спасибо

  • @overskam2699
    @overskam2699 Рік тому

    Sliding window не сработает, потому что есть отрицательные значения? или сработает?

  • @KostyaRUS72
    @KostyaRUS72 Рік тому

    идти от каждого числа с подсуммировкой пока сумма массима не даст K. Когда k = массиву, удалять его из переменной возвращать массив в ruturn

    • @KostyaRUS72
      @KostyaRUS72 Рік тому

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

  • @flyingdinosaur8871
    @flyingdinosaur8871 Рік тому

    Круто! Спасибо!

  • @nicholasspezza9449
    @nicholasspezza9449 Рік тому +3

    не очень понимаю зачем третий цикл for, когда первые два уже покроют все возможные варианты. Все что написано в третьем цикле можно написать во втором, а по выходу из второго цикла обнулять подсумму. Получится сложность О(n^2). А да посмотрел дальше ролик, это его второе решение. Ну тогда зачем вообще было говорить о первом решении, оно вообще искусственное, придуманное ради того, чтоб было, так можно и 10 циклов друг в друга вложить ради кол-ва.

  • @znsoft
    @znsoft Рік тому

    По жд едут 70 вагонов с насыпными грузами, каждый взвешен с точностью до килограма и значения не повторяются. От ржд приходит документ что во всем поезде едет 4 груза: зерно 940000 кг, пшено 800000 кг ,яблоки 250000 кг, картошка . Вагоны на станциях перецеплялись все опломбировано и вскрывать нельзя, вам нужно найти только яблоки .... если интересно расскажу решение )

  • @neiro22
    @neiro22 3 місяці тому

    Здравствуйте, разве использование хэш мапы не даёт нам асимпотику O(n log n) ?

    • @glingrad7444
      @glingrad7444 Місяць тому

      дает o(1) с точки зрения времени и o(n) с точки зрения памяти

  • @alexandersuvorov5465
    @alexandersuvorov5465 Рік тому

    Огромное. Спасибо.

  • @a1dwow
    @a1dwow Рік тому

    Я сразу сделал через 1 решение и ввел переменную accumulator для накопление

  • @DasBosch
    @DasBosch Рік тому

    Кхъ, у меня как раз на этой неделе собес в Яндекс. Напишу, если попадется что-то интересное)

  • @ventice11o
    @ventice11o 7 місяців тому

    from collections import defaultdict
    ...
    prefix_sum_count = defaultdict(int, {0: 1})
    for num in nums:
    subarray_sum += num
    answer += prefix_sum_count(subarray_sum - k)
    prefix_sum_count[subarray_sum] += 1

  • @LockMyClock
    @LockMyClock 10 місяців тому

    Почему быстрое решение имеет код в два раза больше ,чес обычное?

  • @user-lk8n0fgjk
    @user-lk8n0fgjk Рік тому

    Отличное видео! Спасибо за твой труд! И возвращайся к джаве плизззз)

  • @Arkham_nine
    @Arkham_nine Рік тому

    Спасибо! Разбери что-нибудь с Деревом Фенвика плз!

  • @cinemaSage_1
    @cinemaSage_1 Рік тому

    Are you switched to Python from Java??

  • @dimitro.cardellini
    @dimitro.cardellini Рік тому

    Або ми по гіршому варіанту оцініюємо, або по середньому )
    Чого б це хеш-мапа в гіршому випадку працювала, як O(1)?
    Вона буде працювати, як O(n)
    То ж, загальна склпжність за часом буде O(n^2) + пам'яті O(n)

  • @ЕвгенийКутовой-й6ы

    Спасибо за контент!

  • @danilas2206
    @danilas2206 Рік тому

    Спасибо за видео!

  • @WildRhinocerosDriver
    @WildRhinocerosDriver Рік тому

    А куда делось множество {7, 2, 1, -5}? Или речь шла только о подряд идущих числах?

  • @rubbbik
    @rubbbik Рік тому

    Очень познавательно, но почему бы не использовать вместо конструкции range(len()), enumerate

  • @rathmines4979
    @rathmines4979 Рік тому +1

    у меня есть вопросы к последнему алгоритму, как там вышло 5, если считать вручную, то у меня вышло 13, может и больше было бы, но лень все перебирать

    • @SayXaNow
      @SayXaNow Рік тому

      надо считать все числа подмассива, а вы видимо считали выборочно. для K=5 и массива [4,2,1] ответ 0, а не 1, нельзя складывать 4 и 1 без двойки.
      проще всего это проверить квадратичным алгоритмом с полным перебором. он дает ответ 5.

  • @101picofarad
    @101picofarad Рік тому +1

    десятилетия использую подыбный прием в матлабе и в голову не приходило, что это это так называется ;)

  • @iintersergey
    @iintersergey Рік тому +1

    Из неприятного для таких задач, самостоятельно придумать финальное решение довольно сложно, те после объяснения то понятно, но сам с ходу можешь придумать только второй вариант за N^2

  • @bjj1423
    @bjj1423 Рік тому

    Без отладчика пока не особо понимаю как работает код)

  • @glukh0v_d1ma
    @glukh0v_d1ma Рік тому

    спасибо, доходчиво

  • @LonelyRiderStonerBand
    @LonelyRiderStonerBand Рік тому

    Являюсь front end разработчиком порядка 6 лет, за все время, как ни пытался, так и не понимаю, вообще ни в какую все алгоритмы, задачи решать не умею, пересмотрел уже миллиард ресурсов и обучающих видео, все равно ничего не понятно, на сегодня спасает chatGpt. Буду рад совету что делать в такой ситуации, может какую-то литературу или курсы.

    • @mityaoreh
      @mityaoreh Рік тому +1

      Привет! Тоже фронтендер, но поменьше)
      Решать задачи, просто решать задачи, тренировать мозг и глаза, формировать насмотренность. имхо такая микросфера, где опыт очень сильно решает. Я открываю Литкод - делаю простые - усложняю, пока не сломаюсь - изучаю решения, записываю/учусь применять/решаю подобные.
      В алгосах главное уметь в пространные концепции, «Грокаем Алгоритмы» очень мне помогло в свое время с освоением и пониманием что вообще в таких задачах происходит, у тебя на самом деле есть небольшое количество концепций, которые надо изучить и, самое важно, понять, чтобы уметь применять

    • @LonelyRiderStonerBand
      @LonelyRiderStonerBand Рік тому

      @@mityaoreh привет. Благодарен за совет, буду наверстывать упущенное хоть это и очень тяжело мне дается

    • @mityaoreh
      @mityaoreh Рік тому +1

      @@LonelyRiderStonerBand отлично понимаю)
      удачи, сил и терпения, всё обязательно получится :)

    • @LonelyRiderStonerBand
      @LonelyRiderStonerBand Рік тому

      @@mityaoreh Thanks mate ;)

  • @MegaBeshka
    @MegaBeshka Рік тому

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

  • @bitowner
    @bitowner Рік тому

    Кажись баг в реализации, даже 2 бага... Если subarray_sum будет 0, то в хэш запишется {0:2}, а в answer добавится то, что по ключу -5 (зачем от 0 отрезать кусок с суммой -5, чтобы получить 5?)
    Может случится ситуация, когда to_remove будет 0 и тогда к answer добавится 2, вместо 1
    Не проверял, надо тесты погонять

    • @SayXaNow
      @SayXaNow Рік тому

      [-5, 5, -5, 5]
      на втором шаге сумма = 0, в ансвер добавится по ключу [-5], т.е. 1, записанная на первом шаге. т.к. второй элемент [5] нам подходит как подмассив.
      на 4м шаге опять 0, по ключу [-5] уже значение 2, записанное туда на третьем шаге. ансвер = 1+2 = 3. это потому, то на четвертом шаге подходят два подмассива: последний элемент [5] и [5,-5,5]
      "зачем от 0 отрезать кусок с суммой -5, чтобы получить 5?": 0 - (-5) = 5, вот поэтому
      "Может случится ситуация, когда to_remove будет 0 и тогда к answer добавится 2, вместо 1": нет, в ансвер плюсуется по ключу [ту_ремув], но счетчик увеличивается по ключу [субаррай_сум]
      [5, 0, 0, 0, 0]
      начиная со второго шага ту_ремув всегда ноль, но по ключу ноль находится единица, т.к. увеличиваться постоянно значение по ключу [5]. в итоге ансвер = 1+1+1+1+1 = 5

    • @bitowner
      @bitowner Рік тому

      @@SayXaNow спасибо за подробное объяснение! Действительно, даже если {0: 1} увеличивается, то всё правильно работает, и эти отрезки с 0 суммой учитываются в ответе

  • @dmitrymikheev121
    @dmitrymikheev121 Рік тому

    а тут разве не надо обнулять значения мапы после того как к answer плюсуем?

    • @SS-io3lb
      @SS-io3lb Рік тому

      Попробуй в коде перед тем, как задавать вопрос. Может оказаться, что вопрос бессмысленный.

  • @kingsman9354
    @kingsman9354 Рік тому +3

    Так надо сказать, или нет?

    • @andreiantonov7303
      @andreiantonov7303 Рік тому

      надо

    • @mrxDots
      @mrxDots Рік тому

      Надо говорить. 99% что задачу не поменяют, «видеть», «знать как решать» это еще не«решить», плюс 80% успеха прохождения алгоритмической сессии - много говорить, объяснять логику и трейдоффы

  • @lyanochka65473
    @lyanochka65473 Рік тому +3

    наконец то пример решения на Python!!! (единстыенный язык, который я идеально понимаю...)

    • @Deletedeletedelete
      @Deletedeletedelete Рік тому

      Код на питоне понятен даже если впервые видишь язык. Собственно его популярность отчасти обусловлена простотой

    • @ivormacky5078
      @ivormacky5078 Рік тому

      @@Deletedeletedelete Не преувеличивайте, там достаточно фишек в синтаксисе, вопрос в другом используются они или нет!

  • @hopelesssuprem1867
    @hopelesssuprem1867 Рік тому +8

    В питоне хэш-мап - это словарь, а то так сразу можно и столку сбить)

  • @flybenazer-chanel
    @flybenazer-chanel 8 місяців тому

    спасибо

  • @ВикторМорозов-ы9ф

    Балдеж!

  • @ivanovchin
    @ivanovchin Рік тому

    ого, ты начал показывать код на python, а не на java, неожиданно

  • @AToPAt
    @AToPAt Рік тому

    Сколько времени дается на выполнение подобной задачи на собеседовании?

    • @denisgluk431
      @denisgluk431 Рік тому

      у нас скорее всего на бумажке попросят прикинуть.. т.е. как-то так не ходу.. я на одном просто рогом упёрся и какие-то вещи на пальцах объяснял, чтобы каракули долго не писать

    • @MyTradePro
      @MyTradePro Рік тому

      Он же сказал в видео - 20 минут

  • @alexanderzaretskiy4188
    @alexanderzaretskiy4188 Рік тому

    Класс)

  • @ИгорьЛукин-и7ж
    @ИгорьЛукин-и7ж Рік тому

    Как ты это решаешь?

  • @101picofarad
    @101picofarad Рік тому

    А для чего может быть полезен результат такого решения?

    • @ЕвгенийИзотов-н7п
      @ЕвгенийИзотов-н7п Рік тому +1

      Для развития алгоритмического мышления.

    • @101picofarad
      @101picofarad Рік тому

      @@ЕвгенийИзотов-н7п Т.е. этот алгоритм ни где не используется ;)?

    • @bazilval
      @bazilval Рік тому +1

      @@101picofarad можно представить, например, что вы ищете временной период, когда денежный баланс на счёте был равен определенной сумме

  • @kitsiv
    @kitsiv Рік тому +1

    мда, это конечно обычным людям нереально достичь. Пойду дальше писать калькуляторы

  • @Insidepointg
    @Insidepointg Рік тому

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

  • @nikolay2263
    @nikolay2263 Рік тому

    Еще есть способ решить через префиксную сумму, также o(n) по времени и памяти

    • @holy-del
      @holy-del Рік тому

      А он через что решил?

    • @solarine-7354
      @solarine-7354 Рік тому +1

      Имеется ввиду что можно не использовать хэш мапу

  • @IvannZ_Ru
    @IvannZ_Ru Рік тому

    а это же ещё и префиксные суммы?

    • @IvannZ_Ru
      @IvannZ_Ru Рік тому

      а, позже в видео сказали)

  • @Матвей-ф4ч1ъ
    @Матвей-ф4ч1ъ Рік тому

    Почему тут не было бинарного поиска😢?По моему,это было бы самое оптимальное и рациональное решение!

  • @brilliantgame8090
    @brilliantgame8090 Рік тому

    Саша, у тебя грубая ошибка в видео где 1млн просмотров.
    В части про бинарный поиск ты показываешь на доске не правильно левую границу поиска и соотв. середину поиска тоже. Это сбивает с толку. Хотя код потом правильно описан. Странно что в комментариях никто этого не упомянул.

  • @Baha996
    @Baha996 Рік тому

    класс

  • @aleksandr_t
    @aleksandr_t Рік тому

    Кстати, мне давали такую задачу в Яндексе

  • @sinushkin
    @sinushkin 29 днів тому

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

  • @vladimirpek
    @vladimirpek Рік тому

    Поставил на паузу: Sliding window

    • @mrxDots
      @mrxDots Рік тому +1

      Sliding window сработает только если все числа >= 0

    • @d0paminer
      @d0paminer Рік тому

      ​@@mrxDotsсработает в любом случае, просто он медленный

  • @kotikkoty6649
    @kotikkoty6649 11 місяців тому

    Может быть, я лох, но покажите, кто до хтой задачи додумается сам за 20 минут, не зная типового решения? Или вопрос в том, что это прям базовое типовое решение, которое и так все знают?

  • @Рома-с5д
    @Рома-с5д 7 місяців тому

    как человек который живет в Лондоне вместа сам говорит сум?

  • @korniienkooleh5547
    @korniienkooleh5547 Рік тому +1

    разве второй вариант это не O(n^2 / 2)

  • @surrrogatehuman7653
    @surrrogatehuman7653 Рік тому

    Так надо говорить, что знаешь решение или нет....

  • @МаксимДементьев-э5с

    верните, пожалуйста, видео про хеш-сеты, я не досмотрел

  • @lidersh.2360
    @lidersh.2360 Рік тому

    Спасибо за ролик, классно! Но хочу уточнить что при пояснении первого примера границы левая и правая могут совпасть и тогда это будет подмассив из 1 элемента
    Просто по объяснению создаётся впечатление что длина подмассива начинается с двух элементов, хотя в самом примере было указано что длина может быть и 1 элемент

  • @TTTuTTT
    @TTTuTTT 11 місяців тому

    привет меня зовут саша лукин и я работаю в компании Гугл в ЛОНДОНЕ! Слышишь с..а, в ЛОНДОНЕ!!! Не то что ты. А я в ЛОНДОНЕ! саша лукин и в ЛОНДОНЕ! Вот я какой! Ахахаха охохохо я неипически крут!

  • @inex550
    @inex550 Рік тому

    Блетб. Гениально

  • @Sergey-Primak
    @Sergey-Primak Рік тому +1

    14:17 - "но при этом мы тратим O(n) памяти"
    и еще мы тратим время на поиск в этой памяти "отрезаемых кусков" - O(n)
    в итоге время алгоритма примерно равно O(2*n)

    • @asethone
      @asethone Рік тому +3

      В терминах Big O (O-большое), константы не учитываются при рассчете алгоритмической сложности, поэтому итоговая сложность записывается именно как O(n). Рекомендую подробнее почитать про оценку сложности алгоритмов.

    • @Sergey-Primak
      @Sergey-Primak Рік тому

      @@asethone согласен;-)
      но алгоритм с O(n) используемый в цикле m раз, всегда будет быстрее, чем тот же цикл с алгоритмом с неправильной оценкой сложности O(3*n).
      сложности у алгоритмов одинаковы - скорости разные

    • @asethone
      @asethone Рік тому

      ​@@Sergey-Primak Ну вопрос оптимизации - это уже отдельная тема. Уменьшить количество проходов по циклу после того, как ты придумал быстрое решение всегда можно успеть.
      Главное, и самое сложное на собеседованиях - это как раз придумать такое решение, которое именно в терминах Big O будет наиболее оптимальным. А то, что ты там лишний раз добавишь O(n) вне цикла - это никого даже не смутит, ведь O(n) + O(n) все еще O(n).

  • @МихаилЧ-д2х
    @МихаилЧ-д2х Рік тому +3

    Предполагаю, что последний алгоритм решается не за O(n), а за O(n * log2n), мы же не знаем, как извлекаются значения из словаря, скорее всего там бинарный поиск с логарифмической сложностью, либо необходимо делать массив количеств, и извлекать значения за O(1) и тогда общая сложность алгоритма будет O(n), но памяти может быть израсходовано значительно больше

    • @mityaoreh
      @mityaoreh Рік тому +1

      значения из словаря всегда за О(1) же

    • @asethone
      @asethone Рік тому +4

      Реализация конкретного словаря зависит от библиотеки, но в основном - это хеш-таблицы. К примеру, стандартная библиотека шаблонов STL в C++ предлагает unordered_map, в документации, к которой, можно увидеть, что средняя скорость извлечения, удаления и добавления нового элемента O(1). Аналоги: HashMap в Java, dict в Python.
      Возвращаясь к STL в C++, там есть и обычный контейнер map, который реализован как раз на красно-черном двоичном дереве - в нем-то, все аналогичные действия и занимают O(log n).
      В основном, когда говорят про словари, имеются в виду именно хеш-мапы, о чем как раз Саша и говорит на 10:05. Поэтому алгоритмическая сложность последнего решения действительно O(n), и ошибки здесь нет.

    • @Lammax2012
      @Lammax2012 Рік тому

      под капотом обычно массив

    • @vshcherb
      @vshcherb Рік тому

      ​@@asethone Добавление нового элемента в хеш-таблицы не o(1), необходимо добавлять сложность увеличения и ребалансировки хеш-таблиц, так что *среднняя сложность* равна все той-же o(log n). В общих условиях, где не выделяется 2 ГБ память на все int hashtable.

  • @НиколайРоманов-р4ф

    Работник гугла рекламирует яндекс?

  • @Denisko123
    @Denisko123 Рік тому

    Сначала подумал, что это задачка, которую я вчера решал на Литкоде. Аж охренел ))) Но там попроще, там просто надо найти ключи двух элементов, дающих в сумме ту же 5 (здесь нет решений). Решается элементарно через два for. Тут посложнее задачка.

  • @ЕвгенийИзотов-н7п

    Не рекомендую брать ЯндекПрактикум Python (личный опыт). Он чуть-чуть дает знания и денег своих не стоит, цена сильно завышено. Порядка 70% материалов, вам придется искать самостоятельно в интернете (Да, Яндекс просит денег, за то что бы он вам написал, то что нужно понгуглить).
    Ну а про баги самой платформы вы можете почитать отзывы в интернете, они впринципе все одинаковые.
    Если вам кто-то оплатит 100% курса (или около того), то смело можно идти, но приготовьтесь страдать!

    • @mrxDots
      @mrxDots Рік тому

      Я учился и потом работал в практикуме. Это правда, что всей информации на курсе в материалах недостаточно, Яндекс дает каркас, это цель курса - научиться самостоятельно изучать недостающую информацию (ее на самом деле не так много). + у вас есть вебинары, где можете задавать вопросы + код ревью где ревьюер тоже подскажет как делать лучше и комьюнити для обмена информацией. Если что-то не нравится (бывают разные менторы), можно обратиться к куратору. Надо понимать, что практикум это для тех кто хочет учиться, а не чтобы знания положили в голову. На финале вы сделаете несколько проектов, без понимания вы их сделать не сможете, так что уйдете со знаниями и опытом. Конечно это не уровень «сразу идти работать», если курс вам это обещает - не верьте. практикум хорош для переквалификации и понятного старта. Я нанимал людей после практикума и других курсов, у первых в голове хорошее понимание «что и зачем», а не «потому что я так прочитал»

    • @ЕвгенийИзотов-н7п
      @ЕвгенийИзотов-н7п Рік тому

      @@mrxDots Яндекс просит от 50 000 до 250 000 р. (скидки не рассматриваем) за то что, ...Яндекс дает каркас, это цель курса - научиться САМОСТОЯТЕЛЬНО изучать недостающую информацию...
      Повторюсь, ищите материалы самостоятельно, но платите за это деньги и не малые - именно в этом у меня основная претензия.
      На одно из Финальных Заданий - нужно было использовать HTML страницу, которую предоставлял ЯП. И именно из-за этой страницы, часть проекта не работало. Причина, которой она не работала, не расскрывалась в материалах ЯП. (собственно для решения того Финального задания матреиалы ЯП вообще не нужны были, так как в них не содержалась информация нужная для написания требуемого кода в ФЗ.)

    • @denisgluk431
      @denisgluk431 Рік тому

      и чего там питон дают или что ещё?

  • @syavorskiy
    @syavorskiy Рік тому +2

    Это не совсем O(n): решение использует функции работы с массивами, у которых неизвестно, что внутри.
    В отсутствие индекса тому же get'у понадобится в самом плохом случае пробежать весь массив.
    Кроме того, операции добавления элементов в массив и изменения их значений тоже не бесплатны.
    Это очень хорошо видно при работе с базами данных, на десятках и сотнях тысяч записей.
    Так что было бы интересно сравнить производительность второго и третьего решения на большом массиве. Скажем, в 1000 элементов.

    • @syavorskiy
      @syavorskiy Рік тому

      @@SayXaNow да, я прочитал вашу дискуссию ) жаль, что после того, как свой коммент написал. Отличный тест, спасибо!

    • @denisgluk431
      @denisgluk431 Рік тому

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

  • @xz8928
    @xz8928 Рік тому

    я думал сначала отсортировать массив и использовать метод двух индексов

    • @Гэтсби-ь6ю
      @Гэтсби-ь6ю Рік тому

      тогда вообще ответ поменяется

    • @xz8928
      @xz8928 Рік тому

      @@Гэтсби-ь6ю да я это уже понял )

    • @richlance
      @richlance Рік тому

      С двумя индексами, кажется, можно и без хеш-мап решить

  • @helgisnezhin7928
    @helgisnezhin7928 Рік тому

    Как это можно понимать??? Ну почему я такой тупой(((((

  • @Тёма-ш7г
    @Тёма-ш7г Рік тому

    27б)))))

  • @sidhott
    @sidhott Рік тому +4

    Но оценка O(N) не учитывает ни построение хешмапа, ни поиск по нему. ОК, поиском можно пренебречь, т.к. он упорядочен, но как быть с тем, что на каждой итерации перестраивается либо сам хешмап, либо его индекс?

    • @alfagamma2499
      @alfagamma2499 Рік тому

      О(5*N)==O(N), т.е. речь о решении задачи за время сопоставимое с количеством данных, когда N стремится к бесконечности.
      Поэтому особо разницы нет, конечный пользователь зачастую не заметит разницу в обработке чего-либо за 1мс или 5мс, но если функция уйдет в степени, то дело плохо

    • @sidhott
      @sidhott Рік тому +1

      @@alfagamma2499 а откуда Вы взяли 5х, почему время построения хешмапа сопоставимо с его размером, а не, скажем, квадратом его размера?

    • @alfagamma2499
      @alfagamma2499 Рік тому

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

    • @sidhott
      @sidhott Рік тому

      @@alfagamma2499 а какая разница достраиваю я хеш или строю с нуля, если мне память двигать? n раз передвинуть n/2 ячеек памяти -- это O(n)? "много действий" -- это сколько конкретно, О(индекса)?
      P.S. прошёл по массиву чисел раз -- только звучит красиво, т.к. O(n) + O(n2) = O(n2).

    • @101picofarad
      @101picofarad Рік тому

      ​@@sidhottможно родить массив с упреждением и удваивать его при переполнении чтобы не перекидывать его в памяти при каждой записи.

  • @acthanger7420
    @acthanger7420 Рік тому +1

    Разреши задать один вопрос -
    почему ты рекламу в ролики вставляешь? Это просто средство доп. заработка или может ты кайфуешь от того факта, что твой канал на Ютубе приносит деньги?
    P.S. Я ни в коему случае, не осуждаю и не придераюсь. Мне очень нравится твой контент, а этот вопрос чисто от любопытства.
    Так что братан, хорош, контент в кайф, вот такого бы побольше)

    • @asethone
      @asethone Рік тому +1

      Я тоже обратил внимание.
      Интересно, какая должна быть сумма за рекламу, чтобы даже чел, работающий мидлом в лондоне, согласился ее опубликовать у себя на канале)
      Без негатива. Просто тоже любопытно.

  • @MrKOHKyPEHT
    @MrKOHKyPEHT Рік тому +1

    Что за пайтон? Где джава? )

    • @karelalex
      @karelalex Рік тому +2

      Петухон, Жава, какя разница?

  • @ivanserg6393
    @ivanserg6393 Рік тому +1

    Почему-то нет инофрмации по типам данных. Если это int, то можно и красивее через гистограмму, без хэшмэпы, если же это float - то могут быть близкие числа по типу 1.000002, 1.000001, 1.999997 для которых вычитание работать не будет в силу двоичности данных. И хэшмап тоже работать не будет при некоторых хэшированиях, т.к. все хэши совпадут, что приведет к o(n^2)

    • @sergeev_oleg
      @sergeev_oleg Рік тому

      По условию, видимо, массив из целых чисел.
      Алгоритмические задачи обычно решаются с помощью базовых типов данных.

    • @ivormacky5078
      @ivormacky5078 Рік тому

      Это как это через гистограмму?

    • @ivanserg6393
      @ivanserg6393 Рік тому

      @user-jp8jl5mg3v n шагов, на каждом шаге n проверок, если хэш совпадает

    • @ivanserg6393
      @ivanserg6393 Рік тому

      @@sergeev_oleg вообще в алгоритмических задачах всегда обговаривают тип, если это важно для решения.