由数据范围反推算法复杂度以及算法内容

转载来源 (AcWing)

一般的题目时间限制是1s。

在这种情况下,C++代码中的操作次数控制在 \(10^{7}\)为最佳。

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

  1. \(n≤30\)
  • 指数级别
  • DFS+剪枝
  • 状态压缩dp
  1. \(n≤100\)\(O\)( \(n^{3}\) )
  • Floyd
  • dp
  1. \(n≤1000\)\(O\)( \(n^{2}\)),\(O\)( \(n^{2}logn\) )
  • dp
  • 二分
  • 朴素Dijkstra
  • 朴素Prim
  • Bellman-Ford
  1. \(n≤10000\)\(O\) (\(n^{\frac{3}{2}}\)) \(==\) \(O\) (\(n\sqrt{n}\))
  • 块状链表
  1. \(n≤ 10^{5}\)\(O\)(\(nlogn\))
  • 快速排序,归并排序
  • 线段树
  • 树状数组
  • set/map
  • Dijkstra+堆优化
  • Prim+堆优化
  • SPFA
  • 求凸包
  • 求半平面交
  • 二分
  1. \(n≤10^{6}\)\(O\)(\(n\)),以及常数较小的\(O\)(\(nlogn\))算法
  • 并查集
  • hash
  • 双指针扫描
  • KMP
  • AC自动机
    • 常数比较小的\(O\)(nlogn)的算法:sort、树状数组、堆、Dijkstra+堆优化、SPFA
  1. \(n≤10^{7}\)\(O\)(\(n\))
  • 双指针扫描
  • KMP
  • AC自动机
  • 线性筛素数
  1. \(n≤10^{9}\)\(O\)(\(\sqrt{n}\))
  • 判断质数
  1. \(n≤10^{18}\)\(O\)(\(logn\))
  • 最大公约数
  • 快速幂(矩阵快速幂)
posted @ 2020-08-06 08:28  x_miracle  阅读(56)  评论(0)    收藏  举报