简述两种算法的比较(算法分析工具网站)

相信大家在看到这个的时候,已经是身怀绝技的大牛了。当然不管你学习的哪一种语言,肯定都会写点小程序了。
文末有算法分析可视化工具网站收藏链接,建议需要的小伙伴看完!!!
现在我要求你写 个求 1+2+3+ …… 100 结果的程序,你应该怎么写呢?大多数人会马上写出下面的C语言代码(或者其他语言的代码) :

int i , sum = 0 , n = 100; 
for (i = 1; i < = n; i++) 
sum = sum + i ; 
printf (" %d ", sum) ;

这是最简单的计算机程序之一,它就是一种算法,我不去解释这代码的含义了。问题在于,你的第一直觉是这样写的,但这样是不是真的很好?是不是最高放?
此时,我不得不把伟大数学家高斯的童年故事拿来说一遍,也许你们都早已经听过,但不妨再感受下,天才当年是如何展现天分和才华的。
据说 18 纪生于德国小村庄的高斯, 上小学的一天 ,课堂很乱,就像我们现在下面那些窃窃私语或者拿着手机不停摆弄的同学一样, 老师非常生气,后果自然也很严重。于是老师在放学时,就要求每个学生都计算 1+2+ … +100 的结果,谁先算出来谁先回家。
天才当然不会被这样的问题难倒,高斯很快就得出了答案,是 5050 。老师非常惊讶,因为他自己想必也是通过 1+ =3 3+3=6 , 6+4=10,……, 4950+ 100=5050 这样算出来的,也算了很久很久。说不定为了怕错,还算了两三遍。可眼前这个少年何可以这么快地得出结果?

高斯解释道:

sum = 1 + 2 + 3 + … + 99 + 100
sum = 100+ 99+ 98+… + 2+ 1
2xsum= 101 + 101 + 101+ … + 101+ 101
共100个
所以 sum=5050

用程序来实现如下:

int 1, sum = 0, n = 100; 
sum = (1 + n) * n / 2; 
printf ( "%d", sum);

神童就是神童,他用的方法相当于另一种求等差数列的算法,不仅仅可以用于加到 100 ,就是加到一千、一万、一亿(需要更改整型变量类型为长整型,否则会溢出) ,也就是瞬间之事。但如果用刚才的程序,显然计算机要循环一千、 一万、一亿次的加法运算。人脑比电脑算得快,似乎成为了现实。

算法是描述解决问题的方法。很多刚入行的程序员,虽然编程功底不差,却始终弄不明白算法的时间复杂度的估算,这是一件很可悲的事情。因为不清楚,所以从不深究自己写的代码是否效率低下,是不是可以通过优化让计算机更加快速高效。

在这里插入图片描述
希望在以后的学习工作中,好好利用算法分析的工具,改进自己的代码,让计算机轻松一点,这样你就更加胜人一筹了。

建议收藏:
Data Structure Visualizations——数据结构可视化
Algorithm Visualizer——算法可视化
bigocheatsheet——常用算法的时空Big-O复杂性
Algorithms-DataStructures-BigONotation 算法分析可视化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逃逸的卡路里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值