Java数据结构和算法(一)概念

Java数据结构和算法(一)概念

数据结构与算法目录(http://www.javashuo.com/article/p-qvigrlkr-da.html)html

经常使用的数据结构

1、逻辑结构

数据之间的相互关系称为逻辑结构。一般分为四类基本结构:java

  • 集合 :结构中的数据元素除了同属于一种类型外,别无其它关系。
  • 线性结构 :结构中的数据元素之间存在一对一的关系。
  • 树型结构 :结构中的数据元素之间存在一对多的关系。
  • 图状结构或网状结构 :结构中的数据元素之间存在多对多的关系。

2、存储结构

数据结构在计算机中有两种不一样的存储方法:算法

  • 顺序存储结构 :用数据元素在存储器中的相对位置来表示数据元素之间的逻辑关系。
  • 链式存储结构 :在每个数据元素中增长一个存放地址的指针,用此指针来表示数据元素之间的逻辑关系。

3、复杂度

3.1 时间复杂度

一个算法花费的时间与算法中语句的执行次数成正比例,哪一个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为 T(n)数据结构

在刚才提到的时间频度中,n 称为问题的规模,当 n 不断变化时,时间频度 T(n) 也会不断变化。但有时咱们想知道它变化时呈现什么规律。为此,咱们引入时间复杂度概念。数据结构和算法

通常状况下,算法中基本操做重复执行的次数是问题规模 n 的某个函数,用 T(n) 表示,如有某个辅助函数 f(n),使得当 n 趋近于无穷大时,T(n)/f(n) 的极限值为不等于零的常数,则称 f(n) 是 T(n) 的同数量级函数。记做 T(n)=O(f(n)),称 O(f(n)) 为算法的渐进时间复杂度,简称 时间复杂度。函数

  • 随着问题规模 n 的增大,常数部分的影响愈来愈小
    T(n) = 2n2 + 4n +log2n + 4指针

  • 随着问题规模 n 的増大,增加最快的项影响愈来愈大
    T(n) = 2n2 + 4n + log2n + 4code

  • 渐进时间复杂度只关注增加最快的项
    T(n) = O(n2) // 去除常数系数,去除复杂度小的项htm

  • logn 通常表示 log2nblog

有时候,算法中基本操做重复执行的次数还随问题的输入数据集不一样而不一样,如在冒泡排序中,输入数据有序而无序,其结果是不同的。此时,咱们计算平均值。

常见的算法的时间复杂度之间的关系为:

O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(2n)<O(n!) < O(nn)

实例 1: T(n) = 1 + n + 2n2 = O(n2)

sum=0;                  // 执行 1 次
 for(i=1;i<=n;i++)      // 执行 n 次
    for(j=1;j<=n;j++)   // 执行 n^2 次
        sum++;          // 执行 n^2 次

实例 2:T(n) = 1 + 4n = O(n)

a=0; b=1;               // 执行 1 次
for (i=1;i<=n;i++) {    // 执行 n 次
    s=a+b;              // 执行 n 次
    b=a;                // 执行 n 次
    a=s;                // 执行 n 次
}

实例 3:T(n) = O(log2n)

i=1;            // 执行 1 次
while (i<=n)
    i=i*2;      // 设频度是 f(n),则:2^f(n)<=n; f(n)<=log2n

3.2 空间复杂度

空间复杂度:算法所需存储空间的度量,记做:

S(n) = O(f(n))

其中 n 为问题的规模。

一个算法在计算机存储器上所占用的存储空间,包括存储算法自己所占用的存储空间,算法的输入输出数据所占用的存储空间和算法在运行过程当中临时占用的存储空间这三个方面。若是额外空间相对于输入数据量来讲是个常数,则称此算法是原地工做。

算法的输入输出数据所占用的存储空间是由要解决的问题决定的,是经过参数表由调用函数传递而来的,它不随本算法的不一样而改变。存储算法自己所占用的存储空间与算法书写的长短成正比,要压缩这方面的存储空间,就必须编写出较短的算法。


天天用心记录一点点。内容也许不重要,但习惯很重要!

相关文章
相关标签/搜索