算法的概念
首先要知道我们为什么要学习数据结构月算法???
这里举一个简单的例子:
如果将最终完成的程序比做战场,我们码农就是指挥作战的将军,而我们写的代码就是士兵和武器
那么数据结构和算法是什么呢?答曰:兵法!!!
我们不看兵法在战场上的运用,仅仅是肉搏,那么战争可能会失败,可能会胜利,并且即使胜利也会付出惨痛的代价。我们写程序也是这个道理,没有看过数据结构与算法,有时面对问题会无从下手,大部分情况下是解决了问题,但是耗费了很多运行时间,以及储存空间。有的时候借助于别人开发的利器暂时解决了问题,可是遇到性能瓶颈,又不知如何针对性的进行优化。
如果我们熟知兵法,便可在万军丛中取上将首级,同样我们熟悉数据结构与算法的话,在写程序时也会游刃有余,遇到问题迎刃而解。
数据结构和算法是开发人员的基本功,并非一朝一夕就能达到绝世高手的,需要我们不断的进行主动学习和积累的。
引入
先来看一道题:
如果
a
+
b
+
c
=
1000
a+b+c=1000
a+b+c=1000,且
a
2
+
b
2
=
c
2
(
a
,
b
,
c
均
为
自
然
数
)
a^2+b^2=c^2(a,b,c均为自然数)
a2+b2=c2(a,b,c均为自然数),如何用程序求出所有a,b,c可能的组合?
对于上面的问题,不利用数学公式,只是单纯的利用计算机程序进行求解,只能一个一个的去试,实际上有一种方法就是枚举法。思路是:a从0开始,b从0开始,c从0开始,并且让其中一个变量变化,其他两个不变,如此嵌套循环再满足条件的前提下进行求解问题。
实现:
import time
start_time = time.time()
for a in range(1001):
for b in range(1001):
for c in range(1001):
if a+b+c==1000 and a**2+b**2==c**2:
print("a,b,c:%d,%d,%d"%(a,b,c))
end_time = time.time()
print("time:%d"%(end_time-start_time))
print('finished')
结果
a,b,c:0,500,500
a,b,c:200,375,425
a,b,c:375,200,425
a,b,c:500,0,500
time:120
finished
针对上述问题,我们有一种方法对其进行求解,不管三个值的和为1000,2000还是更大,我们都可以根据此方法进行求解。这其实已经引入了算法的概念了,就是我们解决问题所提出的思路,下面看一下算法的具体概念。
算法的提出
算法的概念
算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务,一般的,当算法在处理信息时,会从输入设备或数据的存储地址来读取数据,把结果写入输出设备或某个存储地址供以后在调用。
算法是独立存在的一种解决问题方法的思想。
对于算法而言,实现的语言并不重要,你用Java、C或这python都可以,重要的是解决问题的思想。
算法的五大特性
1、输入:算法具有0或者多个输入
2、输出:算法至少有1个或多个输出
3、有穷性:算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成。
4、确定性:算法中的每一步都有确定的意义,不会出现二义性
5、可行性:算法的每一步都是可执行的,也就是说每一步都能够执行有限的次数完成。