Java数据结构和算法

数据结构和算法-1-综述

2018-06-25  本文已影响83人  今阳说

之前有读过《Java数据结构和算法》,当时简单的写了一些笔记和实现的实例,现对其进行一个系统的整理,以作为分享和备忘。

本篇主要是一些简要的介绍和一些专业词汇的定义:

1. 什么是数据结构和算法

2. 可以解决哪些问题?

大体可以分为三类情况:

3. 常用数据结构的优缺点

以上除数组外,都可以被认为是抽象数据结构 ;
这些数据结构后面都会有单独的篇章去进行具体的讲解,现在不用去纠结它们是什么。

面向对象编程语言的产生的原因

抽象数据类型:

Abstract Data Type ,简称ADT,用于指定逻辑特性而不指定实现细节的数据结构 ,简单来说就是 着重于它做了什么,而忽略它是怎么做的。
例如,栈和队列都是属于ADT,用数组或者链表都可以实现栈和队列,拿栈来说,它的精髓在于后进先出,在于push,pop,以及如何使用它,而不是它的内在实现,用数组还是链表实现关键就在于,能否精确的预测栈或队列需要容纳的数据量,以及增删改查的时间复杂度(效率)的差别。

算法的时间复杂度(大O表示法)

这个定义来自百度百科,感觉并不容易看懂,不过并不重要,下面举几个例子就好了:

  1. 交换i,j的时间复杂度是 O(1)
int i=1, j=2, temp;
temp=i;
i=j;
j=temp;
  1. 单层for循环的时间复杂度是O(n)
int sum=0;
for(int i=0;i<n;i++){
  sum+=i;
}
  1. 双重for循环的时间复杂度是O(n^2)
int sum=0;            (一次)
for(i=1;i<=n;i++)     (n次 )
  for(j=1;j<=n;j++)   (n^2次 )
    sum++;           (n^2次 )
解:T(n)=2n^2+n+1 =O(n^2)

后面讲到其他数据结构和算法还会多次提及这个感念,例如下一篇的数组,线性查找(fori)的时间复杂度是O(n),而有序数组的二分查找的时间复杂度是O(logN)。

上一篇 下一篇

猜你喜欢

热点阅读