数据结构的笼统感知

一、概述
1.相关术语

A 数据
计算机内的所有的信息。mysql表中的所有记录组成数据。

B 数据元素
具有具体值的对象值。mysql表中的一条具体记录。

C 数据项
对象的属性值。mysql表中某一列的值。

数据对象
同一类型的所有对象集合。mysql中某一张表中所有记录。

数据结构
各个数据元素抽象出它们之间的关系,一对一?一对多?组成线性、树形等。然后进行操作。

F 数据类型:原子类型(bool、int),结构类型(struct)
   抽象数据类型(ADT):属性集合的类类型(属性 + 操作)。

2.数据结构的三要素(重点)
a.逻辑结构:集合,线性结构,树形结构,图形结构

b.物理结构:顺序存储,链式存储,索引存储,散列存储(哈希存储)
c.数据的运算:针对不同的存储结构,运算的实现的具体步骤也不同。

线性表属于逻辑结构,顺序表和链表属于物理结构。
对顺序表和链表相关操作具体步骤的实现是算法。
给出名称知道属于逻辑结构还是物理结构。

二、算法  
程序 = 数据结构 + 算法
1.什么是算法
算法是解决问题的具体步骤,是有限的确切的计算序列。

2.算法的五个特性
a.有穷性算法执行有穷步之后结束。不存在死循环。算法有穷,程序无穷(不关机就始终运行)
b.确定性:函数相同的输入一定得到相同的输出。每一步骤必须有确定的含义。
c.可行性:能够通过已实现的基本操作进行运算,如加减乘除。用纸笔经过有限次算也能算出,不一定非得代码。
d.输入:有0个或多个输入,
e.输出:一个或多个输出   x -> f  -> y

3.好的算法的特质
正确性:能够正确地执行预先规定的功能和性能要求。最基本的标准。
可读:算法易于人的理解;
健壮:有很好的容错性,输入非法数据处理。
高效率(快)和低存储(使用内存少):时间复杂度和空间复杂度分析。

三、衡量算法的效率
1.时间复杂度(重点)

A 如何评估算法的时间开销? 
事前预估算法的时间开销T(n)问题规模n的关系。   T(n) = O(n)  大O表示法
算法的时间复杂度取决于问题的规模,及待处理数据的初态。

B 如何计算算法的时间复杂度?
加法规则:取阶数最高的那个
乘法规则:嵌套循环  外层循环几次 内层循环几次
O(1) 常数阶 < O(logn) 对数阶 < O(n) 线性阶 < O(nlogn) < O(n^2) 平方阶 < O(n^3) < { O(2^n) < O(n!) <O(n^n) }
输出不同的问题规模,最好时间复杂度  最坏时间复杂度  平均复杂度:出现在任意位置的概率 

循环主体中的变量参与循环条件的判断,则变量的改变影响着循环次数。

设循环次数为t,当循环次数为t时,循环主体中的变量与问题规模的关系 为 循环条件。
可得循环次数 与 问题规模的关系。求出 t = T(n) = ? ; 用大O表示

循环主体中的变量与循环条件无关
直接累计循环次数,对非递归程序,如双层循环,直接累计循环次数。
递归程序,数学归纳法统计,每层递归参数的层级变化。如 n -> n-1 或者 n-> n/2(重点)

2.空间复杂度
程序代码本身占用的空间大小固定,与问题规模无关。算法运行所需的内存空间是固定的常量,S(n) = O(1),该算法可以原地工作。
算法所需的空间与问题规模大小有关。定义的变量与问题规模有关,
如传入的参数为n,为对应数组的下标,算法的空间复杂度为O(n)。二维数组[n][n],算法的空间复杂度为O(n方)。
函数调用导致内存空间增加,关于递归调用,调用的次数与传参有关,等于递归调用的深度
递归调用内开辟空间。

问题规模与函数调用影响空间复杂度。
https://blog.csdn.net/qq_15237565/article/details/77885311

3.sizeof与typedef
sizeof 运算符 返回数据类型 变量 所占内存字节数  
sizeof(变量)   sizeof 变量; sizeof(类型) 

typedef 给已存在的数据类型起别名
    typedef unsigned int u32;
    typedef struct _PERSON {
        char name[64];
        int age;
    } Person;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值