再看算法时间和空间的转换

原创 2004年07月10日 00:22:00

关于如何不引入中间变量而直接使用交换两个变量的值,已知的使用(+/-、*//、^)等运算都可以做到,今天突然被一个资深的程序员问,为什么会有这样的东西出来?你知道使用加法或者乘法甚至异或的结果是什么。我马上想象这些代码的汇编代码会是什么样子的。回来以后,使用VC7试了一把,把结果放在这儿。相信自己什么时候都应该看得懂这几行代码:
???? 27: ???int temp;????????????????????????????????????????????????????????15: ???data[i]=data[i]^data[j];
??? 28: ???temp = data[i];???????????????????????????????????????????????00411B86? mov?? eax,dword ptr [i]
00411C82? mov??? eax,dword ptr [i]?????????????????????????? 00411B89? mov?? ecx,dword ptr [data]
00411C85? mov??? ecx,dword ptr [data]??????????????????? ?00411B8C? mov?? edx,dword ptr [j]
00411C88? mov??? edx,dword ptr [ecx+eax*4]??????????00411B8F? mov?? esi,dword ptr [data]
00411C8B? mov??? dword ptr [temp],edx????????????????? 00411B92? mov?? eax,dword ptr [ecx+eax*4]
??? 29: ???data[i]=data[j];?????????????????????????????????????????????00411B95? xor?? eax,dword ptr [esi+edx*4]
00411C8E? mov??? eax,dword ptr [i]??????????????????????????00411B98? mov?? ecx,dword ptr [i]
00411C91? mov??? ecx,dword ptr [data]???????????????????? 00411B9B? mov?? edx,dword ptr [data]
00411C94? mov??? edx,dword ptr [j]????????????????????????? 00411B9E? mov?? dword ptr [edx+ecx*4],eax
00411C97? mov??? esi,dword ptr [data]???????????????????? 16: ???data[j]=data[i]^data[j];
00411C9A? mov??? edx,dword ptr [esi+edx*4]????????? 00411BA1? mov?? eax,dword ptr [i]
00411C9D? mov??? dword ptr [ecx+eax*4],edx?????????00411BA4? mov?? ecx,dword ptr [data]
??? 30: ???data[j]=temp;????????????????????????????????????????????????00411BA7? mov?? edx,dword ptr [j]
00411CA0? mov??? eax,dword ptr [j]???????????????????????? 00411BAA? mov?? esi,dword ptr [data]
00411CA3? mov??? ecx,dword ptr [data]???????????????? ? 00411BAD? mov?? eax,dword ptr [ecx+eax*4]
00411CA6? mov??? edx,dword ptr [temp]????????????????? 00411BB0? xor?? eax,dword ptr [esi+edx*4]
00411CA9? mov??? dword ptr [ecx+eax*4],edx?????????00411BB3? mov?? ecx,dword ptr [j]
?????????????????????????????????????????????????????????????????????????????????00411BB6? mov?? edx,dword ptr [data]
?????????????????????????????????????????????????????????????????????????????????00411BB9? mov?? dword ptr [edx+ecx*4],eax
????????????????????????????????????????????????????????????????????????????????17: ???data[i]=data[i]^data[j];
???????????????????????????????????????????????????????????????????????????????00411BBC? mov?? eax,dword ptr [i]
???????????????????????????????????????????????????????????????????????????????00411BBF? mov?? ecx,dword ptr [data]
?????????????????????????????????????????????????????????????????????????????? 00411BC2? mov?? edx,dword ptr [j]
???????????????????????????????????????????????????????????????????????????????00411BC5? mov?? esi,dword ptr [data]
???????????????????????????????????????????????????????????????????????????????00411BC8? mov?? eax,dword ptr [ecx+eax*4]
?????????????????????????????????????????????????????????????????????????????? 00411BCB? xor?? eax,dword ptr [esi+edx*4]
???????????????????????????????????????????????????????????????????????????????00411BCE? mov?? ecx,dword ptr [i]
?????????????????????????????????????????????????????????????????????????????? 00411BD1? mov?? edx,dword ptr [data]
???????????????????????????????????????????????????????????????????????????????00411BD4? mov?? dword ptr [edx+ecx*4],eax
说说缺点:
这样采用多种算法以后的结果在计算能力上比引入中间变量带来更多的运算要求,在运行时间上代码长度明显增加。这样子的考虑在时间空间上都是一个损失,除了算法,没有什么意思。

数据结构和算法(二)——时间复杂度和空间复杂度

null
  • lovewaterman
  • lovewaterman
  • 2014年07月20日 12:12
  • 8986

算法-时间复杂度和空间复杂度

2.9 算法时间复杂度 2.9.1 算法时间复杂度定义 在进行算法分析时 , 语句总的执行次数 T ( n )是关子问题规模n的函数,进而分析 T ( n )随 n 的变化情况并确定T(n)的数量级...
  • smile_from_2015
  • smile_from_2015
  • 2017年02月23日 21:40
  • 1832

重拾算法(一):算法效率分析(空间复杂度和时间复杂度)

算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间...
  • lishuzhai
  • lishuzhai
  • 2016年08月30日 20:14
  • 2097

各种排序算法的时间和空间复杂度

排序法 平均时间 最差情形 稳定度 额外空间 备注 冒泡 O(n2) O(n2) 稳定 O(1) n小时较好 交...
  • Fly_TheWind
  • Fly_TheWind
  • 2016年06月02日 13:11
  • 662

算法的时间复杂度和空间复杂度-总结

算法的时间复杂度和空间复杂度 1、时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法...
  • zolalad
  • zolalad
  • 2013年09月20日 16:01
  • 95223

常用排序算法的时间复杂度和空间复杂度

总结: (1)当排序记录个数n较大,关键码分布较随机,且对稳定性不作要求时,采用快速排序为宜。 (2)当待排序记录个数n较大,内存空间允许,且要求稳定排序时,采用归并排序。 (3)当待排序记录个...
  • cyuyanenen
  • cyuyanenen
  • 2016年05月27日 13:06
  • 3144

算法的时间复杂度和空间复杂度-总结

算法的时间复杂度和空间复杂度-总结         通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学...
  • XiaoXiaoPengBo
  • XiaoXiaoPengBo
  • 2016年06月04日 11:04
  • 20868

常见排序算法及对应的时间复杂度和空间复杂度

排序算法经过了很长时间的演变,产生了很多种不同的方法。对于初学者来说,对它们进行整理便于理解记忆显得很重要。每种算法都有它特定的使用场合,很难通用。因此,我们很有必要对所有常见的排序算法进行归纳。...
  • Gane_Cheng
  • Gane_Cheng
  • 2016年09月25日 00:14
  • 13820

算法的时间复杂度和空间复杂度-总结

算法的时间复杂度和空间复杂度-总结         通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学...
  • tercel_zhang
  • tercel_zhang
  • 2016年08月19日 11:57
  • 902

常用几种排序算法的时间复杂度和空间复杂度

 常用的排序算法的时间复杂度和空间复杂度 排序法  最差时间分析 平均时间复杂度  稳定度  空间复杂度  冒泡排序 ...
  • yhd0916
  • yhd0916
  • 2015年09月04日 10:19
  • 2221
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:再看算法时间和空间的转换
举报原因:
原因补充:

(最多只允许输入30个字)