数据结构
概念:Data Structure 存储数据的不同方式。比如数组、链表。
算法
概念:同一个问题的不同解决方法。算法往往是针对特定数据结构的。
为了更简单的表述算法,举个例子:将0插入7、1之间。
将0插入链表中的7、1之间,需要移除7、1之间的指针,重新生成7、0,0、1之间的指针。
将0插入数组中7、1之间,需要开辟新的内存空间,先放入247然后放入0最后放入1653。
如何测算算法的优劣
时间测算:简单点说就是解决某个问题需要花费的时间,时间越短,越牛逼。
空间测算:简单点说就是解决某个问题需要额外占用的空间,占用越小,越牛逼。
Big O
时间复杂度问题举例
eg:访问数组某个位置的值。随着数组规模的扩大,访问某个位置的值始终只需要知道引脚的偏移量是多少即可,时间复杂度为O(1)。
eg:访问链表某个位置的值。随着链表规模的扩大,访问某个位置的值寻址次数会线程增加,如果每次寻址的时间为t,那么某个位置的寻址时间为nt,时间复杂度为O(n)。
eg:计算数组的平均值。随着数组规模的扩大,如果每两个元素相加的时间为t,那么所有元素相加的时间为(n-1)t,时间复杂度很明显为O(n)。
eg:计算数组的最值 O(n)。随着数组规模的扩大,如果每两个元素比较大小的时间为t,那么所有元素比较完毕的时间为(n-1)t,时间复杂度很明显为O(n)。
eg:对数组所有元素进行排序。随着数组规模的扩大,假如我们使用冒泡排序法,那么两层for循环,(n-1)t*(n-1)t,时间复杂度为O(n2),n的平方。