4 / 4 / 1
Регистрация: 27.03.2010
Сообщений: 20
|
|
1 | |
Создать отношение, реализующее функцию M(n,k)30.04.2010, 20:43. Показов 2226. Ответов 17
Метки нет (Все метки)
Вот опять зашёл в тупик Такая задача: Создать отношение, реализующее функцию M(n,k)
так что M(n,k)=0 при n,k<0, M(0,0)=1. M(n,k)=k*M(n-1,k)+k*M(n-1,k-1). Вот что-то не получается раскрутить эту функцию
0
|
30.04.2010, 20:43 | |
Ответы с готовыми решениями:
17
Создать отношение, реализующее функцию SF(n) Создать отношение, реализующее функцию S(n) Создать отношение, реализующее умножение двух матриц Создать назначенное задание реализующее следующий механизм создания резервного копирования данных в каталоге |
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
|
||||||
30.04.2010, 20:53 | 2 | |||||
1
|
4 / 4 / 1
Регистрация: 27.03.2010
Сообщений: 20
|
|
20.05.2010, 19:28 [ТС] | 3 |
Хм, Что то не получается заставить её работать нормально(
0
|
4 / 4 / 1
Регистрация: 27.03.2010
Сообщений: 20
|
||||||
23.05.2010, 20:34 [ТС] | 4 | |||||
вот, получилось
На что выдаёт ошибку переполнения стека, как быть?(
0
|
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
|
|
23.05.2010, 22:47 | 5 |
Я даже дождаться этого сообщения не смогла.
Если SWI Prolog, то там можно задавать размеры стека через Settings->Stack sizes
0
|
4 / 4 / 1
Регистрация: 27.03.2010
Сообщений: 20
|
|
24.05.2010, 20:19 [ТС] | 6 |
Увеличение размера стека не помогло. Препод сказал что нужно самому что нить придумать что бы сделать m(1000,500). Но у меня что то даже мыслей нет по этому поводу. Да и почему то m(6,2) считает а m(2,6) уже не считает, как доработать?. Но самая главная проблема это со стеком. В каком направлении хоть мыслить, что б уместить столь огромное число.
0
|
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
|
|
24.05.2010, 20:28 | 7 |
Что сделать для ускорения пока не знаю. А вот m(2,6) считается правильно, там действительно 0.
0
|
4 / 4 / 1
Регистрация: 27.03.2010
Сообщений: 20
|
|
24.05.2010, 20:43 [ТС] | 8 |
ну тут скорее дело не в ускорении, а в том как хранить такое огромное число. ведь при m(10,5) уже
5103000.
0
|
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
|
|
24.05.2010, 20:49 | 9 |
Нет, дело не в этом, SWI Prolog с огромными числами может работать.
0
|
4 / 4 / 1
Регистрация: 27.03.2010
Сообщений: 20
|
|
06.06.2010, 16:00 [ТС] | 10 |
m(4,1)
k m1 k m2 1*1 + 1*0 ____________ m(4,2) k m1 k m2 1*1 + 1*0 2*6 + 2*1 ____________ m(4,3) k m1 k m2 1*1 + 1*0 2*6 + 2*1 3*6 + 3*6 ____________ m(4,4) k m1 k m2 1*0 + 1*1 2*0 + 2*1 3*0 + 3*2 4*0 + 4*6 ____________ m(5,1) k m1 k m2 1*1 + 1*0 _____________ m(5,2) k m1 k m2 1*1 + 1*0 2*14 + 2*1 _____________ m(5,3) k m1 k m2 1*1 + 1*0 2*6 + 2*1 3*36 +3*14 ______________ m(5,4) k m1 k m2 1*1 + 1*0 2*2 + 2*1 3*6 + 3*6 4*24 + 3*36 _______________ m(5,5) k m1 k m2 1*0 + 1*1 2*0 + 2*1 3*0 + 3*2 4*0 + 4*6 5*0 + 5*24 __________________ ****************************** Собственно вот так формируется ответ при m(n,k). Можно ли при думать такую формулу, которая в зависимости от n и k формировала такой же ответ какой приводится выше, но только без рекурсии? Читал про Вывод рекуррентной формулы, Но там надо знать закономерность в формировании ряда, а тут я что то не могу проследить закономерность. Может кто то поможет с формулой, или хоть подскажет закономерность.
0
|
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
|
|
10.06.2010, 00:27 | 11 |
Насколько у меня получилось, то если n<k, то результат 0.
Если n=k, то результат n! Если n>k, то результат (сумма всех чисел от 1 до k)*k!=k*(k+1)*k!/2 Добавлено через 4 минуты Хотя нет, ошиблась
0
|
4 / 4 / 1
Регистрация: 27.03.2010
Сообщений: 20
|
|
10.06.2010, 00:34 [ТС] | 12 |
ну то что, Если n=k, то результат n! и если m(N,1) то 1.
а вот если если n>k, тут не понимаю как. Добавлено через 4 минуты результат (сумма всех чисел от 1 до k)*k!=k*(k+1)*k!/2 это выполняется при k=n-1.
0
|
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
|
|
10.06.2010, 01:11 | 13 |
Не, вроде тут формулы никакой нету. Я даже не знаю как делать. Там проблема в том, что одно и то же значение по несколько раз высчитывается. Это решается динамическим программированием, но на прологе же нет обращения к элементу по индексу, это всеравно будет очень медленно.
Добавлено через 5 минут Неужели препод не может подсказать или поменять задание?
0
|
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 9
|
|
10.06.2010, 13:21 | 14 |
Препод молчит и улыбается...
У меня тоже на подобии задание M(n,k)=M(n-1,k)+n*M(n-1,k-1). Было еще 3е подобное, но к нему формулу подобрали и посчитали ответ где-то знаков 50-70 Ну вот с эти 2мя оставшимися вообще ничего сделать не можем... Добавлено через 3 часа 49 минут хотя там формула тоже неверная и ответ неправильный, но прокатила...
0
|
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
|
|||||||||||
10.06.2010, 14:04 | 15 | ||||||||||
Сделала, надо использовать динамическое программирование, только тут не в массиве промежуточные результаты хранятся, а в базе данных.
Deleten, я думаю, что Вы сможете написать аналогично. Добавлено через 10 минут С изъятием элемента из базы вопрос решился
2
|
4 / 4 / 1
Регистрация: 27.03.2010
Сообщений: 20
|
||||||
10.06.2010, 20:15 [ТС] | 16 | |||||
Нет слов, одни эмоции ^_^ Спасибо наиогромнейшее! Даже не знаю как и благодарить.
С базами не приходилось сталкиваться, поэтому некоторые моменты пока не понятны. на сколько я понял:
0
|
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
|
|
10.06.2010, 21:00 | 17 |
После assert(b(1,2,3)) будет все то же самое, как если бы я изначально прописала b(1,2,3) в программе.
Поскольку в данной программе рекурсия устроенна так, что значение функции M при одной и той же паре параметров будет запрашиваться несколько раз, то это значение надо сохранять. Поэтому первым делом проверяется не было ли оно уже вычислено m(N,K,M):-b(N,K,M),!. Если же оно не было еще вычислено, то делаем это и заносим в базу assert(b(N,K,Ans)). all(N,K,M):-assert(b(0,0,1)),m(N,K,M). Это нужно только потому, что если бы у нас еще не было занесено в базу ни одного факта b, то при первой же попытке выполнить правило m(N,K,M):-b(N,K,M),!. выдавалась бы ошибка, что предиката b не существует. Поэтому мы сначала заносим один факт, и только потом вызываем наш главный предикат вычисления функции.
2
|
maxbestua
|
|
25.10.2010, 22:19 | 18 |
поставили задание решить вот такую задачу.... Может кто поможет. Заранее благодарен!!!!
|
25.10.2010, 22:19 | |
25.10.2010, 22:19 | |
Помогаю со студенческими работами здесь
18
Создать в среде MSVS C + + консольное приложение , реализующее веб -службу с использованием библиотеки gSOAP Создать функцию для вычисления величин. Создать программу которая использует данную функцию Определить функцию, вычисляющую отношение факториала Создать отношение инверсии Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |