算法笔记(一)

2019-11-24  本文已影响0人  掩流年

算法复杂性分析

public static int sum(int n){
    int partialSum;
    partialSum=0;              //1
    for(int i=1;i<n;i++){      //2
        partialSum+=i*i*i;     //3
    }
    return partialSum;         //4
}

对于这个程序的算法复杂度分析,声明的变量时间不计。第一行和第四行各占一个时间单元,第三行每执行一次占4个时间单元(两次乘法,一次加法,一次赋值)。执行 N次共占用4N个时间单元。第二行初始化为i=1,所有的这些自增运算为N个单元时间,一共2N+2个时间单元。总量就是6N+4个时间单元。O(6N+4)=O(N)。

线性表、链表数据结构

简单来说,对表的所有操作都可以使用数组来完成。不过插入和删除的花费却潜藏的巨额的开销。举个例子来说,当在位置0需要插入一条数据的时候,就需要把所有的数据向后移一位空间出来。因此就多出来一种数据结构叫做链表。

队列、栈结数据结构

栈是限制插入和删除只能在一个位置上进行的表。该位置是表的末端。叫做栈的顶 。对栈的基本操作是pop和push,前者相当于弹出,后者相当于插入。栈叫做LIFO(后进先出的表)

栈的实现

由于栈是一个表,所以使用ArrayList和LinkedList都可以实现栈。大部分情况下他们都是最优的实现选择。

应用

队列
如同栈一样,无论是使用链表的形式还是数组形式,都能实现队列,O(1)的运行时间。

上一篇 下一篇

猜你喜欢

热点阅读