File tree Expand file tree Collapse file tree 4 files changed +106
-0
lines changed
Expand file tree Collapse file tree 4 files changed +106
-0
lines changed Original file line number Diff line number Diff line change 1+ < script >
2+ /** 时间复杂度O(1) */
3+ function fnO1 ( ) {
4+ console . log ( "时间复杂度O(1)" ) ;
5+
6+ const a = 5 ;
7+ const b = 10 ;
8+ const sum = a + b ;
9+ }
10+
11+ /** 时间复杂度 O(logn)、 O(nlogn) */
12+
13+ function fnOlogn ( n ) {
14+ console . log ( "时间复杂度O(logn)" ) ;
15+
16+ let count = 0 ;
17+ let i = 1 ;
18+ while ( i < n ) {
19+ i = i * 2 ;
20+ count ++ ;
21+ }
22+
23+ console . log ( "时间复杂度O(logn), 执行次数count: " , count ) ;
24+ }
25+
26+ function fnOnlogn ( n ) {
27+ console . log ( "时间复杂度O(nlogn)" ) ;
28+ let count = 0 ;
29+ for ( let j = 0 ; j < n ; j ++ ) {
30+ let i = 1 ;
31+ while ( i < n ) {
32+ i = i * 2 ;
33+ count ++ ;
34+ }
35+ }
36+ console . log ( "时间复杂度O(nlogn), 执行次数count: " , count ) ;
37+ }
38+
39+ /** 时间复杂度 fnO(m+n), 当可以确认n >= m的时候,时间复杂度可以修改为 O(n) */
40+
41+ function fnOmn1 ( m , n ) {
42+ let countM = 0 ;
43+ let countN = 0 ;
44+ for ( let i = 0 ; i < m ; i ++ ) {
45+ countM += 1 ;
46+ }
47+ for ( let j = 0 ; j < n ; j ++ ) {
48+ countN += 1 ;
49+ }
50+
51+ console . log ( "时间复杂度O(m+n),执行次数count: " , countM + countN ) ;
52+ }
53+
54+ /** 时间复杂度 fnO(m*n), 当可以确认n >= m的时候,时间复杂度可以修改为 O(n^2) */
55+ function fnOmn2 ( m , n ) {
56+ let count = 0 ;
57+ for ( let i = 0 ; i < m ; i ++ ) {
58+ for ( let j = 0 ; j < n ; j ++ ) {
59+ count += 1 ;
60+ }
61+ }
62+
63+ console . log ( "时间复杂度O(m*n),执行次数count: " , count ) ;
64+ }
65+ </ script >
Original file line number Diff line number Diff line change 1+ ### 一、时间复杂度
2+
3+ > 时间复杂度: 表示** 代码执行时间随数据规模增长的变化趋势** ,并不是代表代码真正的执行时间。
4+
5+ #### 时间复杂度分析
6+
7+ ##### 时间复杂度分析实用方式:
8+
9+ 1 . 只关注循环执行次数最多的一段代码;
10+ 2 . 加法法则:总复杂度等于量级最大的那段代码的复杂度;
11+ 3 . 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积;
12+
13+ ##### 时间复杂度实例分析:
14+
15+ 时间复杂度量级
16+
17+ 1 . 常量阶 O(1);
18+ 2 . 对数阶 O(logn);
19+ 3 . 线性阶 O(n);
20+ 4 . 线性对数阶 O(nlogn);
21+ 5 . 平方阶 O(n^2)、 立方阶 O(n^3) ... k 次方阶 O(n^k);
22+ 6 . 指数阶 O(2^n);
23+ 7 . 阶乘阶 O(n!)
24+
25+ ##### 对应时间复杂度量级别分析
26+
27+ 1 . O(1)
28+
29+ 要点:** 一般情况下,只要算法中不存在循环语句、递归语句,即使有成千上万行的代码,其时间复杂度也是 Ο(1)** 。
30+
31+ 2 . O(logn)、O(nlogn)
32+
33+ 要点:常见时间复杂度为 O(nlogn)的算法:归并排序、快速排序。
34+
35+ 3 . O(m + n)、O(m \* n)
36+
37+ 要点:这中情况的代码的复杂度由两个数据的规模来决定,如果可以确定 n >= m,那么时间复杂度就可以改为 O(n)、O(m^2)。
38+
39+ #### 二、空间复杂度
40+
41+ > 空间复杂度: 表示** 算法的存储空间随数据规模增长的变化趋势** ,并不是代表代码真正的存储空间小号。
You can’t perform that action at this time.
0 commit comments