strstr使用什么字符串搜索算法?

时间:2015-11-04 17:00:52

标签: c++ strstr

我正在阅读String searching algorithm维基百科的文章,这让我想知道strstr在Visual Studio中使用了什么算法?我应该尝试使用其他实现,还是strstr相当快?

谢谢!

3 个答案:

答案 0 :(得分:2)

Visual Studio strstr中的实现对我来说并不了解,我不确定它是否适合任何人。但是我发现了这些有趣的sourcesexample实现。后者表明该算法在最坏情况下运行搜索字符串大小的二次时间。总数应小于该值。非随机解的算法极限应该是。

实际情况是,根据输入的大小,可能会使用不同的算法,主要针对金属进行优化。然而,人们不能真的打赌。如果您正在进行DNA测序,那么strstr和家庭非常重要,很可能您必须编写自己的定制版本。通常,标准实现针对一般情况进行了优化,但另一方面,那些在编译器上工作的人知道他们的工作人员。无论如何,你不应该打赌自己的专业技能。

但实际上所有关于开发时间的讨论都会损害编写优秀软件的努力。在开始执行此任务之前,请确保重写自定义strstr的好处超过了为特定情况维护和调整自定义strstr所需的工作量。

答案 1 :(得分:0)

正如其他人所推荐的:个人资料。执行有效的性能测试。

如果没有配置文件数据,您可以优化部分代码运行20%的时间,浪费ROI。

开发成本是现代计算机的主要关注点,而不是执行时间。最好的时间用途是在进入系统测试之前开发程序以便在没有错误的情况下正确运行。这是重点所在。同样由于这种推理,只要函数正常工作,大多数人都不关心Visual Studio如何实现strstr

请注意,线性搜索优于其他搜索的行或点。此行取决于数据大小或搜索条件。例如,使用具有分支预测和大指令高速缓存的处理器的线性搜索可以胜过用于中小数据大小的其他技术。更复杂的算法可能具有更多分支,这导致重新加载指令高速缓存或数据高速缓存(浪费执行时间)。

优化程序的另一种方法是使数据组织更易于搜索。例如,使字符串足够小以适合缓存行。这还取决于搜索量。对于大量搜索,优化数据结构可能会获得一些性能。

总之,优化当且仅当程序不能正常工作时,用户抱怨速度,缺少时序约束或者它不适合分配的内存。然后,下一步是分析和优化大部分时间花费的区域。任何其他优化都是徒劳的。

答案 2 :(得分:0)

C ++标准是指用于描述strstr的C标准。 C标准似乎没有对复杂性施加任何限制,因此几乎任何找到子串的第一个实例的算法都是合规的。

因此,不同的实现可以选择不同的算法。您必须查看您的特定实现以确定它使用的是什么。

简单的强力方法可能是O(m×n),其中 m n 是字符串的长度。如果你需要更好的,你可以尝试其他库,比如Boost,或者自己实现一个子线性搜索。