算法和数据结构学习笔记

算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了。


一、数据结构和算法绪论——说说数据结构

程序设计 = 数据结构 + 算法

再简单来说,数据结构就是关系,也就是数据元素相互之间存在的一种或多种特定关系的集合。


数据结构的分类:传统上,我们把数据结构分为逻辑结构和物理结构。

其中的逻辑结构是指数据对象中数据元素之间的相互关系,也是我们最需要关注和讨论的问题。而物理结构是指数据的逻辑结构在计算机中的存储形式,我们不用去关心。


逻辑结构的分类:总共有四大逻辑结构。

集合结构:集合结构中的数据元素除了同属于一个集合外,他们之间没有其他任何关系。

线性结构:线性结构中的数据元素之间是一对一的关系。

树形结构:数据元素之间存在一种一对多的层次关系。

图形结构:数据元素是多对多的关系。


说完逻辑结构,再来说说物理结构。物理结构研究的是如何把数据元素存储到计算机的存储器中。

数据元素的两种存储结构形式:顺序存储、链式存储。

其中的顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。

而链式存储结构呢:他适用于那些时常要变化的结构,顺序结构在这种情况下是力不从心的,只能让链式结构来露面了,相比顺序结构灵活的多。

那很显然了,链式结构中的数据元素存储关系并不能反映其逻辑关系,因此就需要用一个指针存放数据元素的地址,这样子通过地址就可以找到相关联数据元素的位置啦。


二、浅谈算法

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

晕菜了吧?哈哈,更直白的讲,算法就是你泡妞的技巧和方式。

算法的五个特征:输入、输出、有穷性、确定性和可行性。

算法设计的要求:正确、可读、健壮、时间效率高(速度快)、存储量低。


正确性的四个层次:

算法程序没有语法错误。

算法程序对于合法输入能产生满足要求的输出。

算法程序对于非法输入能产生满足规格的说明。

算法程序对于故意刁难的测试输入都有满足要求的输出结果。


健壮性:当输入数据不合法时,算法也能做出相关处理,而不是产生异常、崩溃或莫名其妙的结果。



三、算法效率的度量方法

经过总结,一个高级语言编写的程序在计算机上的运行时间取决于下列因素:

算法的策略、方案

编译器编译产生的代码质量(软件)

问题的输入规模(输入量的多少)

机器执行指令的速度(硬件)

抛开软硬件因素,那么算法效率就取决于算法所采用的策略方案以及问题的规模。

经过总结,在判断算法效率时,主要关注主项(最高阶项)的阶数。



四、时间复杂度

时间复杂度:语句的总执行次数T(这里的执行次数反映在计算机里就是时间了)与问题规模n的关系。最优算法当然就是时间增长最慢的那个。

五、时间复杂度分析、空间复杂度

常数阶O(1) < 对数阶O(logn) < 线性阶O(n) < nlogn阶O(nlogn) < 平方阶O(n^2) < 立方阶O(n^3) < 指数阶O(2^n) < 阶乘阶O(n!)

空间复杂度:所占空间字节数关于问题规模的函数。














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值