楼主: tbjwaixy
3671 16

[问答] R语言编程 [推广有奖]

11
yywan0913 在职认证  发表于 2013-10-25 10:47:10
jmpamao 发表于 2013-10-25 09:10
n=8的时候, 不是 1/5了,那是5个猴子,系数要跟着变 1/8
恩恩  这点你说的对。我的意思是你方程里面不应该减去一,而是减去1/7
为啥我觉得是这样呢?
#y表示桃子数,x[1:n]分表示一到n个猴子,n可随意设置,越大运行越慢
x=c();y=0;n=8
p=(n-1)/n;pp=1/(n-1)
repeat{
  y=y+1
  x[1]=1/n*(y-1)
for(i in 2:n){
   x = p*(x[i-1]-pp)
}
if(x[n]%%1==0) break
}
y
33554425
不是这样?
是什么给了你自信

12
jmpamao 发表于 2013-10-25 11:19:46
你只要 考虑, n猴子完成这个行为后, 留下多少桃子就行了, 不是 (n-1)/n *(f(n-1)-1) 吗?    f(x)表示 留下的桃子

13
jmpamao 发表于 2013-10-25 18:55:31
jmpamao 发表于 2013-10-24 21:56
@ qoiqpwqr
发现当猴子数为8时,运算速度开始超慢,
但这 比   monkey写的那个递归函数的速度要快的多,无 ...
尝试进行优化。
先谢谢  @ntsean。这是个数学问题,提供了最小数值, 根据其 范围<n^n,且一定存在。
建立一数组(当然越大越保险),进行了矩阵化,再apply。。。而取代 repeat...运算速度发生了 质的变化。
  1. monkey <- function(n){
  2.   p = (n-1)/n
  3.   peach <- function(x,n){
  4.    
  5.     if(n == 0) x
  6.     else return(p*(peach(x,n-1)-1))
  7.   }
  8.   #a 矩阵data的行,加1为了保险
  9.   a=floor((n^n)^0.5+1)
  10.   data <- matrix(1:a^2,a)
  11.   t <- apply(data,2,function(i){peach(i,n)%%1==0})
  12.   c(data[t],peach(data[t],n))
  13. }
  14. monkey(8)
  15. > monkey(8)
  16. [1] 16777209  5764794
  17. > system.time(monkey(8))
  18.    user  system elapsed
  19.    2.76    0.00    2.79
复制代码
而使用 repeat语句的。。。
> system.time(monkey(8))
   user  system elapsed
632.50    0.39  635.02

运算时间不是一般的不同。


但问题还有存在:n=9时,
> monkey(9)
Error: cannot allocate vector of size 1.4 Gb
。。。。
怎么解决?

14
nuomin 发表于 2013-11-8 21:18:28
(((((5*x+1)*5+1)*5+1)*5+1)*5+1)=3125x+781
最小的数为x=1的时候发生,全部桃子数为3125+781=3906。
当n只猴子时解析式为(n^n)*x+(n^n-n)/(n-1)+1。
n=10的时候最少的桃子数为11111111111。

15
jmpamao 发表于 2013-11-13 23:43:25
nuomin 发表于 2013-11-8 21:18
(((((5*x+1)*5+1)*5+1)*5+1)*5+1)=3125x+781
最小的数为x=1的时候发生,全部桃子数为3125+781=3906。
当n ...
你这里的X 指什么?

好像没有考虑 猴子的拿法:先吃一个,再分n份,然后拿走其中一份,留下n-1份

n=5,
如果是 第5个猴子,醒来后,吃了一个,再分为5分, 每份为 X(>=1)的话,留下的为4x
那么第5个猴子醒来看到的桃子为:(5*x+1)
第4个猴子醒来看到的桃子为:(5*x+1)*5/4+1
......
第一个猴子醒来后,看到的总桃子数为(((((5*x+1)*5/4+1)*5/4+1)*5/4+1)*5/4+1)


推广到N猴子时,总桃子数为   x*n^n/(n-1)^(n-1)+n^(n-1)/(n-1)^(n-1) +。。。+n/(n-1)+1????

后面怎么做?

16
jmpamao 发表于 2013-11-13 23:45:37
ntsean 发表于 2013-10-25 04:35
我怎么觉得这个事数学问题
假设 第n个猴子拿完后每對有x个桃子
麻烦 能不能推导详细些

17
nuomin 发表于 2013-11-14 08:48:34
jmpamao 发表于 2013-11-13 23:43
你这里的X 指什么?

好像没有考虑 猴子的拿法:先吃一个,再分n份,然后拿走其中一份,留下n-1份
确实少考虑拿走一份的情形。除了X的系数外,其他的系数的底n需要替换为n/(n-1)。简化部分用maxima软件做的。是符号计算软件,matlab也能做,不过maxima小巧。
已有 1 人评分热心指数 收起 理由
jmpamao + 1 热心帮助其他会员

总评分: 热心指数 + 1   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 12:43