for循环与函数问题

Ron_Tang 2013-03-11 09:03:52
pic1与pic2不是同一个数组占两块不同的内存,但其中元素值完全相同。
------------------------------------------------------------------------
方法1
for (int i = 0; i < 100; i++)
for (int j = 0; j < pic1.length; j++)
if (pic1[j] != pic2[j])
return;

-------------------------------------------------------------------------
方法2
for (int i = 0; i < 100; i++)
cmp(pic1,pic2);



void cmp(int[] a, int[] a2) {


for (int i = 0; i < a.length; i++)
if (a[i] != a2[i])
return;

}
-------------------------------------------------------------------------------
怎么方法2比方法1快很多呀?难道函数调用?请熟悉的人过来讨论下,我在自己pc上试了
很多次
...全文
284 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ron_Tang 2013-03-12
  • 打赏
  • 举报
回复
不好意思,刚刚测试有误差,经多次测试,使用c语言测试两种方法消耗时间基本一致。且方法1略微快些,方法2可能是由于函数调用引起效率降低。但是使用java语言确实结果和c语言不一致,方法2快。可能跟虚拟机优化有关,也可能是我测试时间消耗的方法不对。 特此感谢lin5161678,Saleayas
ForestDB 2013-03-12
  • 打赏
  • 举报
回复
LZ怎么测试的? 只是重复100遍而已? 那远远不够。
Ron_Tang 2013-03-12
  • 打赏
  • 举报
回复
难道我的电脑有问题,我用java 和c++分别试了一下,还是调用函数的速度快。。。大家测试下看看。调用函数所需时间大概是直接双层循环时间的一半。
Ron_Tang 2013-03-12
  • 打赏
  • 举报
回复
引用 11 楼 Saleayas 的回复:
C++ 没有见过这个情况。 C# 和 脚本之类的语言倒是有可能。
我刚刚用的c#,等下我在看看c++。也许有可能是虚拟机的问题?
意吟 2013-03-12
  • 打赏
  • 举报
回复
楼主还是先演示下: 自己怎么发现方法一比方法二慢
Saleayas 2013-03-12
  • 打赏
  • 举报
回复
C++ 没有见过这个情况。 C# 和 脚本之类的语言倒是有可能。
lin5161678 2013-03-12
  • 打赏
  • 举报
回复
理论上方法一 比 方法二快 不过实际上 看不出区别啊楼主 我把100*100改成10000*10000 效果明显点 有时候方法一快 有时候方法二快
lin5161678 2013-03-12
  • 打赏
  • 举报
回复
引用 2 楼 lingtianyulong 的回复:
方法一用了双重循环,时间效率为n的平方级,而方法二用单重循环,时间效率为n,建议楼主先看一下关于算法时间复杂度和空间复杂度的相关知识在来提问
汗 这样就能把O(n2)变成O(n) 你真的是太可爱的 别傻了 时间复杂度是一样的 都是O(n2)
Ron_Tang 2013-03-12
  • 打赏
  • 举报
回复
其实我想问的是,其是否跟cpu 的指令cache有关?
Ron_Tang 2013-03-12
  • 打赏
  • 举报
回复
pic1与pic2不是同一个数组占两块不同的内存,但其中元素值完全相同。两者都需要比较全部数据
Ron_Tang 2013-03-12
  • 打赏
  • 举报
回复
调用函数里还有一个单重循环就可以直接无视吗?
bedynamic 2013-03-11
  • 打赏
  • 举报
回复
引用 2 楼 lingtianyulong 的回复:
方法一用了双重循环,时间效率为n的平方级,而方法二用单重循环,时间效率为n,建议楼主先看一下关于算法时间复杂度和空间复杂度的相关知识在来提问
顶一个。。就这个
小白菜018 2013-03-11
  • 打赏
  • 举报
回复
两个的时间复杂度不同
moolleychean 2013-03-11
  • 打赏
  • 举报
回复
楼主你确定,怎么证明? 另外,方法2与方法1行为不同。
lingtianyulong 2013-03-11
  • 打赏
  • 举报
回复
方法一用了双重循环,时间效率为n的平方级,而方法二用单重循环,时间效率为n,建议楼主先看一下关于算法时间复杂度和空间复杂度的相关知识在来提问

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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