免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Go_To_CU
打印 上一主题 下一主题

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

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

如何提高查找速度

原帖由 "mik" 发表:



(1)先找出非 0 元素? 还是找出 0 的元素? (找不到呢?? 继续找??)


我所说的并不局限于某个具体的问题,你想找什么样的元素就找什么样
的元素,条件是你自己定的,但这本质上是一个顺序查找的问题,我说
的只是对顺序查找的一般优化原则。

在楼主的程序中,使用了一个for循环:
for (p = array; p < array + size; p++) {

这样,在每一轮的循环中,都会先去判断p < array + size是否满足,然后
才会去判断当前位置上的元素是否满足我们的条件。而我所说的就是对于每一
个元素,我们可以先去判断它是否满足我们的条件,一旦满足,我们再去判断
它的下标是否仍然在数组的合法范围之内,这样,实际上p < array + size
这个判断最多只会执行一次。

但是在实际编程过程中,可能对你的数组需要进行一点特别的处理,可能
需要安排一个多余的元素,这个元素必须是满足你的“条件”的,这样才能
让循环正确停止下来,而此时显然下标已经不在“合法”范围之内了,因此
并不会影响到查找失败的结果。

评分

参与人数 1可用积分 +5 收起 理由
converse + 5 我很赞同

查看全部评分

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

如何提高查找速度

原帖由 "雨丝风片" 发表:


我所说的并不局限于某个具体的问题,你想找什么样的元素就找什么样
的元素,条件是你自己定的,但这本质上是一个顺序查找的问题,我说
的只是对顺序查找的一般优化原则。

在楼主的程序中,使用了一个for循环..........




这个元素的选择会有一定困难,你不能担保这个元素在数组中是正常有用的。

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

如何提高查找速度

对,这个特殊元素不好弄,难道就没有别的操作方式了吗?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
24 [报告]
发表于 2005-09-18 13:17 |只看该作者

如何提高查找速度

常规的查找吧. 按4 bytes

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

如何提高查找速度

原帖由 "mik" 发表:




这个元素的选择会有一定困难,你不能担保这个元素在数组中是正常有用的。



从严格的意义上来说,这个元素是不属于这个数组的。也就是说,如果
我需要用数组来存放10个元素的话,为了使用我说的方法进行顺序查找,
那么可能就需要生成一个有11个元素的数组,而最后一个元素对外是不
可见的,仅仅用于顺序查找循环的停止。我想,不管你要查找的条件是
什么,在这个地方随便放一个满足你的查找条件的元素应该是很简单的
事情吧?而这个多余的空间就是这个想法的代价。是否可以忍受这个代价,
就需要看数组的大小等其它的因素了。

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

如何提高查找速度

[quote]原帖由 "Go_To_CU"]对,这个特殊元素不好弄,难道就没有别的操作方式了吗?[/quote 发表:



我前面已经解释了,这并不是一个“特殊”的元素,而仅仅是满足你的查找
条件的任意一个元素!这个想法的代价仅仅是在定义数组的时候留出来的一个
多余的位置以及由此产生的你心里的一点“别扭”。。。呵呵

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

如何提高查找速度

如果这个函数是用来检测随便一段内存的值的函数呢?不能增加这样的元素来终止循环,那样会修改内存的值的

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

如何提高查找速度

[quote]原帖由 "mq110"]常规的查找吧. 按4 bytes[/quote 发表:



如果,确定数组较大的。那么可以按 6 bytes 查、8 bytes

甚至更多。。。

这样是否更快。

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

如何提高查找速度

[quote]原帖由 "Go_To_CU"]如果这个函数是用来检测随便一段内存的值的函数呢?不能增加这样的元素来终止循环,那样会修改内存的值的[/quote 发表:


我只能说,对于你的这个条件来说,那个方法不适用,
任何方法都是有前提的,而那个方法的前提就是你有权利来安排一个
“多余”空间。 :wink:

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

如何提高查找速度

感谢各位的参与,其实我这段函数主要是用来检测内存是否为空的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP