ζ

浅谈大O表示法(兼MathJax测试)

    杂记

大O表示法是算法竞赛中常用于表示复杂度的方法。其核心思想是抓住主要矛盾,忽略次要矛盾,即只算多项式中次幂(或者说:增长速度)最高的项,而且“向上取整”。

比如斐波那契数列 f[x]f[x]

f[x]={1x2 f[x2]+f[x1]elsef[x]=\left\{ \begin{aligned} 1 && x \leq 2 \\ \ f[x-2]+f[x-1]&& else \end{aligned} \right.

已知求斐波那契数列第nn(n>2)(n>2)所需计算次数大致为2n22^{n-2}次,因此时间复杂度为O(2n)O(2^n)。这正是所谓“向上取整“。

常见的时间复杂度有以下几种,从小到大排序分别为。

O(1)O(logn)O(n)O(nlogn)O(na)(a)O(an)(a)O(1)\\O(logn)\\O(n)\\O(nlogn)\\O(n^a)(a为常数)\\O(a^n)(a为常数)

由于剪枝的存在,关于什么时候选用什么时间复杂度的算法并没有定论,只能用心来感受

后记:本文的数学公式基于Kramed与MathJax交火渲染生成。如你所见,MathJax在行外公式很成功,写内联公式时失败了,这个问题下辈子再解决吧

更新:已通过改用renderer-markdown-it-plus与KaTex解决了内联公式的问题。

页阅读量:  ・  站访问量:  ・  站访客数: