簡體   English   中英

帶反向引用的正則表達式的時間復雜度

[英]Time complexity of regular expression with backreferencing

這樣的正則表達式(可在任何字符串上操作)的時間復雜度是多少:“(。{5})\\ 1 \\ 1”

我所擁有的實現是:

reps <- function(s, n) paste(rep(s, n), collapse = "") # repeat s n times

find.string <- function(string, th = 3, len = floor(nchar(string)/th)) {
    for(k in len:1) {
        pat <- paste0("(.{", k, "})", reps("\\1", th-1))
        r <- regexpr(pat, string, perl = TRUE)
        if (attr(r, "capture.length") > 0) break
    }
    if (r > 0) substring(string, r, r + attr(r, "capture.length")-1) else ""
}

請幫忙。 謝謝! :)

這取決於實現方式。 由於存在反向引用,因此在嚴格的單詞定義中這不是正則表達式,但看起來是最壞的情況O(15 * length(string))

說明:正則表達式引擎將從字符串中的位置0、1、2、3、4..last開始嘗試匹配。 由於沒有約束(點字符),它將匹配任何前5個字符,然后將嘗試再次匹配它們兩次,最壞的情況是執行15個查詢,然后失敗。 然后它將移至字符串中的第二個位置,然后再次嘗試執行此操作。 因此,在最壞的情況下,它將執行len(string)次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM