正規表示式時間複雜度O(n)
1.有幾千個字串,要判斷每個字串中是否包含 “Book”,可以有兩種方法:
1>字串處理
在迴圈內:
if( str1.IndexOf("Book") > 0 )
{
}
2>正規表示式
Regex r = new Regex( "Book" ); // 在迴圈外
在迴圈內:
if( r.IsMatch( str1 ) )
{
}
以上那種執行效率會高些?
更進一步,假如問題是:在幾千個字串中找出含有 “Book”和/或 “Expert”但不包含“Result”的字串,那種方法效率高些?用正規表示式該怎樣寫?
2.正規表示式時間複雜度
Regex的演算法複雜度是固定的O(n),在完成了Regex到有限自動機的轉換以後,判斷一個字串是否匹配所需的時間只和該字串的長度有關,這個字串裡面的每個字元至多會被檢查一次。
String實現的IndexOf採用的是比較笨的辦法,某些情況下它可能需要檢查一個字元多次,比如匹配abac到ababac的時候。所以如果有大量的字串需要檢查,Regex應該要比IndexOf優化。如果有更多的匹配條件,那麼Regex的優勢就更明顯。你的例子“Book”和/或 “Expert”但不包含“Result”,IndexOf要檢查字串3次,但是Regex仍然只要一次(但是“不包含”的Regex寫起來不是很容易)。
相關文章
- 時間複雜度O(n)和空間複雜度時間複雜度
- 時間複雜度O(1)、O(n)、O(n²)、O(nlogn)的含義時間複雜度
- 時間複雜度為 O (n^2) 的排序演算法時間複雜度排序演算法
- 時間複雜度為 O(n^2) 的排序演算法時間複雜度排序演算法
- Javascript校驗密碼複雜度的正規表示式JavaScript密碼複雜度
- Java實現:排序演算法--時間複雜度為O(n² )Java排序演算法時間複雜度
- 時間複雜度跟空間複雜度時間複雜度
- 時間複雜度和空間複雜度時間複雜度
- 時間複雜度與空間複雜度時間複雜度
- JS常用正規表示式及驗證時間的正規表示式JS
- 一道看上去很嚇人的演算法面試題:如何對n個數進行排序,要求時間複雜度O(n),空間複雜度O(1)演算法面試題排序時間複雜度
- 正規表示式 \n 元字元字元
- 判斷連結串列是否為迴文結構,空間負責度為O(1),時間複雜度為O(n)時間複雜度
- 時間複雜度和空間複雜度 順序時間複雜度
- Leetcode 234. 迴文連結串列 快慢指標+連結串列逆序實現O(n)時間複雜度且O(1)空間複雜度LeetCode指標時間複雜度
- 時間複雜度怎麼算?如何計算時間複雜度?時間複雜度
- 關於計算時間複雜度和空間複雜度時間複雜度
- 【資料結構】-時間複雜度和空間複雜度資料結構時間複雜度
- 時間複雜度為O(nlogn)的排序演算法時間複雜度排序演算法
- 快速排序平均時間複雜度O(nlogn)的推導排序時間複雜度
- 時間複雜度為 O(nlogn) 的排序演算法時間複雜度排序演算法
- 隨機列印0-100的全部數字並且不可重複,時間複雜度為O(n)隨機時間複雜度
- 圖解時間複雜度圖解時間複雜度
- dfs時間複雜度分析時間複雜度
- 時間複雜度(詳解)時間複雜度
- 【演算法資料結構Java實現】時間複雜度為O(n)的最大和序列演算法資料結構Java時間複雜度
- 【演算法】設計包含 min函式的棧,時間複雜度都是 O(1)演算法函式時間複雜度
- 時間與空間複雜度分析複雜度
- 時間複雜度的計算時間複雜度
- 解惑3:時間頻度,演算法時間複雜度演算法時間複雜度
- 冰與火之歌:「時間」與「空間」複雜度複雜度
- PHP 演算法基礎----時間複雜度和空間複雜度(轉載)PHP演算法時間複雜度
- 那些年忽略的知識:時間複雜度和空間複雜度詳解時間複雜度
- PHP陣列函式的時間複雜度清單PHP陣列函式時間複雜度
- 演算法分析__時間複雜度演算法時間複雜度
- 演算法(一)時間複雜度演算法時間複雜度
- 演算法的時間複雜度演算法時間複雜度
- 卷演算法——時間複雜度演算法時間複雜度