免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9637 | 回复: 60
打印 上一主题 下一主题

如何提高查找速度 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-09-18 11:25 |只看该作者 |倒序浏览

  1. int empty_array(char *array, int size)
  2. {
  3.     char *p = array;
  4.     for (p = array; p < array + size; p++) {
  5.         if (*p != 0) {
  6.             return(0);
  7.         }
  8.     }
  9.     return(1);
  10. }

复制代码

这段代码主要是看数组是否为空,即查找一个非0的元素,请问可以有更快的查找速度吗?

论坛徽章:
0
2 [报告]
发表于 2005-09-18 11:31 |只看该作者

如何提高查找速度

如果强行转化为int型,然后再检查,会不会变快呢?
当然这个速度还与字节对齐有关。呵呵。

论坛徽章:
0
3 [报告]
发表于 2005-09-18 11:33 |只看该作者

如何提高查找速度

对于这种问题,一种最简单的优化就是稍微修改一下,
先通过++依次判断是否找到满足你条件元素,一旦找到
再判断下标是否在数组下标的合法范围之内,这样至少
可以避免每一轮循环都要先去判断下标是否合法。

论坛徽章:
0
4 [报告]
发表于 2005-09-18 11:37 |只看该作者

如何提高查找速度

如果访问的内存全部为0,不是遭了!
不过想法不错,呵呵。

论坛徽章:
0
5 [报告]
发表于 2005-09-18 11:39 |只看该作者

如何提高查找速度

我说过要“稍微修改一下”嘛,当然要做边界保护的,
比如说,可能要在数组的边界上放一个“多余”的元素。

论坛徽章:
0
6 [报告]
发表于 2005-09-18 11:40 |只看该作者

如何提高查找速度

如果再稍微修改一下,在换成int,每四字节一读,岂不是更快。当然最好字节对齐了,否则估计就不见效果了。

论坛徽章:
0
7 [报告]
发表于 2005-09-18 12:06 |只看该作者

如何提高查找速度

[quote]原帖由 "Go_To_CU"]这段代码主要是看数组是否为空,即查找一个非0的元素,请问可以有更快的查找速度吗?[/quote 发表:


int empty_array(char *array, int size)
{
         while (size--)  
                 if (*array++)
                       return 0;
         
        return 1;
}

会不会更有效呢? :)不过会改变参数,不改变参数,只能设临时变量了

论坛徽章:
0
8 [报告]
发表于 2005-09-18 12:09 |只看该作者

如何提高查找速度

原帖由 "mik" 发表:


int empty_array(char *array, int size)
{
         while (size--)  {
                 if (*array++)
                       return 0;
                 else
                      continue;
    ..........


只是看起来变快了。你的过程又没有比别人少了什么操作。

论坛徽章:
0
9 [报告]
发表于 2005-09-18 12:14 |只看该作者

如何提高查找速度

原帖由 "mingjwan" 发表:


只是看起来变快了。你的过程又没有比别人少了什么操作。



是有不同的:
(1) size-- 操作比 p+size 效率要高嘛,
size-- 可以编译成:
      mov eax, size
         dec eax

总比 p+size:
        mov eax, p
        add eax, size   
   
是不是? :)

(2) 少了临时变量操作。
   :)

论坛徽章:
0
10 [报告]
发表于 2005-09-18 12:16 |只看该作者

如何提高查找速度

P+size和size--不一样哦,因为指针一次移动的可能是4个字节
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP