算法:字符串长度快速计算算法

问题

从写Strlen函数,计算一个字符串的长度。如果不考虑效率,最简单的方法就是一个字符一个字符往后移,遇到字符尾就结束,字符尾巴是一'0/'结束。

strlen(constant char *str){

size_t length = 0;

while(*str++){

return lenth++;

}

}

我想到的算法如下,不知道是否是否最好的

问题分析,上面算法在循环时是递增式的循环,一次增加一个位置,非常慢,我采用翻倍式循环,循环位置为

0,1,2,4,8……2^n,样很快就找到字符串不可能达到的长度,推出循环时2^n必是空,但2^(n-1)必不是空,

所以该字符串的长度必然在2^(n-1),2^n之间;再之后就是定位字符串的尾巴的具体位置,这里有采用快速查找法,学者尾巴位置,得到结果在根2^(n-1)一加就得到最终结果。

这样整个算法都是采用成倍方式循环,比递增循环快得多。

这个算法有问题,晕

不记得在C中指针可以乱指,这个点本来是结束位(全0),但它的下一个指针位完全说不定是什么

这个问题的正确解决方法还是,递增检查,但每次递增4为,采用32为二进制进行相与操作,在定位,可以考虑寄存器

在其他时候还是我的算法快,:-)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值