LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: soloforce

[算法]出个题目给大伙儿做得了

[复制链接]
发表于 2005-12-2 10:07:38 | 显示全部楼层

应该符合题目要求了,只用了move函数中只用了i和tmp两个辅助变量。时间复杂度为O(n).

  1. #include<iostream>
  2. void move(int a[], int n, int k)
  3. {
  4.     int i = (0+k)%n;
  5.     int tmp;   
  6.     while(i != 0) {
  7.         //swap(a[0], a[i]);
  8.         tmp            = a[0];
  9.         a[0]            = a[i];
  10.         a[i]        = tmp;
  11.        
  12.         i = (i+k)%n;
  13.     }
  14. }
  15. int main()
  16. {
  17.     int a[10] = {0,1,2,3,4,5,6,7,8,9};
  18.     std::cout <<"a[10]=";
  19.     for(int i = 0; i < 10; i++)
  20.         std::cout << a[i] << " ";
  21.     std::cout << std::endl;
  22.     move(a, 10, 3);
  23.     std::cout <<"a[10]=";
  24.     for(int i = 0; i < 10; i++)
  25.         std::cout << a[i] << " ";
  26.     std::cout << std::endl;
  27. }
复制代码
应该符合题目要求了,只用了move函数中只用了i和tmp两个辅助变量。时间复杂度为O(n).
回复 支持 反对

使用道具 举报

发表于 2005-12-22 16:44:06 | 显示全部楼层
使用链表数据结构不就可以了!干什么搞那么麻烦?
回复 支持 反对

使用道具 举报

发表于 2005-12-22 17:24:23 | 显示全部楼层
问大家个问题,CPU执行加,减,乘,除,取模,内存移动所需的时钟周期大概是多少。比如用Pentium3来讨论。
回复 支持 反对

使用道具 举报

发表于 2005-12-22 17:41:18 | 显示全部楼层
我的做法:
***
是O(n^2)了。再想想。
放弃。
记住light_zls提到的做法。
回复 支持 反对

使用道具 举报

发表于 2005-12-22 18:16:13 | 显示全部楼层
要知道每条指令需要多少指令周期,需要知道一条指令由多少条微程序构成,intel公司应该不会公布这么地层东西吧? 如果就MIPS来说的话,加减操作指令周期是固定的,其数量取决于流水线的长度,但乘除法的指令周期于操作数的长度也有很大关系,x86估计也差不多是这样,所以要知道上述指令的指令周期数应该比较困难吧。。。
回复 支持 反对

使用道具 举报

发表于 2005-12-22 18:17:56 | 显示全部楼层
Post by vestige
要知道每条指令需要多少指令周期,需要知道一条指令由多少条微程序构成,intel公司应该不会公布这么地层东西吧? 如果就MIPS来说的话,加减操作指令周期是固定的,其数量取决于流水线的长度,但乘除法的指令周期于操作数的长度也有很大关系,x86估计也差不多是这样,所以要知道上述指令的指令周期数应该比较困难吧。。。

我明天去图书馆找找,看过的。
回复 支持 反对

使用道具 举报

发表于 2005-12-23 15:51:02 | 显示全部楼层
回去找本计算机组成原理就有。
保证上面有明确的答案
回复 支持 反对

使用道具 举报

发表于 2006-1-6 23:56:07 | 显示全部楼层
除非你又跟踪软件,否则你无法知道多长时间??而且你的问题又冲突啊!内存的多少与内存移动时的消耗时间怎么来计算?现在只有参与硬件设计的人知道了。
回复 支持 反对

使用道具 举报

发表于 2006-1-7 08:36:02 | 显示全部楼层
有一本清华大学出版社的书(《80x86 IBM PC及兼容计算机 卷一和卷二 汇编语言、设计与接口技术》(美) Muhammad Ali Mazidi, Janice Gillispie Mazidi著 清华大学出版社 2004),里面有指令运行周期的对比,不一定准确,仅供参考:
对于486,
加法指令ADD,1个时钟周期
除法指令DIV,41个时钟周期
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表