Java 数据结构 & 算法宁可累死自己, 也要卷死别人 19 记事法
Posted 我是小白呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 数据结构 & 算法宁可累死自己, 也要卷死别人 19 记事法相关的知识,希望对你有一定的参考价值。
【Java 数据结构 & 算法】⚠️宁可累死自己, 也要卷死别人 19⚠️ 记事法
概述
从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章.
时间复杂度
时间复杂度 (Time Complexity) 用来描述一个算法运行的时间.
大 O 记事法
大 O 记事法 (Big O Notation) 是用来描述一个算法最坏的情况下的时间复杂度. 大 O 记事法可以描述一个算法的上界, 通过常用输入大小函数来表示算法的最大运行时间.
大 O 记事法的定义:
- 当 f(n) 和 g(n) 满足 f ( n ) < = c ∗ g ( n ) f(n) <= c*g(n) f(n)<=c∗g(n), n > = n ( ₀ ) n >= n(₀) n>=n(₀), c > 0 c > 0 c>0, n ( ₀ ) > 1 n(₀) > 1 n(₀)>1
- 可以得到函数 (算法) 的时间复杂度为 f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n))
举个栗子, 2 n + 3 2n + 3 2n+3 的图像为:
我们可以得到:
- 2 n + 3 < = 5 ∗ n 2n + 3 <= 5 * n 2n+3<=5∗n, ( f ( n ) = 2 n + 3 f(n) = 2n + 3 f(n)=2n+3, c = 5 c = 5 c=5, g ( n ) = n g(n) = n g(n)=n)
- 所以 2 n + 3 2n + 3 2n+3 的时间复杂度为 O ( n ) O(n) O(n)
大 Ω \\Omega Ω 记事法
大 Ω \\Omega Ω 记事法 (Big Ω \\Omega Ω Notation) 是用来描述一个算法最好的情况下的时间复杂度. 大 Ω \\Omega Ω 记事法可以描述一个算法的下界, 通过常用输入大小函数来表示算法的最小运行时间.
大 Ω \\Omega Ω 记事法的定义:
- 当 f(n) 和 g(n) 满足 f ( n ) > = c ∗ g ( n ) f(n) >= c*g(n) f(n)>=c∗g(n), n > = n ( ₀ ) n >= n(₀) n>=n(₀), c > 0 c > 0 c>0, n ( ₀ ) > 1 n(₀) > 1 n(₀)>1
- 可以得到函数 (算法) 的时间复杂度为 f ( n ) = Ω ( g ( n ) ) f(n) = \\Omega(g(n)) f(n)=Ω(g(n))
举个栗子, 2 n + 3 2n + 3 2n+3 的图像为:
我们可以得到:
- 2 n + 3 > = 1 ∗ n 2n + 3 >= 1 * n 2n+3>=1∗n, ( f ( n ) = 2 n + 3 f(n) = 2n + 3 f(n)=2n+3, c = 1 c = 1 c=1, g ( n ) = n g(n) = n g(n)=n)
- 所以 2 n + 3 2n + 3 2n+3 的时间复杂度为 Ω ( n ) \\Omega(n) Ω(n)
大 Θ \\Theta Θ 记事法
大 Θ \\Theta Θ 记事法 (Big Θ \\Theta Θ Notation) 是用来描述一个算法平均情况下的时间复杂度. 大 Θ \\Theta Θ 记事法可以描述一个算法的下界, 通过常用输入大小函数来表示算法的最小运行时间.
大 Θ \\Theta Θ 记事法的定义:
- 当 f(n) 和 g(n) 满足 c 1 ∗ g ( n ) < = f ( n ) < = c 2 ∗ g ( n ) c1*g(n) <= f(n) <= c2*g(n) c1∗g(n)<=f(n)<=c2∗g(n), n > = n ( ₀ ) n >= n(₀) n>=n(₀), c 1 , c 2 > 0 c1, c2 > 0 c1,c2>0, n ( ₀ ) > 1 n(₀) > 1 n(₀)>1
- 可以得到函数 (算法) 的时间复杂度为 f ( n ) = Θ ( g ( n ) ) f(n) = \\Theta(g(n)) f(n)=Θ(g(n))
举个栗子, 2 n + 3 2n + 3 2n+3 的图像为:
我们可以得到:
- 1 ∗ n < = 2 n + 3 < = 5 ∗ n 1*n <= 2n + 3 <= 5*n 1∗n<=2n+3<=5∗n, ( f ( n ) = 2 n + 3 f(n) = 2n + 3 f(n)=2n+3, c 1 = 1 c1 = 1 c1=1, c 2 = 5 c2 = 5 c2=5, g ( n ) = n g(n) = n g(n)=n)
- 所以 2 n + 3 2n + 3 2n+3 的时间复杂度为 Θ ( n ) \\Theta(n) Θ(n)
以上是关于Java 数据结构 & 算法宁可累死自己, 也要卷死别人 19 记事法的主要内容,如果未能解决你的问题,请参考以下文章
Java 数据结构 & 算法宁可累死自己, 也要卷死别人 20 排序算法
Java 数据结构 & 算法宁可累死自己, 也要卷死别人 18 贪心算法
Java 数据结构 & 算法宁可累死自己, 也要卷死别人 18 贪心算法
Java 数据结构 & 算法宁可累死自己, 也要卷死别人 17 KMP 算法