经典高斯算法,一起学习数据结构和算法吧!
2015-03-05 00:00
513 查看
对于想提高编程技巧的人,数据结构和算法是必修的,举一个最经典的故事向新手们说明算法的伟大。
话说很久很久以前。。。,一次数学课上,老师让同学们做一个算术:一个小时内算出1+2+3.......+99+100的结果,有一位同学,叫做高斯,只用了不到20分钟就算出了结果,老师很惊讶,于是向他请教他是怎么算的。原来,他发现了这些数字有一个规律:第一个数字加上最后一个数字等于101,第二个数字加上倒数第2个数字结果也是101,即:1+100=101,2+99=101,3+98=101......。以此类推,一共就得出50个101,那这个算术题的结果自然就是50*101=5050。
根据规律得出一个公式:n(n+1)/2
就是从1一直加到n的结果
按照传统方法,我们就是傻呼呼地去计算1+2=3,3+3=6,6+4=10......=5050,接下来我们用程序来表示出传统方法与高斯算法的差别
不难看出,传统方法计算,计算机要做100次循环,而高斯算法只需要一次计算!想像一下如果max=100000000呢?传统的方法就要循环100000000次计算操作,而高斯算法依然只需要一次计算!这就是一个天才算法的差距。
而通过学习数据结构,就会知道两种算法的复杂度为O(n)和O(1)。更深入的东西就需要大家一起去学习了,我也没那个水平,只是抛砖引玉,给未入门的新手讲些粗浅的东西。
话说很久很久以前。。。,一次数学课上,老师让同学们做一个算术:一个小时内算出1+2+3.......+99+100的结果,有一位同学,叫做高斯,只用了不到20分钟就算出了结果,老师很惊讶,于是向他请教他是怎么算的。原来,他发现了这些数字有一个规律:第一个数字加上最后一个数字等于101,第二个数字加上倒数第2个数字结果也是101,即:1+100=101,2+99=101,3+98=101......。以此类推,一共就得出50个101,那这个算术题的结果自然就是50*101=5050。
根据规律得出一个公式:n(n+1)/2
就是从1一直加到n的结果
按照传统方法,我们就是傻呼呼地去计算1+2=3,3+3=6,6+4=10......=5050,接下来我们用程序来表示出传统方法与高斯算法的差别
var count,max int //要加到100 max = 100 //传统方法 count = 0 for i:=1;i<=max;i++ { count = count + i } fmt.Print(count) //============= 我是不羁的分隔线 ================ //高斯算法 count = max(max+1)/2 fmt.Print(count)
不难看出,传统方法计算,计算机要做100次循环,而高斯算法只需要一次计算!想像一下如果max=100000000呢?传统的方法就要循环100000000次计算操作,而高斯算法依然只需要一次计算!这就是一个天才算法的差距。
而通过学习数据结构,就会知道两种算法的复杂度为O(n)和O(1)。更深入的东西就需要大家一起去学习了,我也没那个水平,只是抛砖引玉,给未入门的新手讲些粗浅的东西。
相关文章推荐
- 数据结构经典算法学习之三色旗
- [个人记录]小白书学习第6章数据结构基础算法竞赛入门经典第一版)
- 数据结构经典算法学习之老鼠走迷宫02
- 数据结构经典算法学习之河内之塔(汉诺塔)
- 数据结构经典算法学习之八皇后01
- 数据结构经典算法学习之老鼠走迷宫01
- 数据结构经典算法学习之多背包问题
- 数据结构入门学习系列-8(栈的经典算法用例)
- 数据结构经典算法汇总___循环队列:
- 《Delphi 算法与数据结构》学习与感悟[8]: 单向链表的添加、删除与遍历
- 《Delphi 算法与数据结构》学习与感悟[9]: 循环链表
- C语言学习趣事_数据结构_经典命题_1_背包问题_分析_1
- 分享:C语言的学习基础,100个经典的算法
- 语言的学习基础,100个经典的算法
- 经典面试题(一)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 【算法学习】【数据结构】treap的构建和使用
- 数据结构与算法学习之二叉树的遍历:已知先序、中序、后序序列三者中的两种求另外一种遍历的算法
- 数据结构经典算法汇总___图的邻接矩阵实现
- 数据结构经典算法汇总___图的邻接表实现
- 算法与数据结构的一些学习体会