请问各位这样的算法的时间复杂度算不算0(n)?

csdn_lxb 2001-12-06 08:57:16
void move(int n1,int k1)
{
if((n1%k1)==0)
for (i=0;i<n1-k1;i++)
{temp=a[i%k1];a[i%k1]=a[(i+k1)];a[(i+k1)]=temp;}
else
{
for(i=0;i<n1-k1;i++)
{temp=a[i%k1];a[i%k1]=a[(i+k1)%n1];a[(i+k1)%n1]=temp;}
move(k1,k1-n1%k1);
}
}
...全文
145 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mathe 2001-12-09
  • 打赏
  • 举报
回复
是我错啦
foxmike 2001-12-09
  • 打赏
  • 举报
回复
同意intfree的说法!
csdn_lxb 2001-12-07
  • 打赏
  • 举报
回复
不好意思,我忘了说N》=K了,请问mathe()能不能解释一下为什么是nlog(n)呢?
我是觉得第一次是n1-k1,以后就算没次调用的时候复杂度都是小于k1的,所以全部加起来绝对不会超过N,所以复杂度是N,不知道这样理解有没有错?
csdn_lxb 2001-12-06
  • 打赏
  • 举报
回复
main()
{
move(n,k);
}
intfree 2001-12-06
  • 打赏
  • 举报
回复
设调用move(n,k)的复杂度为f(n,k),有

f(n,k)=n-k ... (n mod k=0)
f(n,k)=n-k+f(k,k-n mod k) ... (n mod k<>0)

若1<=k<=n,则应该可以用归纳法证明f(n,k)<n

1.当n=1时,f(1,1)=0<1
2.设当n<t时成立,则
f(n,k)=n-k<n ... (n mod k=0)
f(n,k)=n-k+f(k,k-n mod k)<n-k+k=n ... (n mod k<>0)

若k>=n,则类似可得,复杂度为O(k)

因此我觉得复杂度应该是max{n,k}
mathe 2001-12-06
  • 打赏
  • 举报
回复
时间复杂度为nlog(n)
jps 2001-12-06
  • 打赏
  • 举报
回复
最坏的情况下最后一次调用void move(int n1, int k1)
k1 = 1,复杂度是o(n-1).

33,009

社区成员

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

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