首先明确的一点就是计算机科学不仅仅是对计算机的研究,虽然计算机在科学发展的过程中发挥了重大的作用,但是它只是一个工具,一个没有灵魂的工具而已。所谓的计算机科学实际上是对问题、解决问题以及解决问题的过程中产生产生的解决方案的研究。例如给定一个问题,计算机科学家的目标是开发一个算法来处理该问题,最终得到该问题的解、或者最优解。所以说计算机科学也可以被认为是对算法的研究。因此我们也可以感受到,所谓的算法就是对问题进行处理且求解的一种实现思路或者思想。
二.如何形象化的理解算法?
-案例引导:
-意义所在:
-数据结构和算法思想的通用性异常的强大,在任何语言中都被使用,它们将会是我们编码生涯中伴随我们最长久利器(左膀右臂)。有一定经验的程序员最终拼的就是算法和数据结构。
-数据结构和算法思想也可以帮助我们拓展和历练编码的思维,可以让我们更好的融入到编程世界的角角落落。
三.什么是算法分析?
-案例引入:刚接触编程的学生经常会将自己编写的程序和别人的程序做比对,获取在比对的过程中会发现双方编写的程序很相似但又各不相同。那么就会出现一个有趣的现象:两组程序都是用来解决同一个问题的,但是两组程序看起来又各不相同,那么哪一组程序更好呢?例如下述代码:
-算法分析是基于每种算法使用的计算资源量来比较算法。我们比较两个算法,说一个比另一个算法好的原因在于它在使用资源方面更有效率,或者仅仅使用的资源更少。从这个角度来看,上面两个函数看起来很相似。它们都使用基本相同的算法来解决求和问题。
-问题:a+b+c=1000a**2+b**2=c**2(a,b,c均为自然数),求出a,b,c可能的组合?
forainrange(0,1001):forbinrange(0,1001):forcinrange(0,1001):ifa**2+b**2==c**2anda+b+c==1000:print(a,b,c)forainrange(0,1001):forbinrange(0,1001):c=1000-a-bifa**2+b**2==c**2anda+b+c==1000:print(a,b,c)分析:很明显上述两中问题的解决方案是不同的。那如何判定上述两种解决方案(算法)的优劣呢?有同学会说,观察计算两种算法使用耗费计算机资源的大小和它们的执行效率呀!但是我想说的是,一些较为复杂的算法,它耗费计算机资源的大小和执行效率我们很难能够直观的从算法的编码上分析出来。所以我们必须采用某种量化的方式求出不同算法的资源耗费和执行效率的具体值来判定算法之间的优劣。问题来了,如何进行量化计算呢?方法有两种:
-方法1:计算算法执行的耗时(不推荐)。
-计算机科学家更喜欢将这种分析技术进一步扩展。事实证明,操作步骤数量不如确定T(n)最主要的部分来的重要。换句话说,当问题规模变大时,T(n)函数某些部分的分量会超过其他部分。函数的数量级表示了随着n的值增加而增加最快的那些部分。
四.数据结构:
-对于数据(基本类型的数据(int,float,char))的组织方式就被称作为数据结构。数据结构解决的就是一组数据如何进行保存,保存形式是怎样的。
-组织形式1:
[{'name':'zhangsan','score':100},{'name':'lisi','score':99}]