数据结构

2018-10-31  本文已影响0人  Jack_Cui

开篇词

01为什么要学习数据结构和算法

02 如何抓住重点 系统高效地学习数据结果与算法

03 复杂度分析 如何分析、统计算法的执行效率和资源消耗

原文作者认为:
复杂度分析是整个算法学习的精髓 只要掌握了它 数据结构和算法的内容就掌握了一半

i=1; 
while (i <= n)
{ i = i * 2
}
O(log2n)

log3n = log3 2 * log2 n
在采用大O标记复杂度的时候可以忽略系数 即O(Cf(n)) = O(f(n))所以O(log2n)等于O(log3n)。因此在对数阶时间复杂度的标示方法里,我们忽略对数的“底”,统一表示为O(logn)

04 复杂度分析(下)浅析最好、最坏、平均、均摊时间复杂度

最好情况时间复杂度就是,在最理想的情况下执行这段代码的时间复杂度
最坏情况时间复杂度就是在最糟糕的情况下执行这段代码的时间复杂度
平均情况时间复杂度

均摊时间复杂度

 // array 表示一个长度为 n 的数组
 // 代码中的 array.length 就等于 n
 int[] array = new int[n];
 int count = 0;
 
 void insert(int val) {
    if (count == array.length) {
       int sum = 0;
       for (int i = 0; i < array.length; ++i) {
          sum = sum + array[I];
       }
       array[0] = sum;
       count = 1;
    }

    array[count] = val;
    ++count;
 }

这段代码实现了一个往数组中插入数据的功能。当数组满了之后,也就是代码中的count == array.lenth 时,我们用for循环遍历数组求和,并清空数组,将求和之后的sum值放到数组的第一个位置,然后再将新的数据插入。如果数组一开始就有空闲空间,则直接经数据插入数组。

05 编程语言只数组从从0开始的原因

历史原因:c语言是从0开始的 大部分语言都借鉴了c语言
寻址方便:

a[i] address = start + i *(date_type_size)
else
a[i] address = start + (i - 1) *(date_type_size)

06 链表:实现LRU缓存淘汰算法

上一篇下一篇

猜你喜欢

热点阅读