数据结构学习-绪论01-2

286 阅读4分钟

        今天学到一句非常励志且优美的句子:心之所向,素履以往,生如逆旅,一纬以航。分享共勉。

-------------------------------------------------------------------------------------------------

算法初步

定义:对特定问题求解方法(步骤)的一种描述,是指令的有限序列,其中每条指令表示一个或多个操作。

特性

1.有穷性:一个算法总是在执行有穷步之后结束,且每一步在有穷时间内完成。

2.确定性:算法的每一条指令必须有确切的含义,不存在二义性,且只有一个入口和一个出口。

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

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

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

描述:多种方法描述,自然语言、形式语言、计算机程序设计语言。

算法与程序的区别:计算机程序是对一个算法使用某种程序语言的具体实现。算法必须可终止意味着不是所有的计算机程序都是算法。


算法设计的要求:

1.正确性:算法应该满足具体问题的需求。

2.可读性:算法应容易供人阅读和交流。可读性好的算法有助于对算法的理解和修改。

3.健壮性:具有容错处理。当非法输入或错误数据时,算法能适当的做出反应或做出处理,而不会产生莫名其妙的结果。

通用性:具有一般性,算法处理的结果对于一般的数据集合都成立。

4.效率与存储量的需求:效率是指算法的执行时间;存储量需求是指算法执行过程中所需要的最大存储空间,一般这两者与问题的规模有关。


算法效率度量:

算法执行时间需通过依据该算法编制的程序在计算机上运行所消耗的时间来度量,两种方法:

事后统计:计算机内部执行的时间和实际占用空间的统计。

问题:必须先运行依据算法编制的程序,依赖的软硬件环境,容易掩盖算法本身的优劣,没有实际价值。

事前分析:求出该算法的一个时间界限函数。

因素:依据算法选用何种策略;问题的规模;程序设计的语言;编译程序所产生的机器代码的质量;机器执行指令的速度。

撇开软硬件等有关部分的因素,可以认为一个特定算法“运行工作量”的大小,只依赖问题的规模(通常用n表示),或者说,他是一个问题规模的函数

时间复杂度:

定义:算法中基本操作重复执行的次数是问题规模n的某个函数,其时间度量记作T(n)=O(f(n)),称作算法的渐进时间复杂度,简称时间复杂度。一般常用最深层循环内的语句中原操作的执行频度(重复的次数)来表示。

表示时间复杂度的阶

O(1)常量时间阶 O(n)线性时间阶

O(logn)对数时间阶 O(nlogn)线性对数时间阶

O(nk)k>=2,k次方时间阶

多项式时间算法的时间复杂度:

O(1)< O(log2n)< O(n)< O(nlog2n)<O(n2)< O(n3)

指数时间算法的时间复杂度:

O(2n)<O(n!)<O(nn)

空间复杂度

定义:算法编写成程序后,在计算机中运行时所需存储空间大小的度量。记作:S(n)=O(f(n)),n为问题的规模和大小。

存储空间包括三个方面:1.指令常数变量所占用的存储空间;2.输入数据做占用的存储空间;3.辅助(存储)空间。

一般算法的空间复杂度是指辅助空间

一维数组a[n]空间复杂度为:O(n)

二维数组a[n][m]空间复杂度为:O(n*m)

-------------------------------------------------------------------------------------------------

   看完点个赞吧,给别人点赞,会让自己觉得自己是一个善良的人。

   关注一下,让自己觉得自己是一个友善的人,开放包容的人,人生会不经意间美妙一点点。

   我的收获期待与你分享,希望一同成长!