概述
本文介绍三个算法基础问题:
- 什么是算法
- 什么是数据结构
- 为什么要学习大O表示法
- 什么是时间复杂度
- 什么是空间复杂度
什么是算法
是用于解决某一类问题的公式和思想
什么是数据结构
是数据的组织,管理和储存格式。目的是为了更高效的访问和修改数据
为什么要学习大O表示法
因为算法有优劣之分。比如让你求1+2+3...+10000的结果,你可以从1加到10000,当然这是非常低效的。也可以用(1+10000)*10000/2 = 50005000 这个公式计算,就非常高效啦。
一般用时间复杂度和空间复杂度来描述算法的优劣,这两种标准用大O来表示,所以叫大O表示法。
什么是时间复杂度
从时间维度考量算法,是指执行当前算法所消耗的时间,我们通常用时间复杂度来描述。
简单举个例子
昨天的宝石与石头的习题,大家看到正则表达式解法的第一反应就是,这个解法比循环要快。
因为正则解法,不管宝石的数量多大或者多小,他执行所消耗的时间都是1,是常数级别的。
而filter的解法虽然也很优秀,但是他所消耗的时间和宝石S的大小有关,是线性的,如果S的长度变大,那么执行次数就会变大。
什么是空间复杂度
从空间维度考量算法,是指执行当前算法需要占用多少内存空间,我们通常用空间复杂度来描述。
关于时间复杂度的定义
若存在函数f(n),使得当n趋近于无穷大的时候,T(n)/f(n)的极限值不为等于零的常数,则称f(n)是T(n)的同类数量级函数。记作 T(n) = O(f(n)),O 为算法的时间复杂度。(这句看不懂没关系)