一个复杂度计算问题

slavik 2003-08-19 03:07:04
{ m > n > 0 }
E1 r = m % n
E2 if( r != 0 ) { m = n, n = r } else { return n; }
E3 goto E1
m是已知的,n是任意大于0的整数,求E1执行的平均次数(对于所有的n而言的总次数/n)

...全文
37 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlueSky2008 2003-08-19
  • 打赏
  • 举报
回复
Lame定理:对任意整数k>=1,如果a>b>=0 且b<=F(k+1),则EUCLID(a,b)的递归调用次数少于k次。
(其中F(k+1)是第k+1个斐波拉契数)
由于F(k)约为(1+sqrt(5))^k / sqrt(5),所以EUCLID(a,b)的第归次数为O(lgb).
这是最坏情况,平均情况要优于此。
寻开心 2003-08-19
  • 打赏
  • 举报
回复
^_^
想清楚了,是这样的。
定义 【x】是上取整
M%N的结果,不外呼, [M/2] [M/3] [M/4]....[M-1/M]
那么可以确定,经过这个操作后,结果的范围就是原来的 1/2 1/3 1/4 .. 1/(m-1)
计算平均,就是:
1/m * (1/2+1/3 + ... + 1/(m-1)) = ? // 没有表达式啊
如果对它来计算O(?)呢???
这个数值应该比sqrt(m)还小才是。

而且注意到m%n分布的不均匀性, 下降的速度更快才是。
寻开心 2003-08-19
  • 打赏
  • 举报
回复

当 n<m/2的时候, m%n < n < m/2 没有问题
当 n>m/2 的时候, m%n < m-n < m/2 没有问题
这个应该没有问题吧。
所以这个算法可以保证每次都把m的长度至少缩小一半。
效率至少是要超过折半查找了。

按照50分界限
n = 34 35 ,,,, 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
m%n = 32 30 ,,,, 20 18 16 14 12 10 8 6 4 2 0 49 48 47 46

考察前面的m%n结果的数列,你会发现一个规律,以M/2为中心,右边是一个递减序列
而且大数偏于M/2

当你把这个这个结果再次做M%N的时候,会发现原来的大数对应的数据下降的最快。
n = 33 34 35 ,,,, 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
m%n = 1 32 30 ,,,, 20 18 16 14 12 10 8 6 4 2 0 49 48 47 46
n%(m%n) = 2 5 ,,,, 0 5 10 1 8 5 6 5 0 1 0 2 4 6 8

综合考虑平均,相当于sqrt(m)速度————还是直觉
slavik 2003-08-19
  • 打赏
  • 举报
回复
好像很不精确啊
只是和折半的情况有点相似
有没有表达式的推导的过程,希望有具体的计算过程,不要定性的分析
寻开心 2003-08-19
  • 打赏
  • 举报
回复
要给100分以上,你自身的专家分必须达到5000分,好像是这样。
寻开心 2003-08-19
  • 打赏
  • 举报
回复

前面已经给了推导过程了啊

主要是考察m和n之间的关系
当 n<m/2 的时候, m%n < n < m/2
当 n>m/2 的时候, m%n < m-n < m/2
所以,每次 m%n 的时候,结果必然小于 m/2
这就是 log(m)的来历


寻开心 2003-08-19
  • 打赏
  • 举报
回复
也许可以更高,每次到SQRT(m)
slavik 2003-08-19
  • 打赏
  • 举报
回复
有没有推导过程啊
我就要过程
还有怎么才能送超过100分以上的分数
寻开心 2003-08-19
  • 打赏
  • 举报
回复
可以这样理解
m%n < m/2
当 m<2n的时候, m%n < m-n < m/2
当 m>2n的时候, m%n < n < m/2

就像折半查找一样,最多是log(M)
HUNTON 2003-08-19
  • 打赏
  • 举报
回复
似乎没有什么规律啊。m从2开始为
1 3/2 4/3 8/4 7/5 13/6 14/7
kbsoft 2003-08-19
  • 打赏
  • 举报
回复
log(n) for m>n
HUNTON 2003-08-19
  • 打赏
  • 举报
回复
这个就是用欧几里德算法求m,n的最大公约数吧
寻开心 2003-08-19
  • 打赏
  • 举报
回复
感觉是LOG(M)
ZhangYv 2003-08-19
  • 打赏
  • 举报
回复
分析在最后面:
http://expert.csdn.net/Expert/topic/2099/2099326.xml?temp=.5546991

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧