数据结构开篇-基础

               大学时候,就对数据结构,敬而远之,不知道,是老师的问题,还是自己的愚钝,反正一直也不喜欢这门课程。工作的几年,还好,基本也没怎么用,也许是得过且过吧,一直也没怎么关注它。直到最近,感到自己不会的东西,越来越多,一直想看这,又想学那,也许,真像别人说的,我们就像一个中心,在计算机的空间中,行走,当你越走越远的时候,以你行走的距离为半径,画一个圆,你会发现,当你行走得越深,这个圆会越来越大,也就是,你会的东西,越多,不会的东西也就越多。这个有点想武功秘籍里面的,最上上层的武功,就是无招胜有招。把一切都忘掉,才依然学会了一切。呵呵。

              最近,一直没时间来更新博客,其实说没时间,不如说是自己懒惰了,特别是冬天来了,喜欢躺在床上看书,不喜欢,敲键盘。但我知道这样是不行的。最近喜欢上了曾国藩的传记,以及他写的家书。如是乎,将手机中的所有的MP3,都换成他的评书。才听了三章,没有一日不读书,心中的一份恬静,最不得的两个字,傲和惰。觉得还是蛮有道理的。当然有道理,不然怎么会是曾国藩了,呵呵。

              闲话打住,论正题了。目前的学习计划,有所更新,Direct3D,还是有时间在学习吧,目前还是聚集在Windows驱动开发,数据结构上,比较远的计划是C++,Javascript,HTML5,Python,设计模式等。

             数据结构,我们可以分开来理解。

             数据:用来表示客观事物的一种符号,比如,树中的一个棋盘格局,图中的一个圆圈,或者一种状态。

             结构:表示数据之间的一种特有的关系,比如集合,线性结构,树形结构,图状结构,网状结构等。

             Data_Structure = (D,S).

             数据结构在计算机中的表示,称为数据的物理结构,又叫存储结构,包括数据元素的表示,和关系的表示。

            数据元素,一般我们称为结点,或者数据域。

            数据元素之间的关系,一般分为顺序存储,和非顺序存储,又叫做,顺序存储结构和链式存储结构。

            顺序存储:一般是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。

            链式存储:借助元素存储地址的指针,来表示数据元素之间的逻辑关系。

            我们一般定义抽象的数据类型:

              ADT{

                        数据对象:

                        数据关系:

                        基本操作:

                       }

              数据结构一般和算法都是分不开的。

             算法:就是对特定问题求解步骤的一种描述,它是指令的有限序列。它含有如下特性:

             1,有穷行:一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。

             2,确定行:算法中每一条指令必须有确切的含义。并且,在任何条件下,算法只有唯一的一条执行路径,即对相同的输入,只能得出相同的输出。

             3,可行性:一个算法是能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。

             4,    输入: 一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。

             5,    输出:一个算法有一个或者多个输出,这些输出是同输入有着某些特定关系的量。

            设计一个好的算法的目标是,正确性,可读性,健壮性,效率和低存储量需求。

            算法效率的度量:

           一个算法是由控制结构,(顺序,分支和循环 这3种)和原操作(指固有数据类型的操作)构成的,则算法的时间取决于两者的综合效果。为了便于比较同一问题的不同算法,通常的做法是,从算法中选取一种对所研究的问题(或算法类型)来说是基本操作的原操作,以该基本操作重复执行的次数作为算法的时间量度。

           一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数  f(n),算法的执行量度记作:

                                                                                    T(n) = O ( f(n) )

            它表示随问题的规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称做算法的渐进时间复杂度,简称时间复杂度。

            例如

             (a) { ++x;s = 0}

             (b) (i = 1; i <= n;++i){ ++x; s+=x;}

             (c) for(j = 1; j <= n; ++k)

                       for(k = 1; k < = n; ++k){++x; s+= x;}

             含基本操作的“x增1“的语句的频度分别为1,n和n平方,所以时间复杂度为O(1),O(n),O(n2),分别记作,常数阶,线性阶,和平方阶,算法还可能呈现的时间复杂度有对数阶O(log n),指数阶,O(2的n次方)。

             算法的存储空间要求:

             类似于算法的时间复杂度,本书中以空间复杂度作为算法所需存储空间的量度 记作:

                                                                                   S(n) = O( f(n) )

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值