[英]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.