首页 > 其他分享 >数据结构·基本概念

数据结构·基本概念

时间:2024-06-04 16:26:24浏览次数:24  
标签:线性表 int 复杂度 元素 基本概念 -- 数据结构 顺序存储

Data Structure Notes

Author : "blueflylabor"
Version : 1.0
Refresh Date 2020.11.26
Description : 
Just record and review some points about Data Structure.
Have mistakes that please correct it yourself.

数据结构的基本概念

1.数据

2.数据元素:

数据的基本单位,一个数据元素可有若干个数据项构成,数据项是不可分割的最小单位

3.数据类型

4.抽象数据类型(ADT[Abstract Data Type]):

数学模型在计算机的一种实现,包括数据对象、数据关系、基本操作,如建立一个有限状态机模型

5.数据结构:数据元素之间的关系称之为结构,数据结构包括三方面:逻辑结构、存储结构、数据运算(程序=算法+数据结构)

6.逻辑结构:数据间的逻辑关系,与数据存储独立,分为线性结构和非线性结构

graph TD 逻辑结构--线性结构 逻辑结构--非线性结构 线性结构--一般线性表 线性结构--受限线性表 线性结构--线性表推广 受限线性表--栈和队列 受限线性表--串 线性表推广--数组 线性表推广--广义表 非线性结构--非线性表 非线性表--集合 非线性表--树形结构 非线性表--图形结构 树形结构--一般树 树形结构--二叉树 图形结构--有向图 图形结构--无向图

7.物理结构:数据元素的表示以及关系的表示,主要有:顺序存储、链式存储、索引存储、散列存储

8.算法评估

(1)特性:有穷、确定、可行、输入、输出

(2)时间复杂度:衡量算法随问题规模的增大,算法执行的时间增长的快慢

T(n)=O(f(n)),f(n)为算法运算频度,一般采用最坏情况下的时间复杂度

计算方法:取算法时间增长最快的函数项,忽略其系数

a加法规则:

$$
T(n)=T_1(n)+T_2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))
$$

多项式相加,只保留最高阶的项,且系数变为1

b乘法规则:

$$
T(n)=T_1(n)*T_2(n)=O(f(n))*O(g(n))=O(f(n)*g(n))
$$

多项式相乘,都保留

从左到右性能依次降低:

$$
O(1)<O(log_2n)<O(n)<O(nlog_2n)<O(n^2)<O(n^3)<O(2^n)
$$

单循环体型:

例题1:计算下列程序的时间复杂度

```C++
int i,sum	//执行1次
sum=0	//执行1次
for(i=0;i<=n;i++)//int i=0执行1次,i<=n执行n+2次,i++执行n+1次
	sum+=i;	//执行n+1次
```

时间分析: 该算法执行了3n+6个语句。 假设每个语句执行时间一致,均为常数t。则总时间 
$$
T=(3n+6)*t
$$
随着问题规模n的增大,总时间的增长率与n的增长率一致,所以复杂度为
$$
O(n)
$$


结论: 

 复杂度是关于增长率的,所以可以直接忽视常数项

  一般可以直接关注循环段基本操作语句

  ```c++
  sum+=i;
  ```
 
  

 的执行次数

例题2:

int sum,i;
sum=0;
for (i = 1;i <= n;i=2*i){
	sum=sum+i;

时间分析:

i 取值:1,2,4,8…
满足条件:2^

标签:线性表,int,复杂度,元素,基本概念,--,数据结构,顺序存储
From: https://www.cnblogs.com/blueflylabor/p/18231129

相关文章

  • 数据结构·查找算法
    查找1.顺序查找一般表(1)代码typedefstruct{ElemType*elem;inttableLen;}SSTable;intsearchSeq(SSTableST,ElemTypekey){ST.elem[e]=key;//设置哨兵for(inti=0;i<ST.tableLen;i++)returni;//存在返回,不存在返回1}(2)设......
  • 数据结构·查找算法
    查找1.顺序查找一般表(1)代码typedefstruct{ElemType*elem;inttableLen;}SSTable;intsearchSeq(SSTableST,ElemTypekey){ST.elem[e]=key;//设置哨兵for(inti=0;i<ST.tableLen;i++)returni;//存在返回,不存在返回1}(2)设......
  • 强化学习(一) 基本概念和赌博机问题
    文章目录什么是强化学习强化学习的两个基本特征强化学习的其它特征强化学习不同于有监督学习强化学习不同于无监督学习强化学习不同于进化方法强化学习的独特挑战强化学习典例强化学习的要素强化学习的适用范围强化学习学术主线解决强化学习问题的一般框架赌博机两个影......
  • 数据结构第四篇【再谈泛型】
    数据结构第四篇【再谈泛型】泛型泛型类的使用泛型的上界泛型方法通配符通配符上界通配符下界......
  • 【第二节】C/C++数据结构之线性表
    目录一、线性表基本说明1.1基本概念1.2抽象数据类型1.3存储结构1.4插入与删除的区别1.5顺序存储和链式存储的优缺点二、链表2.1基本概念2.2抽象数据类型2.3单链表的定义2.4单链表的基本操作2.5单链表模板形式的类定义与实现三、单向循环链表四、双链表......
  • Java数据结构-delayQueue-优先队列--信号量
    原编辑链接:https://www.yuque.com/zhaozhaozhaozhao-khkij/lp7g2t/blwysxg3ygb00dw6?singleDoc#《3delayqueue》Queue问题单端队列和双端队列,分别对应的实现类是哪个?○Java中的单项队列queue是用链表实现的,Queue本身是一个接口,继承了Collection集合;○双端队列(De......
  • 数据结构单链表的前插法实现
    单链表的前插法实现可以通过以下步骤进行:创建一个新的节点,并将要插入的元素存储在新节点的数据域中。将新节点的指针域指向原链表的头节点。将原链表的头节点指向新节点。具体代码实现如下所示:classNode:def__init__(self,data):self.data=data......
  • 数据结构学习笔记-希尔排序
    希尔排序的算法设计与分析问题描述:设计并分析希尔排序算法【算法设计思想】选择一个初始的增量序列,通常选择数组长度的一半(n/2)作为初始增量。对于每个增量,将数组分割成若干个子序列,每个子序列的长度等于当前增量。例如,如果增量为5,那么数组将被分割成长度为5的子序列。对......
  • 【Java数据结构】详解Stack与Queue(一)
    ......
  • 数据结构复习笔记5.1:树
            之前,我们介绍的所有的数据结构都是线性存储结构。本章,我们所介绍的树的结构是⼀种⾮线性的存储结构。存储的是具有⼀对多的关系的数据元素的集合。1.树的定义树是由n(n>=0)个结点组成的有限集,n=0时为空树,且对于非空树:有且仅有一个特定的称为根的结点;当n>1......