由數據範圍反推算法複雜度以及算法內容

一般ACM或者筆試題的時間限制是1秒或2秒。
在這種情況下,C++代碼中的操作次數控制在 107107 爲最佳。

下面給出在不同數據範圍下,代碼的時間複雜度和算法該如何選擇:

n≤30n≤30, 指數級別, dfs+剪枝,狀態壓縮dp
n≤100n≤100 => O(n3)O(n3),floyd,dp
n≤1000n≤1000 => O(n2)O(n2),O(n2logn)O(n2logn),dp,二分
n≤10000n≤10000 => O(n∗n√)O(n∗n),塊狀鏈表
n≤100000n≤100000 => O(nlogn)O(nlogn) => 各種sort,線段樹、樹狀數組、set/map、heap、dijkstra+heap、spfa、求凸包、求半平面交、二分
n≤1000000n≤1000000 => O(n)O(n), 以及常數較小的 O(nlogn)O(nlogn) 算法 => hash、雙指針掃描、kmp、AC自動機,常數比較小的 O(nlogn)O(nlogn) 的做法:sort、樹狀數組、heap、dijkstra、spfa
n≤10000000n≤10000000 => O(n)O(n),雙指針掃描、kmp、AC自動機、線性篩素數
n≤109n≤109 => O(n√)O(n),判斷質數
n≤1018n≤1018 => O(logn)O(logn),最大公約數

作者:yxc
鏈接:https://www.acwing.com/blog/content/32/
來源:AcWing
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章