数据机构绪论 大O记号,算法,数据结构,计算

数据结构绪论笔记

computer science is actually is computing science, what we are aiming for is how to calculate fast and much more safer way.
也就是说计算机科学其实是研究计算的科学,我们的目标是怎样算的更加快而且安全。

计算的定义

计算是指借助某种工具,遵照一定规则,以明确而机械形式的进行。

   **现在我们知道了我们的目标是什么,也就是计算,通过计算的定义,我们知道了我们必须借助某种工具(就是计算机),按照一定的规则(也就是算法)以明确而机械形式的(计算机作为机器的特性,从来不叫累,不叫苦的特性)来达到我们的目的(计算)。**

**我们有了两个问题,第一个,用什么样的方法来计算?因此,算法出现了。
怎么样储存和运用这些为了解决问题而使用的数据?因此数据结构出现了。

算法的定

an algorithm is an unambiguous specification of how to solve a class of problems. (from wiki)
也就是解决问题的不含糊的的计算问题的方法。

数据结构的定义

a data structure is a collection of data values, the relationships among them, and the functions or operations that can be applied to the data.

因此这里我们可以写出一个公式
**Computing=(Data structure+Algorithm)*efficiency;
我们知道了计算取决于那些要素,下一步就是要弄出一个体系去测量判定这些因素的好坏算法和人类似,有有点,缺点,需要综合的评价,实验统计是最直接的方法,但不足以准确反映算法的效率。不同的算法有不同的输入规模,不同的类型输入,
即使是同一个算法,有不同的程序员,不同的编译器,不同的语言,不同的编译器,不同的硬件提示结构,操作系统等等。
为了客观的给出评价,我们需要抽象出一个
理想**的平台或模型,不再依赖于上述种种具体的因素,在头脑中做出一个理想的平台。简单的解释的话,我们在高中的时候都学过物理,伽利略,牛顿等人做有关力和运动的实验的时候,会忽略摩擦力,在头脑中造出一个理想的没有摩擦力的环境来研究力对运动的作用,这里我们也采用这种方法。这种理想的模型包括图灵机模型和RAM模型。

图灵机

**

RAM模型


在这些模型中算法的运行时间通过算法需要执行的基本操作次数来确定。这样的话,可以不用考虑运行环境了,也就是不需要依赖于CPU,而是通过CPU所需执行的基本操作次数。将时间转换成运算次数的统计,将测度聚焦在算法本身,这种思维很巧妙,不实际反而更本质。

大O记号

    我们讨论的RAM模型和图灵机是一个公正的尺子,那O记号是尺子上的刻度,有意思的是这里并不需要一味的强调这种刻度的精细程度,而是而是定性和定量之间达到一定的着折中。使得我们更短的时间抓住DSA性能方面主要的要害和主要的方面。大O记号好的方面可以同过一首诗表达出来,“好读书不求甚解”,这里所说的不求甚解不是说必去求解,而是不要拘泥于问题的琐碎细节,换而言之,我们考察DSA的时候应该更多的考虑它的潜力,就是在更大规模问题的时候它应该是如何的,也就是看主流,回到我们的问题,在问题规模足够大的时候,计算成本如何增长?也就是计算的时间,就是需执行的基本操作的次数。


用一张图来表示的话,横轴表示问题的规模,纵轴表示响应的计算成本,DSA可以得到这样的曲线, 不是看它局部的变化趋势,而是看它长远的变化趋势。
我们可以采用大O记号来从形式上简化度量时间成本的T(n)的表示,也就是说在满足一些条件以后,我们可以在big-O的意义下将T(n)表示为一个看起来更加简单的f(n)函数。
条件如下:

我们存在一个预先确定的一个常数c,而确实当n足够大以后我们发现T(n)绝对不会超过F(n)的c就是常数倍。假设我们已经得到了T(n)表达式如上,像通常一样看的比较复杂,因此我们可以采用刚才所说的办法不断简化,因为这里是小于号,因此可以不断地放大,把(n+2)的2变成n,然后得到了右边的那个式子,然后把4变成n,则得到了右边的那个式子,最终把6变成n,则得到了6·n的1.5次方,其实常数是无所谓的,所以我们可以把这个6进一步的抹掉,从而通过在外面再加一个big-O记号,来完成这样的一个估计。这个例子可以告诉我们经过这样的变换以后,big-0内用来近似的那个函数f(n)将会更加的简简捷,而且依然能狗反应准确的增长趋势。
这里可以更加理解前面讲的"好读书不求甚解"了,我们想要的是主流,非主流的那些常数项系数和低次项都可以忽略不计,使得主流的信息能够突出出来。这里用一个图来表示,这个图是在原来的那个基础上增加了一个big-o的这样一条虚线。我们可以从这条图上可以看出来Big-0所设计和用意。

也就是说big-O 是在一定的常数C的情况下是T(n)的上界。

刻度

一些常用的刻度用图来表示如下:

猜你喜欢

转载自www.cnblogs.com/Abudlla/p/9313523.html