在看数据结构与算法时,我的心情无比忐忑,无比纠结.在程序或者说项目设计之初,架构师会进行概要详细
设计,抽象类,实现类,接口等等,然后对这些进行封装,设计算法(还有很多的步骤,可参考项目开发流程
),而算法的设计取决于数据逻辑结构,算法的实现取决于物理存储结构.什么是数据逻辑结构和物理存储结
构,一头雾水的我便开始了下面的学习:
数据结构(Data Structure):
数据结构包含逻辑结构和存储结构,以及对数据的各种操作(处理方法--算法 于 处理结果--数据类型
);它是具有特定关系的数据元素的集合.
数据类型的抽象定义:抽象的数据类型可以更容易的描述现实世界,如用线性表描述学生成绩表,用树或图描
述遗传关系或城市交通关系.定义格式如下:
ADT 抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}ADT 抽象数据类型名
逻辑结构包含集合结构,线性结构,树状结构和图状结构,常用的高效数据结构是数据表和树.
而物理存储结构则是指逻辑结构的物理镜像.存储结构又分为顺序存储结构和链式存储结构,物理存储结构是
数据结构在计算机中的表示.计算机中存储信息的最小单位是:位,8位是一个字节,两个字节是一个字符,
字节,字符或更多的二进制位可称为位串.在逻辑描述中,把位串称为元素或结点.
对于数据结构,以下简称DS(Date Structure)有:
DS=( D,S ) D是数据元素的集合,S是在D上的关系集合
另有:
P:( D,S )-----> M P是物理存储结构,M是存储区
数据结构DS的物理结构P对应于从DS的数据元素到存储区M(维护着逻辑结构S)的一个映射.
算法(Algorithm):
算法表示某一特定类型的问题求解;
具有5个特性:
1 有穷性,表示算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都在有穷的时间内完
成
2 确定性 表示算法中每一条指令必须有确切的含义
3 输入 Input
4 输出 Output
5 可行性 算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的
算法设计要求:
正确性、可读性、健壮性、效率与低存储量需求
在设计程序的时候,我们往往会考虑到性能的问题,同样的问题,如果不考虑性能,或许会有很多中解决方案
,但是在同样配置的计算机,得到同样的结果的程序,一个几秒,另一个的几分钟,相信大家的选择不言而喻
,那在设计之初,如何确定程序的性能呢?于是就有了时间复杂度(Time Complexity)的计算.
Time Complexity:
T(n)=0(f(n))
"0"表示随问题规模的增大,算法执行增长率和f(n)的增长率相同,'0'表示数量级.
实例:
ispass(int num[4][4]) {
int i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(num[i][j]!=i*4+j+1)
return 0;
return 1;
}
最好情况:T(4)=O(0) 最坏情况:T(4)=O(n*n)
还有另一个重要的标示就是存储空间需求,空间复杂度可以作为算法所需存储空间的量度.
记做:
S(n)=0(f(n))
若额外空间相对于输入数据量来说是常数,则称此算法为原地工作。
如果所占空间量依赖于特定的输入,则除特别指明外,均按最坏情况来分析。
还是有很多地方不懂,也不知哪里有错.望大牛多多指导啊