From 46b047777812f1d4d0872a9112a7cb2cc73617e3 Mon Sep 17 00:00:00 2001 From: linghuam <1551827898@qq.com> Date: Thu, 30 May 2019 19:54:19 +0800 Subject: [PATCH] a --- .../学习js数据结构与算法/sort&search.js | 17 ++++ .../学习js数据结构与算法/学习js数据结构与算法.md | 79 +++++++++++++++++- .../学习js数据结构与算法/时间复杂度曲线图.jpg | Bin 0 -> 75756 bytes 3 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 b00-阅读笔记/学习js数据结构与算法/时间复杂度曲线图.jpg diff --git a/b00-阅读笔记/学习js数据结构与算法/sort&search.js b/b00-阅读笔记/学习js数据结构与算法/sort&search.js index 248363c..39b927d 100644 --- a/b00-阅读笔记/学习js数据结构与算法/sort&search.js +++ b/b00-阅读笔记/学习js数据结构与算法/sort&search.js @@ -110,4 +110,21 @@ function partition(arr, left, right) { } } return i; +} + +function binarySearch(arr, value) { + var left = 0, + right = arr.length - 1; + var mid; + while(left <= right) { + mid = Math.floor((left+right)/2); + if (value < arr[mid]) { + right = mid - 1; + } else if(value > arr[mid]){ + left = mid + 1; + } else { + return mid; + } + } + return -1; } \ No newline at end of file diff --git a/b00-阅读笔记/学习js数据结构与算法/学习js数据结构与算法.md b/b00-阅读笔记/学习js数据结构与算法/学习js数据结构与算法.md index 7017aa8..5be9dfe 100644 --- a/b00-阅读笔记/学习js数据结构与算法/学习js数据结构与算法.md +++ b/b00-阅读笔记/学习js数据结构与算法/学习js数据结构与算法.md @@ -644,8 +644,83 @@ function partition(arr, left, right) { ### 顺序搜索 -### 二分搜索 +一一对比。 + +### 二分搜索(二分查找) + +对于已排好序的数组。 + +```js +function binarySearch(arr, value) { + var left = 0, + right = arr.length - 1; + var mid; + while(left <= right) { + mid = Math.floor((left+right)/2); + if (value < arr[mid]) { + right = mid - 1; + } else if(value > arr[mid]){ + left = mid + 1; + } else { + return mid; + } + } + return -1; +} +``` ## 算法补充知识 -## 时间复杂度速查表 \ No newline at end of file +### 递归 + +[尾调用优化](https://juejin.im/post/5a4d898a518825698e7277d1) + +```js +// 递归 +function fibonacci(num) { + if (num === 1 || num === 2) return 1; + return fibonacci(num-1) + fibonacci(num-2); +} + +// 非递归 +function fibonacci(num) { + var n1 = 1, n2 = 1, n=1; + for (var i = 3; i <= num; i++) { + n = n1 + n2; + n1 = n2; + n2 = n; + } + return n; +} +``` + +### 动态规划(Dynamic Programming, DP) + +是一种将复杂问题分解成更小的子问题来解决的优化技术。 + +要注意动态规划和分而治之(归并排序和快速排序算法中用到的那种)是不同的方法。 +分而治之方法是把问题分解成相互独立的子问题,然后组合它们的答案,而动态规划则是将问题分解成相互依赖的子问题。 + +解决的问题: + +* 背包问题:给出一组项目,各自有值和容量,目标是找出总值最大的项目的集合。这个 +问题的限制是,总容量必须小于等于“背包”的容量。 + +* 最长公共子序列:找出一组序列的最长公共子序列(可由另一序列删除元素但不改变余 +下元素的顺序而得到)。 + +* 矩阵链相乘:给出一系列矩阵,目标是找到这些矩阵相乘的最高效办法(计算次数尽可 +能少)。相乘操作不会进行,解决方案是找到这些矩阵各自相乘的顺序。 + +* 硬币找零:给出面额为d1…dn的一定数量的硬币和要找零的钱数,找出有多少种找零的 +方法。 + +* 图的全源最短路径:对所有顶点对(u, v),找出从顶点u到顶点v的最短路 + +### 贪心算法 + +### 大 O 表示法 + +## 时间复杂度速查表 + +![时间复杂度曲线图](./时间复杂度曲线图.jpg) \ No newline at end of file diff --git a/b00-阅读笔记/学习js数据结构与算法/时间复杂度曲线图.jpg b/b00-阅读笔记/学习js数据结构与算法/时间复杂度曲线图.jpg new file mode 100644 index 0000000000000000000000000000000000000000..931a9c9eb139c2f1efe645c3241dafffe8b7b458 GIT binary patch literal 75756 zcmc$_2UJttwl5w
?4oFA7o=Kk)IL^WHh%9shIg_}@3)xOZn|kDZad=l-p^=bH1k*P8S9`0shZbv 4W&x}!t|yLA@_B#EV#o2ZK#8LX*_Nq6PD=s=9In7>IOOQ}F0poUjVf)7
z9`H%ogNkHNWK)%~+3aqXaTRIzcH$HDQCc#^1fvOIlf54uyRVFA%!O?AG-99dXv?(6
zex-uS7oR3itO9nBHR3C~Pscd>&t_7JT}QrKxOp9Zp*%fAWSsV1>wi?zGL>w4=DbmU
zzr=iZ>ytTh!}6-__X&N!rsr^z@F35*mZy}H!MWdn9~{+xjB!kz)XO@ZU<*_$Iy}cV
z&uH-SL|zVjgVzN{UZGUs45g9>*4NccELlG#BJ6=%*jgik pTnhvb`qvkETkItcQG6WP1
z^Ujh1L+sD${9%IbC>U`3@T|`BR{R6{Z!`C4nRzd?v!^<>dV3R@IXbQbXk!0Ey8A!!
z-v1vQT+2@{UPt6kFmbIc-_kqF7b=?Vl&SB0CZ_l?_h9c%QV8AT eP{gqY|mkQ1@
zZ3`gv#Dzr5L#p8}FEk^9c5=Y%DH@+dOohLH?{V)`oz_lO>fybrC)t|$v!j#cdDkz-
zviv5%0SW3_wlCGoR+|BsZ*J$B16Z{%UPfAdmOEV|>a3Ra-I!Jt+4ye23N#x@7tW?-#iA9wVW(CP5iEnG1(HpG%
znK$kIyv^Ewe3
h!If81
zdQbE^Ml(^J-NmB;!wNrw@$%=S?J2!{0dbEMx?^2W9@H^pOpm{)Ww{!P`r3h@@riErSNZNdUBZo?V&BecmZ?=}HjmnX
z599mg0z~pTbXo4d=<7ifq$A0>j*B12H+a|~*&>cBJ?dCxeXZK}D=?fC#qkyC7#o7l
zO3#^r^2e~lxG#rxw?G>!a?-#si(Wy(9UGKA0w(NUdIwYK@vf##cSNx>qL3r7IFB^Z
zR`u;kk)O&NNHSDrV1ZYnLWRuwYHa=TQ5FI{fy7l6l~2JA3p8rSf_%ORt2U+?U}Q=S
zp+btD0oHk)A_ePL`wD18#d7rQgW7<2&CKt7Z1_oOollKD{dk$rJ$ROf3Z~VvisNhe
z0}Gb6jof7yr$^%VHiiu|^qc}x_Iz#{cn|3$wgG`DwU(v~M$M*laD@
Aj0;=!7f>n#@Kd
zO~|5VKI$RS;NYHgCe9w=65tq0H{41Cpjo~$hW;+rXCvoIG4m1YGtu2_1C
zMb?;rxL(
NFj}yaDT)*~b`%@S(k1x0pjXTdg`~Yv;&Bs
eGY`c#ZIE{1aM0Pa2Z`+Rq0P>6%n6;wRPI+g<j$)xj~L`Q%SrWIFT6
zRx*BAx9Fznb(kcZ9xi~CBtNJDf%0Vt+bhokx++}r>WMgHTytz#x36}v(H*v>
0RFz{b6A`$@W0d})oT%);BLH3t%Exo5`aP?=4&E%$P*G2Y}Y
zQMZd(i$Q0u{6n{NEN7y0>&&Z2{RfVno^y89ogu4wi(K7|`^H|46X~z6;XDG-<-ZAg
ze-`=v$^QQYh4v4k=o-MT&$c4o!)24at*
-G`#l07{VgHHYYkwia>7>{Z9h3Ft
z)(-s+aWE)uAZh+liZbH6oVs!XNxk<^KtOx>%KO^5l>uf-&uQ3?d>;9@AoZwC8NgV!?
zF>1&>UkZyVEyAUG#+