数据结构与算法-概述

一、数据结构

计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。

数据结构有哪些呢?

有2种不同的表现形式,一种是逻辑层的,即数据元素之间的逻辑关系,就是逻辑结构;一种是物理层的,即数据在计算机里面的存储形式,就是存储结构

逻辑结构分为线性结构和非线性结构,线性结构有线性表、栈、队列、串及数组;非线性结构有树、图。

存储结构分为顺序、链式、索引和散列的结构。

下图是数据结构以及在java里的实现举例:

二、算法

  • 是计算机对数据的运算,包含检索、排序、插入、删除、修改等运算类型。

评价算法好坏的指标就是复杂度,有时间复杂度和空间复杂度(计算所需内存空间)。

  • 复杂度

时间复杂度(Time complexity),一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。算法的时间复杂度是指执行算法所需要的计算工作量。

最坏情况下的时间复杂度叫最坏时间复杂度,一般我们说的时间复杂度就是指最坏情况的时间复杂度,因为最坏的时间复杂度是一个算法的运算时间的上限,不会比其更长,最坏情况下的时间复杂度为T(n)=O(n),它表示对于任何输入实例,该算法的运行时间不可能大于O(n)。

为了进一步说明算法的时间复杂度,我们定义3个符号:

O,表示时间复杂度的上限,就是最坏情况,比如T(n)=O(n)

Ω,表示时间复杂度的下限,就是最好情况,比如T(n)=Ω(n)

θ,表示精确阶(最好和最坏是同一个阶),比如T(n)=θ(n)

常见的时间复杂度有:

1.常数阶O(1),若算法中语句执行次数为一个常数,复杂度就是最简单的O(1),举例如下:

 int a=1; 
 a=0;
 a=2;

 - > 时间复杂度:  T(n)=O(1)

2.对数阶O(log2n)(以2为底n的对数),

什么是对数?
a ^x = N,(a>0 && a!=1),那么x即是以a为底,N的对数,记作
其中a叫做对数的底数,N叫做真数

 int num = 1;//执行1次
 int n = 100;//执行1次

 while (num < n) {
     num = num * 2; // 执行n/2次
     System.out.println("num="+num); //执行1次
 }

- > 时间复杂度:  T(n)=O(log2n)

3.线性阶O(n) :

int n=10;x=0;
for (int i=0 ;i<n ;i++){
    x++;
}

 - > 时间复杂度:  T(n)=O(n)

4.线性对数阶O(nlog2n), 对数阶再乘以一个线性阶:

int n=10;x=0;
for (int i=0;i<n;i*=2){
    for (int j=0; j<n; j++){
        x++;
    }
}

 - > 时间复杂度:  T(n)=O(n * log2n) =O(nlog2n)

5.平方阶O(n²),2层循环嵌套,每一层都执行n次,属于乘方关系

int n=10;x=0;
for (int i=0 ;i<n ;i++){
    for (int j=0; j<n; j++){
        x++;
    }
}

 - > 时间复杂度:  T(n)=O(n²)

6.立方阶O(n^3), 逻辑同上,就是再多一层嵌套循环

int n=10;x=0;
for (int i=0 ;i<n ;i++){
    for (int j=0; j<n; j++){
        for (int k=0; k<n; k++){
            x++;
        }
    }
}

 - > 时间复杂度:  T(n)=O(n³)

7.k次方阶O(n^k), 同上 , - > 时间复杂度:  T(n)=O(n^k)

8.指数阶O(2^n),2的n次方

9.阶乘阶(O(n !)) ,n的阶乘


空间复杂度(Space complexity),

空间复杂度是指算法在计算机内执行时所需存储空间的度量。记作:

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

算法执行期间所需要的存储空间包括3部分:

  • 算法程序所占的空间;

  • 输入数据所占的存储空间;

  • 算法辅助变量所需的额外空间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值