社区
数据结构与算法
帖子详情
一个复杂度计算问题
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)
...全文
38
14
打赏
收藏
一个复杂度计算问题
{ 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)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
时间
复杂度
计算
及空间
复杂度
计算
时间
复杂度
主要衡量的是
一个
算法的运行速度,而空间
复杂度
主要衡量
一个
算法所需要的额外空间,在
计算
机发展的早期,
计算
机的存储容量很小。所以对空间
复杂度
很是在乎。但是经过
计算
机行业的迅速发展,
计算
机的存储...
算法的时间
复杂度
和空间
复杂度
计算
一、算法的时间
复杂度
定义 在进行算法分析时,语句总的执行次数T(n)是关于
问题
规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间
复杂度
,也就是算法的时间量度。记作:T(n)=O(f(n))。它表示随...
详解时间
复杂度
计算
公式(附例题细致讲解过程)
这几天开始刷力扣上面的算法题...只记得
一个
时间
复杂度
是O(n),空间
复杂度
是S(n)。for循环常常是O(n),具体是怎么算的不清楚。所以在看了相关的视频教学后,总结一下时间
复杂度
的
计算
公式,希望能给大家的学习带来帮助!
空间
复杂度
计算
超全整理!!(一起手撕
复杂度
计算
空间
复杂度
超全解析~欢迎光临,这里是媛仔的数据结构进阶之路!!
时间
复杂度
计算
方法以及常见的时间
复杂度
数据结构,时间
复杂度
数据结构与算法
33,009
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章