由「数据范围」筛选不同「复杂度」的算法?

不同数据范围下,代码的时间复杂度和算法该如何选择:

  • n 30 = > O ( k n ) n≤30 => O(k^n) ,dfs + 剪枝,状态压缩 dp
  • n 1 0 2 = > O ( n 3 ) n≤10^2 => O(n^3) ,floyd,dp
  • n 1 0 3 = > O ( n 2 ) O ( n 2 l o g n ) n≤10^3 => O(n^2),O(n^2logn) ,dp,二分
  • n 1 0 4 = > O ( n n ) n≤10^4 => O(n ∗√n) ,块状链表
  • n 1 0 5 = > O ( n l o g n ) n≤10^5 => O(n logn) => 各种 sort,线段树、树状数组、set/map、heap、dijkstra + heap、spfa、求凸包、求半平面交、二分。
  • n 1 0 6 = > O ( n ) n≤10^6 => O(n) ,以及常数较小的 O ( n l o g n ) O(nlogn) 算法 =>
    • hash、双指针扫描、kmp、AC自动机,常数比较小的 O ( n l o g n ) O(nlogn) 的做法:sort、树状数组、heap、dijkstra、spfa。
  • n 1 0 7 = > O ( n ) n≤10^7 => O(n) ,双指针扫描、kmp、AC 自动机、线性筛素数。
  • n 1 0 9 = > O ( n ) n≤10^9 => O(√n) ,判断质数
  • n 1 0 18 = > O ( l o g n ) n≤10^{18} => O(logn) ,最大公约数

Q:为什么 100w 次的运算给出的 4+ m 内存够用?
A :假设有 100w 个 int 类型变量(4 字节),那么 1000000 × 4 = 4000000 字节(byte),等于 4000000 / 1024 / 1024 = 4 兆 (Mb)。

发布了461 篇原创文章 · 获赞 102 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_43539599/article/details/104683573