【问题标题】:What algorithm is used for Pos() function in Pascal?Pascal 中的 Pos() 函数使用什么算法?
【发布时间】:2014-09-22 02:16:12
【问题描述】:

作为标题,Brute Force、Karp-Rabin、Knutt-Morris-Pratt、Boyer Moore,......还是其他? Pascal中Pos()函数的复杂度是多少?

【问题讨论】:

  • 可能依赖于编译器
  • 您必须指定您所指的pascal 编译器。一般来说,我会假设蛮力,如果你想要一个特定的算法,你必须自己找到一个库或编写代码。

标签: algorithm time-complexity pascal string-search


【解决方案1】:

在 Delphi 中,它是手工编码的汇编程序蛮力。可能在 D2006 和更高版本中由 fastcode 项目重做。在 Turbo Pascal 中,它也是手工编码的汇编器,但更旧(可能是 rep scasb)

在 Free Pascal 上,它使用 indexbyte(),这是一个依赖于架构的原语“在内存块中搜索字节”,通过双字扫描实现。

IOW 它只是扫描第一个相等的字符,所以我认为这就是你所说的蛮力。

可以使用各种 Delphi Boyer Moore 实现,以防您必须搜索较大的文本,但由于它们额外的内存分配,这些实现通常在短字符串上得分不好。

(2020-06-04 在 Lazarus 论坛帖子引用此线程后:

同时有一个BMH implementation in the RTL )

【讨论】:

    猜你喜欢
    • 2012-09-01
    • 1970-01-01
    • 2018-02-07
    • 2015-10-28
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多