Динамическое программирование: траектории кузнечика

Поделиться
HTML-код
  • Опубликовано: 9 фев 2025
  • Задача из ЕГЭ про граф дорог.
    Количество различных траекторий кузнечика из 1 в N.
    Реализация динамическим программированием.
    Курс молодого бойца по информатике (Язык Си).
    cs.mipt.ru/c_intro

Комментарии • 71

  • @LIMESLYME
    @LIMESLYME 6 лет назад +35

    Спасибо огромное за все то, что вы делаете!

    • @aswonder5569
      @aswonder5569 6 лет назад +1

      Эх, мне бы ваши лекции лет 15 назад... Я тогда рисовал сайт города и надо было на карте для некоторой точки в городе найти кратчайший маршрут, используя известные маршруты общественного транспорта. Ох, пришлось попотеть, до всего доходя своими мыслями и поиском алгоритмов в Интернете!

  • @ВиталийПавлов-п9ц
    @ВиталийПавлов-п9ц 12 дней назад

    Спасибо большое, вы мастер своего дела!

  • @olexandrchernov7697
    @olexandrchernov7697 Год назад +5

    Это просто лучшее объяснение, спасибо огромное

  • @crappydog7747
    @crappydog7747 5 лет назад +36

    Кузнечик получился очень реалистичный

    • @tema_skakun
      @tema_skakun 3 года назад +8

      только коленки д.б. в другую сторону)

  • @niklkislshin9125
    @niklkislshin9125 4 года назад +4

    Вы замечательный преподаватель!

  • @alexuspro26
    @alexuspro26 2 года назад +1

    Более правильный ответ, конечно:
    if (n < 2) { return n; } else { return numberof(n - 1) + numberof(n - 2); }
    Но можно и через массив. С удовольствием послушал, спасибо.

  • @LebbLebb
    @LebbLebb Год назад +1

    Спасибо вам за курсы - постоянно открываю

  • @saitaro
    @saitaro 5 лет назад +5

    Я в здоровой части YT, спасибо вам за это, Тимофей!

  • @MrMitror
    @MrMitror 5 лет назад +64

    «Некоторые школьники думают 0»
    -не только школьники, скажу я вам)

    • @recreationreally4382
      @recreationreally4382 5 лет назад +6

      И скорее всего правы.

    • @padla6304
      @padla6304 2 года назад +2

      @@recreationreally4382 у прав столько же прав
      сколько у неправ

  • @MentiTM
    @MentiTM 2 года назад

    я в программировании почти ноль) просто зашел к вам в гости

  • @recreationreally4382
    @recreationreally4382 5 лет назад +7

    Если у Вас в А - одна траектория, тогда во всех других будет +1, В, С по 2 траектории и т.д. Добавляя ребро (А,А) Вы усложняете задачу лишней информацией. В А - 0 траекторий, ибо нет ни одного входящего ребра и это признак начальной вершины Вашего графа. В J есть только входящие ребра: (G,J), (H,J), (I,J) и это признак конечной вершины.

  • @ДмитрийБояринов-ш9ъ

    на 9:06 непоняточка: "формула для К равного 2 даёт 1" хотя корректнее было бы сказать "K при n равным 2 формула даёт 1"

  • @mar_kha
    @mar_kha Год назад

    Потрясающее объяснение!)

  • @risesduckness
    @risesduckness 4 года назад +3

    Благодарю за хороший урок!

  • @DiamondSane
    @DiamondSane 5 лет назад +2

    4:48 Из города А в город А может быть 1 либо 0 траекторий, если мы договорились описывать траектории рёбрами ориентированного графа. На момент задания вопроса у вас не было нарисовано стрелки из А в А, что можно трактовать двояко: либо этой траектории нет, либо её не нарисовали чтобы не загромождать и такая траектория подразумевается существующей для каждого города. В ряде случаев такие умалчивания могут смущать учащихся.

    • @mihaitimofti9789
      @mihaitimofti9789 3 года назад

      кстати а почему не считается циклом траектория из А в А?

    • @DiamondSane
      @DiamondSane 3 года назад

      @@mihaitimofti9789 по договорённости, как и всегда

    • @arrov1980
      @arrov1980 2 года назад

      @@DiamondSane а почему он обсчитался? У него получилось 14, а всего вроде путей до J 12, но почему?

  • @andrey7530
    @andrey7530 5 лет назад +33

    6:06 Тимофей, видимо, обратился к помощи калькулятора :), шутка )))

  • @andrey7530
    @andrey7530 5 лет назад +2

    спасибо за науку!!

  • @NeoCoding
    @NeoCoding 4 месяца назад

    это талант их простого сделать сложное!😄

  • @sergen5298
    @sergen5298 3 года назад +4

    По условию задачи кузнечик прыгает только на +1 или + 2! На 0 (т.е. "не прыгать") он не может. Значит попасть в город 1 из города 1 он не может. Просто считать это единицей удобно.

    • @hod-pj
      @hod-pj Год назад

      просто "удобно" подогнать под формулу. ведь 0! =1.

  • @hackerpro6073
    @hackerpro6073 Год назад +2

    Можно ли это использовать для нахождения уникальных комбинаций из не минимизированых функций?

  • @mihrankhachatryan3693
    @mihrankhachatryan3693 3 года назад +23

    Он назвал меня школьником))

  • @AB-ex4iu
    @AB-ex4iu 2 года назад +1

    1:34-1:36 magic

  • @II-is4ft
    @II-is4ft Год назад

    Спасибо

  • @Drampam
    @Drampam 4 года назад +2

    Я может что-то совсем не понял? Но почему при формуле Kn = Kn-1 + Kn-2 в задаче маршрутов из 1 в 5 получается ответ 5??? n = 5, значит ответо должен быть Kn=5 = 4+3 = 7. Вариантов прыжков кузнечика при этом вообще 8: 1) 1->5; 2) 1->2->5; 3) 1->3->5; 4) 1->4->5; 5) 1->2->3->5; 6) 1->2->4->5; 7) 1->2->3->4->5; 8) 1->3->4->5 . Пожалуйста, объясните, я в панике :)))

    • @ПавелЛобанов-к7т
      @ПавелЛобанов-к7т 4 года назад +1

      K5=K4+K3, K4=K3+K2, K3=K2+K1, K1=1, K2=1, следовательно K3=2, K4=3 и K5=5. Кузнечик прыгает на 1 или 2 шага, он не может прыгнуть из 1 в 5 или из 1 в 4 и т.д., поэтому вариантов не 8, а 5ть.

    • @entarossa
      @entarossa 3 года назад

      @@ПавелЛобанов-к7т Это числа Фибоначчи. Вариантов действительно 8 (варианты прыжков кузнечика для 5-ти):
      1 + 1 + 1 + 1 + 1
      1 + 1 + 1 + 2
      1 + 1 + 2 + 1
      1 + 2 + 1 + 1
      2 + 1 + 1 + 1
      2 + 1 + 2
      2 + 2 + 1
      1 + 2 + 2

    • @llBARSll
      @llBARSll 3 года назад

      @@entarossa у Вас рассчёт для 6-ти. На 5-ти он прыгает 4 раза, потому что в первой клетке он уже стоит по умолчанию.
      фиб: 1, 1, 2, 3, 5,

  • @TheKirk1989
    @TheKirk1989 8 месяцев назад

    Итак подытожим , что я сегодня узнал..
    1. из пункта "А" в пункт "А" оказывается есть один путь (учитывая что вариаций путей два это либо 1 прыжок, либо 2)
    2. grasshopper - кузнечик (англ.)

  • @jeen9984
    @jeen9984 5 лет назад +1

    10:08 Могу ошибаться, но статические массивы так создавать нельзя, т.к. размер должен быть константой. То что оно работает - это ub.

    • @siborgium9022
      @siborgium9022 5 лет назад +1

      Начиная со стандарта C99 (Если использовать gcc-расширения стандарта, то с C90) такой код корректен. Обращу внимание, С, не С++.

    • @jeen9984
      @jeen9984 5 лет назад

      @@siborgium9022 Да, все верно. Почему-то не заметил, что на C пишут, а не на плюсах.

  • @nemounas2127
    @nemounas2127 5 лет назад

    Интересный алгоритм. Правильно ли я понимаю, что если бы кузнечик мог прыгать еще и на +3 клетки нужно было бы просто в цикле прибавить еще K[i-3] ? Получается для n=5 такой массив [0, 1, 1, 2, 4, 7] И количество возможных вариантов попасть в 5 увеличиться до 7 ? Как можно получить 4 : 1-2-4 1-3-4 1-2-3-4 и добавляется еще четвертый вариант с прыжком +3: 1-4. Вроде бы работает верно?

    • @nemounas2127
      @nemounas2127 5 лет назад

      Но это все как то теоретически. Для решения какой задачи его можно применить?

  • @onemiller5002
    @onemiller5002 5 лет назад +2

    Так я все время решал через рекурсию, даже не зная этого))

  • @iwansea6040
    @iwansea6040 4 года назад +3

    Тут объяснение куда понятнее чем в лекции)))

  • @igorsavelev9013
    @igorsavelev9013 2 года назад

    А не планируется практики или алгоритмов и структур данных на си курса?

  • @ЦарьЕвгений-у9с
    @ЦарьЕвгений-у9с 5 лет назад

    спасибо

  • @rosalyrdw
    @rosalyrdw Год назад

    Я сначала подумала, что вы с Борисом Трушиным связаны, но нет
    Изменено: Так я путешествую, просто моя траектория это лежать на кровати

  • @topsy9818
    @topsy9818 Год назад

    Объяснение топ, все круто, но когда включили демку с компа, я был в шоке... Почему такая древняя винда, такой древний софт... Вроде МФТИ, а как будто самая задрипанная школа...

  • @kirillshvedov8417
    @kirillshvedov8417 4 года назад

    Да, когда уже школу закончил - это уж точно знаешь.Тут как бы не обсуждается.

  • @ФилиппДруан
    @ФилиппДруан 4 года назад

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

    • @TheSanSanch
      @TheSanSanch 3 года назад

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

  • @lazaripeterdev
    @lazaripeterdev 3 года назад

    в начале вроде Ка-з = Ка-у + Ка-х + 2 (4.20 время)

  • @art4259
    @art4259 11 месяцев назад

    Массив-то зачем? ;)

  • @sobakabasquerwilly1263
    @sobakabasquerwilly1263 5 лет назад +1

    Вот если бы я увидел это когда сдавал ЕГЭ 4 года назад)))

  • @surname_name
    @surname_name 5 лет назад +1

    В коника лапи не в ту сторону згинаються.

  • @Jax16432
    @Jax16432 3 года назад

    Куплинов?

  • @malyshevslava4664
    @malyshevslava4664 4 года назад +1

    я не понимаю этих ЕГЭ. Если там такие алгоритмы, которые требуют университетских знаний, зачем тогда потом университет?

    • @torcher5023
      @torcher5023 4 года назад +2

      это не университетский алгоритм, такие задачи разбирают в 9 классе.

  • @thepantelemon
    @thepantelemon 5 лет назад

    Сорри, но я не понял 14 было правильно или нет?

  • @ЕкатеринаЧерняева-г9ы

    сложно даа

  • @zimniyhodok4622
    @zimniyhodok4622 5 лет назад

    О, животик уже виднеется

  • @romaboy1052
    @romaboy1052 5 лет назад

    калькулятор это не в духе динамического программирования. он в ВШЭ сбегал пнул дверь, те - набибулину,она-МВФ, те - ротшильдов с постели подняли .А почему все так быстро? А потому- CASH был, батенька...

  • @kirillshvedov8417
    @kirillshvedov8417 4 года назад

    Назвал бы функцию как function() ---> как-то ближе к народу русскому было бы. А так какие-то тражекторис какие-то...аж слух режет

    • @linterrupt
      @linterrupt 4 года назад

      В программировании называть переменные и функции русскими названиями считается плохим тоном.
      Надо учить английский и привыкать писать на английском.

    • @kirillshvedov8417
      @kirillshvedov8417 4 года назад

      @@linterrupt ​ @Саша Коваленко да лол.я английский получше препода средненького универа знаю)))считаю для первичного понимния можно было бы фунцию как-то попроще назвать: типа myfunct/functAlloc и.т.д.) ну или в данном случае заменить tRaJEctory на path или ways) ну grasshoper - это вообще смех)))

    • @kirillshvedov8417
      @kirillshvedov8417 4 года назад

      А так вообще по материалу вопросов нет)) спасибо за лекции)) очень помогаете при изучении С

    • @linterrupt
      @linterrupt 4 года назад

      @@kirillshvedov8417 Вы ошиблись, поблагодарив меня, я простой комментатор.
      Лучше сразу формировать привычку писать на английском. На понимании это никак не отражается, поэтому не вижу смысла откладывать на потом.

  • @melnykvladislav2859
    @melnykvladislav2859 5 лет назад +3

    Какого ето у меня у рекомендациях..
    Пойду лучше смотреть лайфхаки

    • @OmgFiny
      @OmgFiny 5 лет назад +1

      Диванный Интеллектуал так тут и есть лайфхак