TWICE出新MV啦!
转载於:JYP Entertainment 官方YouTube
非本科生直接查wiki,Big O是什麽意思,根本就是个错误。
我再重读一次大学也还是看不懂那些运算符号,因为根本不想懂XD
最简单的认知,用来估算演算法效益的符号,估算程序(演算法)解决问题的效益。
常常在leetcode上的一些题目或大神解说中,我是O(n)或O(log n)解法,等於是说这些解法的效益如何,但用更直接一点的说法是,这个解法或演算法,最差状况下要跑几次才有解答。
上一篇猜数字的例子中,假设有n笔资料,最差状况下需要跑n次才会有解答,所以这个解法效益评估就是O(n)。
而二元搜索法是以2为底求100(资料数)的对数,所以是O(log n)。
O(n):线性时间。
O(log n):对数时间。
紧急补充,log 2是杀毁??
如果跟我一样数学不好,无法去记对数与指数,那请记得log是对数。
指数
2 ** n = 8
n = 3 # n为指数。
对数
log 2 8 = n
n = 3 # n为 以2为底8的对数。
像二元法就是log2,面对100个资料要执行几次,如昨天的答案是7次。所以其实评估演算法的效益是以次数来评估,另外资料的增加也可由对数发现,资料越多,所需解决的次数是正比但不是等比。
不是耶,很多状况下,如果资料有10个,可以最多跑10次就算到解答,那有时也是很厉害。
判断与加减乘除等,这些跑一次就算一次,很多解法远远是超过O(n)状况的。
以这题举例。leetcode 344. Reverse String
def reverse_string(s)
s.reverse!
end
p reverse_string(["h","e","l","l","o"]) #=> ["o","l","l","e","h"]
先忘记reverse
的真正原理,无论是设定一个新的空阵列,将资料pop一个一个放进新阵列。
arr = []
s.size time do
arr << s.pop
end
# 这个解法leetcode上错喔,这是在s外处理。
还是
left = 0
right = s.length - 1
while left < right do
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
end
都属於O(n),相信也很难找出更快的了,所以初学演算法不是去要求自己能更快解决问题,而是去了解哪些问题有更好的解法,因为很多演算法到後面会变成。
O(n*log n) : 本身资料数乘上对数。
O(n**2) : 资料数的2次方(一样资料越多越恐怖)。
O(n!) : 降幂乘法,宇宙无敌恐怖那种。
改天解题能清楚知道自己绝对是O(n)就能解出,说不定就是一种成就?
另外,还是reverse
一次解决最愉悦呀!
>>: Day 21 UICollectionView的练习(1/2)
接续上一章,Governance and Management of Enterprise IT (...
使用 React 作为前端架构的朋友对於 Flux 应该都不陌生,React 也内建了 Flux 让...
这篇程序码在 https://github.com/DanSnow/ironman-2020/tr...
缺乏计画的目标,只能叫做愿望。 A goal without a plan is just a wi...
OK!上一篇最後讲了个我亲身体验过会让人掉san值的专案开发经验,但.......那个专案最後还是完...