開始,我認為需要列舉所有的子串來判斷是否包括列表中的某個字串。因為給定字串包括l個字元,就會有l²個子串,依次列舉列表中所有的字串,就會有n種可能,再執行kmp。在每個子串單拿出來做kmp時,每個子串的均攤最好平均複雜度是l/3,因為從0-1中隨機選兩個數,它們的平均距離是1/3。而最壞平均複雜度是2l/3,就是當列表裡的每個字串都恰好對應每個子串,要是再長,就比子串長了,可以直接break。綜合下來,最好複雜度是nl³/3屬於o(nl³),最壞複雜度是2nl³/3也屬於o(nl³),所以就是o(nl³)n最大是500,l最大是300。所以就到了37,500,000,000。如果每秒進行一千萬次迴圈,就需要3750秒,明顯超時。
後來想到,可以對於每個起點,用二分來尋找第一次包含列表裡的某些字串的終點。複雜度o(l²logl)。因為l是300,所以最大為2,430,000。不會超時。
所以,要用預處理來避免很多的迴圈摞起來導致超時。迴圈分著做要比合著做快。
spfa優化時間複雜度及判負環
noi2018 day1 t1有許多人用spfa被卡掉25分。注意 寫spfa絕對不用stl,因為出題人會不懷好意的卡掉它。我也是願意寫spfa的人.畢竟簡單 在這裡總結一下spfa的優化 1.普通spfa會開乙個陣列。可以用迴圈佇列優化.教程書中都有 2.我們在把點加入佇列時,隨機從隊首或隊尾加入...
dfs時間複雜度 時間複雜度 空間複雜度
時間複雜度的數學證明方法相對比較複雜,通常在工程實際中,會分析就好。注意 只看最高複雜度的運算 int for for for for int遞迴如何分析時間複雜度?常數係數可以忽略,在分析時不用考慮,只要說以上術語即可。主定理 master throrem 上述第四種是歸併排序,所有排序演算法,最...
時間複雜度 空間複雜度
時間複雜度 在電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串 的長度的函式。時間複雜度常用大o符號 表述,不包括這個函式的低階項和首項係數。計算時間複雜度的方法 1 只保留高階項,低階項直接丟棄 2 係數不要 3 執行次數是常數是為o 1...