标签:python语言 c++ complete 枚举法 gif 并且 设备 开发人员 特性
我们举一个可能不太恰当的例子:
如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器。
那么数据结构和算法是什么?答曰:兵法!
我们可以不看兵法在战场上肉搏,如此,可能会胜利,可能会失败。即使胜利,可能也会付出巨大的代价。我们写程序亦然:没有看过数据结构和算法,有时面对问题可能会没有任何思路,不知如何下手去解决;大部分时间可能解决了问题,可是对程序运行的效率和开销没有意识,性能低下;有时会借助别人开发的利器暂时解决了问题,可是遇到性能瓶颈的时候,又不知该如何进行针对性的优化。
如果我们常看兵法,便可做到胸有成竹,有时会事半功倍!同样,如果我们常看数据结构与算法,我们写程序时也能游刃有余、明察秋毫,遇到问题时亦能入木三分、迎刃而解。
故,数据结构和算法是一名程序开发人员的必备基本功,不是一朝一夕就能练成绝世高手的。冰冻三尺非一日之寒,需要我们平时不断的主动去学习积累。
首先,我们可以用枚举法,当固定2个变量,
a=0,b=0时,c=0~1000,
a=0,b=1时,c=0~1000,......这样以此枚举下去。
下面用python实现,
1 import time 2 3 start_time = time.time() 4 5 # 注意是三重循环 6 for a in range(0, 1001): 7 for b in range(0, 1001): 8 for c in range(0, 1001): 9 if a**2 + b**2 == c**2 and a+b+c == 1000: 10 print("a, b, c: %d, %d, %d" % (a, b, c)) 11 12 end_time = time.time() 13 print("elapsed: %f" % (end_time - start_time)) 14 print("complete!")
运行结果:
a, b, c: 0, 500, 500
a, b, c: 200, 375, 425
a, b, c: 375, 200, 425
a, b, c: 500, 0, 500
elapsed: 214.583347
complete!
注意运行的时间:214.583347秒
算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用。
算法是独立存在的一种解决问题的方法和思想。
对于算法而言,实现的语言并不重要,重要的是思想。
算法可以有不同的语言描述实现版本(如C描述、C++描述、Python描述等),我们现在是在用Python语言进行描述实现。
下面我们对上面的算法进行修改,应该到有两个变量确认时,第三个变量也是固定的,所以可以省去一个循环。代码如下:
1 start_time = time.time() 2 3 # 注意是两重循环 4 for a in range(0, 1001): 5 for b in range(0, 1001-a): 6 c = 1000 - a - b 7 if a**2 + b**2 == c**2: 8 print("a, b, c: %d, %d, %d" % (a, b, c)) 9 10 end_time = time.time() 11 print("elapsed: %f" % (end_time - start_time)) 12 print("complete!") 13 运行结果: 14 15 a, b, c: 0, 500, 500 16 a, b, c: 200, 375, 425 17 a, b, c: 375, 200, 425 18 a, b, c: 500, 0, 500 19 elapsed: 0.182897 20 complete! 21 注意运行的时间:0.182897秒
从上面的运行时间,我们可以看出,第二种算法要比第一个快,因为它少了一个for循环,也就是少了很多步。
所以以后衡量一个算法的运行时间,我们就用算法复杂度,说的通俗点,就是算法的一共走了多少步!
下次将具体学习算法效率的衡量。
标签:python语言 c++ complete 枚举法 gif 并且 设备 开发人员 特性
原文地址:https://www.cnblogs.com/oliver3455/p/11436907.html