数据结构与算法 基础概述 入门必备!

一、数据的逻辑结构
(1)集合结构
结构中的数据元素之间除了同属于一个集合的关系外,再无任何其它关系。

(2)线性结构
结构中的数据元素之间存在着一对一的线性关系。

(3)树形结构
结构中的数据元素之间存在着一对多的层次关系。

(4)图状结构
结构中的数据元素之间存在着多对多的任意关系。

二、数据的存储结构
(1)顺序映像—>顺序存储
借助存储其中相对位置来表示数据元素之间的逻辑关系(与数组相似)

(2)非顺序映像—>链式存储
借助指针表示数据元素之间的逻辑关系(与链表相似)

逻辑结构与存储结构的关系为:存储结构是逻辑关系的映像与元素本身的映像,是数据结构的实现,逻辑结构是数据结构的抽象。

三、算法的概念

 数据结构+算法=程序

1.有穷性
对于任意一组合法的输入值,在执行有穷步骤之后一定能结束,即算法中的每一个步骤都能在有限的时间内完成。

2.确定性
算法的每一步必须是确切定义的,使算法的执行者或阅读者都能够明确其含义及如何执行,并且在任何条件下,算法都只有一条执行路径。

3.可行性
算法应该是可行的,算法中的所有操作都必须足够基本,都可以通过已经实现的基本操作运算有限次实现。

4.有输入
一个算法应该有零个或者多个输入,他们是算法所需的除湿量或被加工的对象的表示。有些输入量需要在算法执行过程中输入,而有的算法表面上可以没有输入,实际上已被嵌入算法之中。

5.有输出
一个算法应该有一个或者多个输出,它是一组与输入有确定关系的量值,是算法进行信息加工后的结果,这种确定关系即为算法的功能。

四、算法的评价标准
1.正确性
正确性指算法能满足具体问题的要求,即对任何合法的输入,算法都会得出正确的结果。

2.可读性
可读性指算法被理解的难易程度。算法主要是为了人阅读与交流,其次才是为了计算机执行,因此算法应该更易于人的理解。另一方面,晦涩难读的程序易于隐藏较多错误而难以调试。

3.健壮性
健壮性又称鲁棒性,即对非法输入的抵抗能力。当输入数据非法时,算法应当恰当地做出反应或者进行相应处理,而不是产生奇怪的输出结果。并且,处理出错的方法不应是中断程序的执行,而应是返回一个表示错误或者错误性质的值,以便在更高抽象层次上进行处理。

4.高效率与低存储量需求
效率通常指的是算法的执行时间;存储量指的是算法在执行过程中所需的最大存储空间,两者都与问题的规模有关。尽管计算机的运行速度提高很快,但是这种提高无法满足问题规模加大带来的速度要求。所以追求高速算法仍然是必要的。相比起来,人们会更多滴关注算法的效率,但这并不因为计算机的存储空间是海量的,而是由人们面临的问题的本质决定的。二者往往是一对矛盾,常常可以用空间换时间,时间换空间。

五、算法性能分析
算法效率的度量,是评价算法优劣的重要依据。一个算法的复杂性高低体现在运行该算法所需要的计算机资源的多少上面,所需的资源越多,我们就说这个算法的复杂性更高;反之,所需的资源越低,则该算法的复杂性越低。最重要的计算机资源是时间和空间资源。因此,算法的复杂性有时间复杂性和空间复杂性之分。

(1)时间复杂度
一般情况下,算法中基本操作重复执行的次数是问题规模n某个函数f(n),算法的时间度量记作T(n) = O(f(n)),它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的时间复杂度。

语句频度:
语句频度是指该语句在一个算法中重复执行的次数。

eg:
(1)x =x+1//时间复杂度为O(1),称为常量阶。
(2)for(i =1;i<=n;i++) x=x+1//时间复杂度为O(n),称为线性阶。
(3)

for(i =1;i<=n;i++) 
         for(j =1;j<=n;j++)
             x=x+1//时间复杂度为O(n方),称为平方阶。

随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率不断下降。

(2)空间复杂度
与时间复杂度相似,空间复杂度是指算法在计算机内执行时所需存储空间的度量。记作:

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

算法在执行期间所需要的存储空间包括三个部分:
(1)算法程序所占的空间

(2)输入的初始数据所占的存储空间

(3)算法执行过程中所需要的额外空间

若输入数据所占空间之取决于问题本身,和算法无关,则只需要分析除输入和程序之外的辅助变量所占的额外空间

若所需额外空间相对于输入数据量来说是常数,则称此算法为原地工作。

若所需存储量依赖于特定的输入,则通常按最坏的情况考虑。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章