|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
Помогите, пожалуйста с задачей. Нужно написать код, который принимает два значения (n и k) и выдает значение функции (описана во вложении). Программа работает медленно для больших чисел, и у меня проблемы с пониманием как использовать мемоизацию и не считать уже вычисленные значения раннее. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
Модератор: Для оформления исходников есть тэг [ SRC ] ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2018, 15:30 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
Мемоизация - это запоминание однажды посчитанного, т.е. кэширование. Схематично так работает: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2018, 16:29 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
авторМемоизация - это запоминание однажды посчитанного, т.е. кэширование. в данном случае и так считает мгновенно, даже "./a.out 345873853 193845738" да и такие простейшие расчёты имхо проще, чем запоминать каждую цифру, а потом ещё if делать на каждую ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2018, 21:59 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
Здесь нужна не мемоизация а просто некий умный способ сворачивания рекурсии с использованием частично накопленного результата. Как в фибоначчи. Прямая в лоб реализация - генерирует избыточное дерево расчетов. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2018, 22:54 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
maytonЗдесь нужна не мемоизация а просто некий умный способ сворачивания рекурсии с использованием частично накопленного результата. Как в фибоначчи. Прямая в лоб реализация - генерирует избыточное дерево расчетов. это уже к математикам на форум а мы только можем озаботиться, чтобы данные в L1/L2 -кэш попали ну так они вроде там ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2018, 23:48 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
Математики тем более таким не занимаются. Это чисто it-шный вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2018, 08:50 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
maytonМатематики тем более таким не занимаются. Это чисто it-шный вопрос. в первую очередь, это вопрос терминологии. это не вопрос information technology, над такими вопросами в computer science трудятся. :)) Так или иначе, в русском языке нет адекватного перевода ни тому, ни другому. По русски это, в любом случае, дело "программиста". И, мне кажется, что это скорее хорошо, чем плохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2018, 10:34 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
Это хорошо. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2018, 12:50 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
maytonМатематики тем более таким не занимаются. Это чисто it-шный вопрос. ну технически вы правы думаю, математики уже над этой задачей поработали однако нам тут тоже предложить особо нечего, кроме констант на 1000 значений, например ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2018, 15:57 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
Попробуй перевернуть цикл вверх ногами. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2018, 18:52 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
для сравнения с 0 чтоли? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2018, 20:31 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
полудух, Ноль здесь не причем. Понаблюдай какие аргументы пойдут в функцию F(). ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2018, 20:44 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
1101ьПомогите, пожалуйста с задачей. Нужно написать код, который принимает два значения (n и k) и выдает значение функции (описана во вложении). Программа работает медленно для больших чисел, и у меня проблемы с пониманием как использовать мемоизацию и не считать уже вычисленные значения раннее.Получается, что имеем одномерный массив большой длины, который определяется только одним число n. Число k себя никак не проявляет. В результате имеем первые начальные n чисел, как исходные, а каждое следующее число есть сумма n предыдущих чисел с коэффициентами. Может быть k есть число, указывающее когда нужно остановиться? Если массив уж очень большой, и n большое, то конечно будет долго идти вычисления. И негде убыстрить: коэффициенты у предыдущих чисел всегда разные. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2018, 21:06 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
maytonПонаблюдай какие аргументы пойдут в функцию F(). ровно те же самые ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2018, 21:08 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
полудухmaytonПонаблюдай какие аргументы пойдут в функцию F(). ровно те же самые! Да но в каком порядке? И можем ли мы получить с этого выгоду? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2018, 22:00 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
maytonИ можем ли мы получить с этого выгоду? нет. и кончай загадками говорить. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 03:52 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
Область определения этой функции это квадрант с осями n,k . Квадрант в свою очередь разбит на 2 телесных угла под 45 градусов. Одну половинку можно не вычислять. Она тривиальна. А другую вычислять и мемоизировать. +Ещё стоит вопрос целочисленного переполнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 12:35 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
В мемоизационой области можно поискать формулу множителя на который надо домножить соседнюю ячейку чтобы получить f(n,k). Если получится - уйдет цикл. По аналогии с треугольником Паскаля. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 12:45 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
maytonМатематики тем более таким не занимаются. Это чисто it-шный вопрос. что-то я пока что вижу чистую математику ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 13:40 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
Что именно напугало? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 14:24 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
maytonЗдесь нужна не мемоизация а просто некий умный способ сворачивания рекурсии с использованием частично накопленного результата. Как в фибоначчи. Прямая в лоб реализация - генерирует избыточное дерево расчетов. Если подразумевается матричное решение "как в фибоначчи", то да. Здесь рекуррентное соотношение, представимое в матричной форме. И решение должно быть тем же - возведение в степень единичной производящей матрицы. Отличие в том, что здесь размер матрицы является параметром n. Вероятно, это должно достаточно красиво программироваться без мемоизации. Кажется, что надо только со скрижалей пыль подсдуть... Это требует некоторого времени, гороха и установления места- где поставлены те скрижали. Без гороха и теории на наивный вариант мемоизации можно было бы смотреть так: Пусть есть массив, мемоизирующий все значения k для заданного n. Тогда его первые n элементов от 0 до n-1 окажутся просто заполнены числами, равными своему индексу. А начиная с индекса n пойдут рекуррентно вычисляемые значения в пределах скользящего окна размером n. Если такой массив разделить на слоты, слайсы размером в n элементов массива, то значение к-го элемента, считая с нуля, окажется в слайсе с номером m = k \ n, где \ - целочисленное деление. А его номер в слайсе будет l = k mod n - остаток целочисленого деления k на n. Проводя заполнение массива на размер целого слайса и храня номер последнего вычисленного слайса, легко получить простой цикл, довычисляющий необходимый m-ый слайс, если он не был вычислен раньше. При тотальной мемоизации на каждый n требуется свой мемоизирующий массив. Это расточительно, но легко программируется. Если отказаться от тотальной мемоизации и амортизированного константного времени доступа к значению для (n,k), то достаточно работать просто с массивом размера n+n (или парой массивов - n и n+n) и циклом, вычисляющим значения m-го слайса. В зависимости от деталей контекста, это кажется и может оказаться перспективным. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 15:09 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
maytonЧто именно напугало? математика это определённый склад ума читай - армию нейронов нужно создавать, долго и усердно решая задачки я, в принципе, не сильно против, но нет пока ни времени, ни достаточной мотивации посматриваю иногда видики Савватеева: ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 16:10 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
полудух, не жалейте себя. Просто берите и делайте. Не боги горшки обжигают. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 17:17 |
|
Помощь с рекурсией и мемоизацией
|
|||
---|---|---|---|
#18+
mayton.. Не боги горшки обжигают. Смыслы крылатых фраз плывут и, как правило, меняют свои значения на прямо противоположные исходным. Эту фразу часто используют в контексте - это легко и просто, тут нет ничего сложного. Между тем, Конечно, горшки обжигают именно боги. Гефест, например, большой умелец и этого искусства тоже, как связанного с огнем. Но, титан Прометей подарил/вернул людям огонь, Афина Паллада одарила гончарным кругом, а Гефест тайком обучил, как пользоваться тем и другим. Искусство обжигания горшков, это фрагмент силы, способности и возможности жить рядом с богами, но независимо от них. Что тогда отличает, владеющих обжиганием горшков людей от богов, кроме бренности человеческой жизни? И это отличие, скорее, в пользу людей. Так как вечную жизнь богов, иначе как проклятие, разумный человек интерпретировать не сможет. Иначе зачем бы Одиссей убегал от Калипсо, если бы бессмертие не было бы проклятием, и обладало хоть какой-нибудь ценностью. У бессмертия есть одна особенность, тревожащая людей - на него обречены боги. Но человеку не нужно бессмертие, чтобы жить рядом с ними и независимо от них. Гончарного искусства достаточно. И оно дано даром (с точки зрения людей), но это не значит, что оно не является тайной и не требует, усилий, приверженности и любви к нему. Гончар, как и любой ремесленник, это человек способный творить, и творящий шедевр. И плата, взятая Прометеем с людей за возвращенный/подаренный огонь, как раз и заключается в готовности людей жить всегда рядом с богами, но независимо от них, через и с помощью непрерывного создания шедевров. maytonполудух, не жалейте себя. Просто берите и делайте. Ну да, что-то в этом роде. В том смысле, что дерзай. Дерзай, стремясь понять и соединить в себе искусство всех творящих богов разом. Это подразумевает какое-то учение. Хотя бы самоучение. Но нельзя сотворить шедевр, не дерзнув. Не сказав - вот это я сейчас сделаю сам. К счастью, пока глину земли не поставили в огонь для обдува жарким воздухом Солна, её можно смочить водой и пытаться лепить заново. Разминая глину, человек владеет вселенной, всеми её стихиями. Да горшки обжигают не боги. Аккуратнее сказать - не только боги. Но это не значит, что слепив кривой горшок можно сказать - ладно, и так сойдет. Хоть мы и рядом с богами, но не в Тридевятом Царстве. Тут, неровён час, и голову отрубить могут, совсем как у богов. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 22:05 |
|
|
start [/forum/topic.php?fid=16&fpage=12&tid=1340047]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
114ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 279ms |
total: | 496ms |
0 / 0 |