哪个版本的“查找出现”功能更快?

Posted

技术标签:

【中文标题】哪个版本的“查找出现”功能更快?【英文标题】:Which version of "find an occurence" function is faster? 【发布时间】:2014-03-27 12:20:26 【问题描述】:

我的算法不是很强。有两个版本的函数,如果传递的字符串中有任何大写字母,则返回。 First 不检查每次迭代的条件。第一次出现大写字母后的第二次结束。一般来说哪个更快?

bool isAnyCapLetters(const std::string &s) 
    int flag = 0;
    for (auto el : s)
        flag += isupper(el);
    return static_cast<bool>(flag);

bool isAnyCapLetters(const std::string &s) 
    for (auto el : s)
        if (isupper(el)) return true;
    return false;   

【问题讨论】:

两者似乎都是 O(n),所以时间可能相等 @staticx 最坏情况渐近复杂度并不是衡量性能的唯一有用指标。 @delnan:是的,在这种情况下,虽然它正在迭代一个未知长度的未知字符串。我认为你必须考虑最坏的情况。另外,这些函数是不相等的,因为一个是计数函数,一个是计数函数,另一个是有效性检查。 if 花费少于+=,并且可能会提前打破循环 @Tim: "if 花费少于 +=" - 除非分支预测失败,在这种情况下它可能会慢得多。测量是唯一确定的方法。 【参考方案1】:

第二个返回较早,对于以大写字母开头的长字符串会更快。

【讨论】:

【参考方案2】:

如果你有一个像This_is_a_useless_but_not_so_very_short_string_whooptifriggindoo 这样的字符串,那么第一个函数将循环遍历所有字符,并且必须在最后进行强制转换。第二个函数将看到第一个字符是大写的,并且将立即返回而不进行任何转换。因此第二个函数会更快。

【讨论】:

以上是关于哪个版本的“查找出现”功能更快?的主要内容,如果未能解决你的问题,请参考以下文章

哪个更快?对 gRPC 的 Rust 和 Go 版本进行基准测试

win7下ad的哪个版本支持,好用

最高哪个php版本支持iis6

最新 | 哪个深度学习框架发展更快?TensorFlow还是PyTorch?

CANOE版本哪个好

R - 如何识别功能的哪个版本(包)是活动/附加的?