Алгоритмы и Структуры Данных. Урок 2: Мемоизация.

  Рет қаралды 39,323

alishev

alishev

Күн бұрын

Пікірлер: 62
@alishevN
@alishevN 6 жыл бұрын
КУРС ПО GIT: www.udemy.com/course/git-alishev/?referralCode=71994763964B8E2E6A4E
@ЮлияПавленко-щ7к
@ЮлияПавленко-щ7к 5 жыл бұрын
Спасибо за курс! Самые понятные объяснения для тех, кто спал на лекциях в универе или их вообще не было :))
@olegchumin6634
@olegchumin6634 2 жыл бұрын
Это как раз и есть образец элемента динамического программирования. Автору большой респект за уроки.
@BoyarinLex
@BoyarinLex Жыл бұрын
Огромное спасибо за такие подробные разъяснения) Супергерой нашего времени 🔥Огромный жирный палец вверх 👍
@АлександрМаркелов-ш3ж
@АлександрМаркелов-ш3ж 4 жыл бұрын
Наиль, как всегда прекрасно. Мой совет - если кто не понял как это работает - поставить число, допустим, 10 и пройтись дебагером - будет все наглядно - как проинициализируется массив -1 и как программа начнет проверять числа с числа n массива, опускаясь до 2 элемента и после этого заполняя массив до числа n
@manOfPlanetEarth
@manOfPlanetEarth 4 жыл бұрын
👍🏼
@Дима-з3з7ц
@Дима-з3з7ц 2 жыл бұрын
помогло, спасибо👍
@igorkudryk2199
@igorkudryk2199 6 жыл бұрын
Спасибо за качественные уроки!
@hydrock9738
@hydrock9738 6 жыл бұрын
Хорошие уроки! Спасибо.
@yeson6581
@yeson6581 2 жыл бұрын
Уже на n = 93 пошли отрицательные числа, long закончился. Используйте BigInteger и не забывайте про метод сложения - add и valueOf(n).
@denistalko6585
@denistalko6585 3 жыл бұрын
Очень интересно, спасибо огромное!
@pertshgalstyan6189
@pertshgalstyan6189 6 жыл бұрын
Он вернулся 😎😎😎
@Darmenw
@Darmenw 4 ай бұрын
22:15 увеличив затрать память, снизим выполнение время выполнение
@Tokamame
@Tokamame 5 жыл бұрын
На прошлом уроке подумал, что можно же было запоминать, например, n3 = 3. n4 = 5 и тд в массив. И дергать эти промежуточные числа из массива.
@stanislav1125
@stanislav1125 6 жыл бұрын
А так же можно использовать Option и еще красивее будет.
@Andrzej3935
@Andrzej3935 3 жыл бұрын
Спасибо огромное!
@alexanderostretsov2508
@alexanderostretsov2508 4 жыл бұрын
Топовый мем)
@mornier
@mornier 3 жыл бұрын
можно еще сократить память - использовать массив размерностью не n + 1, а три, и при каждой итерации сдвигать результаты. Рассмотренный Вами метод все равно сосчитает все значения чисел Фибоначи до n, а в результат все время выводится только одно число. Я про метод FibEffective
@siegfried_dd
@siegfried_dd 6 жыл бұрын
Отлично!)
@DimarikCanada
@DimarikCanada 5 жыл бұрын
Комент вообще не по курсу, лучшая благодарность автору это просмотр рекламы до конца. Автор получит комисионные за просмотр)
@АртемТит-в5ь
@АртемТит-в5ь 4 жыл бұрын
это правда?
@ХорхеРодригез
@ХорхеРодригез Жыл бұрын
Интересно, если в принципе фактор скорости выполнения программы можно определить "на глаз", то как понять насколько эффективно выделение памяти для того или иного подхода решения проблемы? Может есть плагины или отдельные методы для этого?
@AroundIntellect
@AroundIntellect Жыл бұрын
Фактор памяти тоже определяется на глаз. Любая дополнительная переменная это О(1), массив и схожие структуры это О(n). Единственное помнить нужно, что нельзя считать за память выход функции. Пример по видео: Подаётся число n и требуется найти n-е число Фибоначчи. Автор для этого вводит целый массив, который равен О(n), возвращая только последний элемент массива, значит общие затраты памяти O(n). При этом, если бы по условию задачи требовалось вернуть все числа Фибоначчи до n, включительно, то этот же метод занимал бы О(1) по памяти, так как выходной массив не шёл бы в учёт, ведь без этого массива не получится вернуть массив, как бы это ни звучало. Так же хочу отметить, что О(n) по памяти для этой задачи не является оптимальным решением. Можно просто создать 2 переменные fib0 = 0 и fib1 = 1 перезаписывая их значение. То есть fib1 += fib 0; fib0 = fib1 - fib0. В конце необходимо вернуть fib1. Этот способ позволить уменьшить затраты памяти до константы, при этом скорость остаётся линейной.
@footballlife9931
@footballlife9931 5 жыл бұрын
спасибо!
@bexcrypto
@bexcrypto 2 жыл бұрын
зачем нужно было заполнять массив -1-ми, и не совсем понятно 18ая строка. Кто понял обьясните пожалуйста буду очень рад :)
@andrsam3682
@andrsam3682 5 жыл бұрын
Правильно ли я понимаю, что алгоритм быстрого преобразования Фурье - это дискретное преобразование Фурье с примененной мемоизацией?
@maximbelousov1560
@maximbelousov1560 6 жыл бұрын
В текущей реализации можно получить очень интересный результат при `n = 99 `=)
@AndryMax
@AndryMax 6 жыл бұрын
очень странно, кто нибудь может объяснить такой результат? upd: а ну вроде потому что лонга не хватает, нужно использовать бигИнтеджер upd2: проверил с бигИнтеджер, всё идеально
@witaliden
@witaliden 5 жыл бұрын
long result = fibNaive(n-1, mem) + fibNaive(n-2, mem); Каким образом на данном этапе происходит сложение? Хоть тыкните, в какую сторону читать)
@Qnoize
@Qnoize 5 жыл бұрын
ну наверное там, где стоит + ... ничего собственно в вычислении не поменялось, только результат присвоился переменной result
@kr8525
@kr8525 2 жыл бұрын
Здрастуйте, почему массив должен быть размером n+1, а не просто n?
@alexander_brun
@alexander_brun 2 жыл бұрын
Математики и программисты любят считать не с единицы, а с нуля. Поэтому с массивами и числами Фибоначчи нужно закладывать в размер этот первый нулевой. То есть десятый элемент будет по счету 11ый.
@Darmenw
@Darmenw 4 ай бұрын
22:15(1 первый урок) На первом уроке сказал увеличив затрать память, снизим выполнение время программа
@ИгорьБирт-я2щ
@ИгорьБирт-я2щ 4 жыл бұрын
Не понимаю, почему массив создаем на 101 элемент [n+1] ???
@pavelkravchenko7005
@pavelkravchenko7005 4 жыл бұрын
Потому что при n = 0 в массиве должно лежать одно число - 0. Соответственно, при n = 1, их уже два - 0 и 1.
@Darmenw
@Darmenw 4 ай бұрын
22:15(1 первый урок) На первом уроке сказал увеличив затрать память, снизим выполнение время программа
@kedr123
@kedr123 4 жыл бұрын
Спасибо Вам за труды! Просьба выложить плейлист по алгоритмам на Python!)
@Roma4086
@Roma4086 4 жыл бұрын
мемоизация - это и есть динамическое программировние?
@alishevN
@alishevN 4 жыл бұрын
похоже, но не совсем то же самое.
@Roma4086
@Roma4086 4 жыл бұрын
@@alishevN а правильно ли сказать так, что при динамическом программировании мы решаем проблему рекурсивно, т.е. перебираем все возможные варианты и выбираем тот вариант, который дает манимум или максимум?
@EEEppt
@EEEppt 3 жыл бұрын
Я так понимаю это по книжке грокаем алгоритмы? ))
@agweprint27
@agweprint27 3 жыл бұрын
Наиль, скажи, а почему ты не поместил мем в метод фибнаив? Зачем он в мэйне, да и лишние аргументы у метода
@alishevN
@alishevN 3 жыл бұрын
Попробуй сделать так)
@agweprint27
@agweprint27 3 жыл бұрын
@@alishevN всё, догнал) он же постоянно будет создавать заново при обращении :)
@mikegrig903
@mikegrig903 2 жыл бұрын
Как в этом так и в предыдущем уроке, 100е число фибоначи не получается, похоже не хватает длины long. Для интереса в цикле от 0 до 100 запусти!!! увидишь, что после 90 начинаются отрицательные числа!!!!
@XIRON86
@XIRON86 3 жыл бұрын
Давайте создадим массив мемов)))
@stanislav1125
@stanislav1125 6 жыл бұрын
Зачем заполнять массив -1, чем плох != null ?
@alexanderwicked8990
@alexanderwicked8990 6 жыл бұрын
Зачем заполнять массив -1? Потому что факториал всегда положителен, и -1 точно не пройдёт. А вы, прежде чем писать этот комментарий, сами хоть попробовали заполнить массив пустыми значениями через Arrays.fill? И как, всё хорошо, полёт нормальный?
@andretiidook7022
@andretiidook7022 6 жыл бұрын
Лонг это не объект
@stas4985
@stas4985 5 жыл бұрын
@@andretiidook7022 ошибаешься малой,лонг с большой буквы это обьект
@dressran3614
@dressran3614 9 ай бұрын
герберт шилдт считает иначе)))@@stas4985
@alexmakarov2504
@alexmakarov2504 2 жыл бұрын
без массива еще в ~2 раза быстрее. long res = 0; long prev0 = 0; long prev1 = 1; for (int i = 2; i
@AroundIntellect
@AroundIntellect Жыл бұрын
Слабо без переменной res?)
@alexmakarov2504
@alexmakarov2504 Жыл бұрын
@@AroundIntellect Можно, просто у меня привычка всегда результат объявлять названием res и его возвращать. Компилятор это оптимизирует, а для меня удобнее.
@AroundIntellect
@AroundIntellect Жыл бұрын
@@alexmakarov2504 В этом плане вопросов нет, читаемость бустит, а это стоит и 10 лишних переменных. Но лично я алгоритмы привык решать максимально оптимально, хоть и нечитаемо
@alexmakarov2504
@alexmakarov2504 Жыл бұрын
@@AroundIntellect Да, согласен, тут не поспоришь, а я еще и плох в алгоритмах, к сожалению.
@AroundIntellect
@AroundIntellect Жыл бұрын
@@alexmakarov2504 Кстати, достаточно больно решать алгоритмы на джаве... Толи дело питон, один кайф, 2-3 строчки и оптимальное решение готово 😂😅 Хотя программирование на джаве мне куда больше нравится
@sashaosaula3325
@sashaosaula3325 4 жыл бұрын
что то даже с дэбаггером не могу понять(((
@Бардзо
@Бардзо Жыл бұрын
ничего непонятно,видос ток отбивает желание разбираться в теме(
@Darmenw
@Darmenw 4 ай бұрын
22:15(1 первый урок) long [ ] arr = long arr[n+1} На первом уроке сказал увеличив затрать память, чтобы снизить время выполнение программа @alishevN да ?
IL'HAN - Qalqam | Official Music Video
03:17
Ilhan Ihsanov
Рет қаралды 700 М.
Каха и дочка
00:28
К-Media
Рет қаралды 3,4 МЛН
СИНИЙ ИНЕЙ УЖЕ ВЫШЕЛ!❄️
01:01
DO$HIK
Рет қаралды 3,3 МЛН
Мемоизация функций: memoize в JavaScript
34:57
Timur Shemsedinov
Рет қаралды 8 М.
Задача из Собеседования на 160,000 Евро в Год
13:27
Саша Лукин
Рет қаралды 1,1 МЛН
IL'HAN - Qalqam | Official Music Video
03:17
Ilhan Ihsanov
Рет қаралды 700 М.