数据结构学习(一)

数据结构,是相互之间存在一种或多种特定关系的数据元素的集合,数据结构可以分为逻辑结构和物理结构

逻辑结构:是指数据对象中数据元素之间的相互关系
1.集合结构
集合结构中的数据元素除了属于同一个集合外,没有任何关系
2.线性结构
线性结构中的数据元素是一对一的结构关系
3.树形结构
树形结构的数据元素是一对多的结构关系
4.图形结构
图形结构的数据元素是多对多的结构关系

物理结构:是指数据的逻辑结构在计算机中的存储方式
1.顺序存储
把数据元素存放在地址连续的存储单元中,数据间的逻辑关系和物理关系相同
2.链式存储结构
把数据元素存放在任意的存储单元,可以是连续或不连续的,用一个指针存放数据元素的地址

算法,是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作

算法具有五个特性,输入、输出、有穷性、确定性和可行性
1.输入输出
算法必须要有0个或者多个输入,算法需要有0个或多个参数
算法必须要有1个或多个输出,算法必须要有结果输出
2.有穷性
算法在执行有限的步骤后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成
3.确定性
算法的每一步都具有确定的意义,不会出现二义性
在一定的条件下,相同的输入只能有唯一的结果
4.可行性
算法的每一步必须是可以执行的,可以通过执行有限的次数完成

算法的设计要求
1.正确性
首先你的算法必须正确,具有输入、输出,能正确处理需求,并得出正确的答案
2.可读性
算法必须要便于阅读、理解和交流
3.健壮性
输入数据不合法时,依然可以正常执行,而不是产生未知的结果
4.时间效率高和存储量低
花最少的存储,用最短的时间,干同样的事儿
这就是算法的思想所在

关于算法效率
算法效率统计分为事后统计和事前分析估算
1.事后统计
通过设计好的程序和数据,观察运行时间,进行比较,有多种缺陷,不予采纳
2.事前分析估算
一个程序的运行时间,依赖于算法的好坏和问题的输入规模

在这里引入算法时间复杂度定义
在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。
算法的时间复杂度,也就是算法的时间量度,记做:T(n)= O(f(n))
它表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度
f(n)是问题规模n的某个函数
随着n的增大 T(n)增长最慢的算法称为最优算法
大写O内表示的是算法的执行次数

关于推导方法
1.用常数1取代运行时间中所有的加法常数
2.在修改后的运行次数函数中,只保留最高阶项
3.如果最高阶项存在且不是1,则去除与这个项相乘的常数

这样得到的结果就是大O阶

$sum = 0;  //执行一次
$n = 100;  //执行一次
$sum = (1+n)*n/2;  //执行一次
echo $sum; //执行一次

这个算法的运行次数是 f(n) = 4 根据推导方法,先把4换成1
然后寻找最高阶项,这个算法没有最高阶项,所以这个算法的复杂度是
O(1),也被称为常数阶

for ($x=0; $x<=n; $x++) {    //执行n次
    echo $x;
} 

这个算法的运行次数是f(n)= n 根据推导方法,没有常数,所以这个算法的复杂度是O(n),也被称为线性阶

$count = 1;
while($count<n){   //执行log2n次
    $count = $count * 2;
}

当多少个2相乘大于等于n时 这个算法结束,所以这个算法的复杂度为O(log2n),也被称为对数阶

for ($x=0; $x<=n; $x++) {    //执行n次
    for ($y=0; $y<=n; $y++) {    //执行n次
        echo $y;
    } 
} 

根据推导方法,没有加法常数不予考虑第一条,只保留最高阶项n*n 也就是n的二次方,那么这个算法的复杂度就是O(n * n)

一般在没有特殊说明的情况下,算法的时间复杂度,说的都是最坏时间复杂度,也就是消耗时间最多的情况
比如从n个数里找1 个数,有可能第一个就找到了,也有可能第n个才找到
默认以第n个找到的时间复杂度为准

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值