【问题标题】:Compare two matching strings algorithms - Practical approach比较两个匹配字符串算法 - 实用方法
【发布时间】:2013-04-09 13:53:38
【问题描述】:

我编写了两种不同的算法来解决字符串匹配的一些特殊情况(在 C 中实现)。我知道这种算法的理论 O 是相等的,但我认为在实践中,一个比 oder 更好。 我的问题是,有人可以向我推荐一些论文或一些阅读材料,其中展示了如何将算法与实用方法进行比较? 我有几个测试集,我对测量执行时间和内存大小感兴趣。我需要尽可能独立于操作系统和其他可能同时运行的程序来获取这些值。

谢谢!!!

【问题讨论】:

    标签: c algorithm string-matching


    【解决方案1】:

    您可以通过生成汇编代码来比较您的算法并进行比较。

    您可以使用gcc -S mycode.c 命令生成汇编代码

    【讨论】:

    • 计算执行的指令会有所帮助,是的。也可以为代码计时。
    • gcc -S 提供汇编器输出。 -E 用于“预处理代码”。
    • 谢谢大家,你知道我怎样才能在某种“隔离”环境中运行我的测试,即将我的算法的时钟周期与其他线程隔离并获得内存消耗的“隔离”度量(页面错误等)?再次,谢谢!!!!!!
    • @pcambre 只需在循环中运行大约 1000 次测试,然后将累积时间除以 1000。
    【解决方案2】:

    我发现“查看代码”是一个好的开始。如果一个使用更多变量并且比另一个更复杂,它可能会更慢。

    但是,当然有一些巧妙的技巧可以使更复杂的函数实际上运行得更快(例如,一次读取 8 个字节的代码 - 但是当然,一旦你发现不同之处,代码就会更复杂 - 因为大体相似的长字符串,这是一个很大的胜利。

    所以,最终,没有什么可以替代实际运行代码,使用时钟周期计时(例如 x86 处理器上的 RDTSC 指令),或者运行一个大循环多次执行代码以给出合理的运行时间长度。

    如果您的代码不应该在单个嵌入式目标上运行,您可能希望在一组不同的硬件上运行代码,以确定在处理器 A 上更快的代码在 B、C 和D 型处理器。通常这确实有效,但有时您会发现特定处理器型号对于某些操作更快,而另一种处理器型号对于另一种操作更快(例如基于缓存大小等)。

    在字符串操作的情况下,尝试使用不同大小的输入、不同的差异点也非常重要(例如,一个长字符串,但不同的“早期”,与不同的长字符串“晚期”) .有时,不同的方法会对短/长字符串或早/晚差异点(当然还有长或短的“相等”字符串)显示不同的结果。

    【讨论】:

      【解决方案3】:

      为了完成所有的 cmets,我找到了一本 Catherine C. Mcgeoch Amazon 的《实验算法指南》一书,一位教授向我推荐了一篇实用论文 pdf

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-31
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        相关资源
        最近更新 更多