数据结构与算法-揭秘

什么是数据结构?

字面意思就是研究数据的一种方法,就是研究数据在程序中组织的一种方法。数据结构就是,元素与元素有一种或者多种关系的集合,在软件界有一种比较普片的公式就是程序 = 数据结构 + 算法。

常用的有哪些数据结构?

(1)集合(Set)   和数学的集合一样,具有唯一性,确定性,无序性。
(2)线性结构         典型的数据库二维表,一对一的关系。
(3)树形结构         就有一对多的关系,族谱就是典型的树形结构。
(4)图形结构        具有多对多的关系,典型的就是交通路线图。

什么是算法?

字面意思就是计算的方法,解决问题的方案,就是对莫一特定问题求解过程的一种描述,是指令的有限序列。用源代码体现,算法就是编程的体现。一个算法必须要具备以下几个特征:
(1)有穷性。算法在执行有穷步骤之后结束,不会永远的执行下去,这样就成死循环了。
(2)确定性。算法执行每一步都具有确切的含义,无二义,即每次输入相同,输出必然相同。
(3)输入。一个算法必然有一个或者多个输入,不然算法就没什么意思了。
(4)输出。一个算法有一个或者多个输出,算法就是为了得到输出的数据,没有输出的数据算法,叫不上算法。
(5)能行性。算法中的每一步都可以通过已经实现的基本运算的有限次运行来实现。这与有穷性息息相关。

怎样是评价一个算法的好坏?

(1)正确性,(2)健壮性,(3)可读性,(4)运行时间,(5)占用空间。
  前三个都比较好理解,与程序相关的就是运行时间和占用空间了。而随着硬件越来越贵,我们可以增加硬件设备,面对海量的数据,我们尤其关心的就是运行时间了,这此时,计算机运行时间大概由下面几个条件来决定了。
         1、硬件条件。包括所使用的处理器的类型和速度(比如,使用双核处理器还是单核处理器) 、可使用的内存(缓存和 RAM)以及可使用的外存等。 
         2、实现算法所使用的计算机语言。实现算法的语言级别越高,其执行效率相对越低。 
         3、所使用的语言的编译器/解释器。一般而言,编译的执行效率高于解释,但解释具有更大的灵活性。 
         4、所使用的操作系统软件。操作系统的功能主要是管理计算机系统的软件和硬件资源,为计算机用户方便使用计算机提供一个接口。各种语言处理程序如编译程序、解释程序等和应用程序都在操作系统的控制下运行。

       评价运行时间就是一个算法时间复杂度,  一个算法的时间复杂度(Time Complexity)是指该算法的运行时间与问题规模的对应关系。

算法中的基本操作一般是指算法中最深层循环内的语句,因此,算法中基本操作语句的频度是问题规模n的某个函数f(n),记作:T(n)=O(f(n))。其中“O”表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,或者说,用“O”符号表示数量级的概念。  这些 都只是一些理论的概念,我们这里用计时器来证明这个理论概念。

如:

①x=n; /*n>1*/ 
y=0; 
while(y < x) 

y=y+1; ① 

从理论上分析这是一重循环的程序,while 循环的循环次数为 n,所以,该程序段中语句①的频度是 n,则程序段的时间复杂度是 T(n)=O(n) 。

评价运行时间就是一个算法时间复杂度,  一个算法的时间复杂度(Time Complexity)是指该算法的运行时间与问题规模的对应关系。

算法中的基本操作一般是指算法中最深层循环内的语句,因此,算法中基本操作语句的频度是问题规模n的某个函数f(n),记作:T(n)=O(f(n))。其中“O”表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,或者说,用“O”符号表示数量级的概念。  这些 都只是一些理论的概念,我们这里用计时器来证明这个理论概念。

如:

①x=n; /*n>1*/ 
y=0; 
while(y < x) 

y=y+1; ① 

从理论上分析这是一重循环的程序,while 循环的循环次数为 n,所以,该程序段中语句①的频度是 n,则程序段的时间复杂度是 T(n)=O(n) 。

由此证明,其中算法的时间复杂度确实是接近于O(n²)

③x=n; /*n>1*/ 
y=0; 
while(x >= (y+1)*(y+1)) 

y=y+1; ① 
}

这是一重循环的程序,while 循环的循环次数为 n,所以,该程序段中语句①的频度是 n,则程序段的时间复杂度是 T(n)=O(√n) 。



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