首页 > 编程语言 >他奠定了当今计算机算法的规范化和量化度量

他奠定了当今计算机算法的规范化和量化度量

时间:2022-12-12 11:32:17浏览次数:32  
标签:计算机 复杂度 程序 算法 德纳 数据量 规范化 度量

如今的我们对算法可谓并不陌生,由于互联网发展迅猛,哪怕没有系统学习过计算机底层理论的程序员,也接触过无数的算法。

昨天笔者看到一个开放性思考题,内容是这样的:

如果一个程序只运行一次,在编写它的时候,你是采用最直观但是效率较低的算法,还是依然寻找复杂度最优的算法?

可能你心中已有答案,但这个问题我们放到文末再聊,本篇主要是科普向的算法入门文章,我将从最初的计算机讲起,用通俗易懂的话来带你重新认识下算法。

前言

图灵提出了计算机的数学模型、冯·诺依曼确定了计算机通用的系统结构,而如果要问图灵和冯·诺依曼之后对计算机科学贡献最大的人是谁,那就不得不提到高德纳了,正是他奠定了计算机算法的基础。我们知道,没有控制程序,只有一系列硬件算不上是计算机,程序之于计算机是必不可少的,而程序的灵魂,就在于算法

计算机诞生之初

在早期计算机领域里,哪些控制功能要通过开关电路做成硬件,哪些又该由程序控制,这些边界其实不像如今这么清晰。

教科书上对世界第一台通用计算机的定义,是20世纪40年代所研制的电子计算机埃尼阿克(ENIAC),而事实上这台计算机在研制时也没有搞清楚程序是怎么一回事,它说到底还是一台专用计算机,主要用于解决远距离导弹发射过程的计算问题。是的,计算机的起源并没有想象中的美好。

他奠定了当今计算机算法的规范化和量化度量_程序员

当时的冯·诺依曼正服务于美国军方,负责氢弹工程,也需要进行大量的计算,听说了电子计算机研制的事情,就跑过去想看看能不能解决氢弹计算问题,而他也马上发现了这台计算机的巨大缺陷:如果 ENIAC 要计算其他问题,只能修改线路,但改线路会非常麻烦,处理一个几分钟就能算好的问题,要几个月的时间来改线路,效率之低下可想而知。但面对已经造了一半的 ENIAC,冯·诺依曼也只能表示无解。

美国军方在了解了这个情况后,于1944年决定再造一台新的通用计算机,这次由冯·诺依曼和约翰·莫奇利、埃克特(两位 ENIAC 的研发者)一起主导设计,称为 EDVAC (离散变量自动电子计算机),所以它其实才是世界上第一台由程序控制的通用电子计算机,甚至可以说是今天所有计算机的原型,而 ENIAC 则是一个孤版。

他奠定了当今计算机算法的规范化和量化度量_程序员_02

1946年 ENIAC 诞生后,科学家们用它进行了一次计算长程火炮弹道轨迹演示,以至于现场观摩的蒙巴顿元帅看的目瞪口呆,说了一句“真快啊,简直是带电的大脑”,“电脑”一词就是这么来的。

算法理论起源

EDVAC 之后,客观上计算机已经分为了软硬件两个部分,随后的十多年里,整个行业关注的都是硬件,从电子管、晶体管、再到第三代继承电路,计算机硬件在不断演变,但早期的软件算法却很简单,因为大多数用来进行科学计算,很多程序在编写完成之后其实用不了几次,因此没有人重视它们的质量。

而到了60年代,计算机开始在商业上普及,一个程序是需要提供给用户反复使用的,这时候人们才真正重视起程序设计,而计算机算法理论的缺失,就要有人来弥补了,这个人就是文章开头提到的高德纳

关于高德纳这个中文名的由来,大部分的英文名我们通常都会以音译形式来取,但高德纳这个名字与其英文名 Donald Ervin Knuth(唐纳德·尔文·克努斯)还是有一定差别的,在1977年时,高德纳作为最早受到中国邀请讲学的专家来华访问,临行前他就想给自己起一个中文名,当时姚期智(图灵奖获得者)的夫人储枫便给他起了这个名字。

他奠定了当今计算机算法的规范化和量化度量_复杂度_03

高德纳在学生时代对物理和音乐都很有兴趣,1956年,他以各科平均97.5分的创记录高分从中学毕业,彼时的他选择了攻读物理专业。

在大学时期,他接触到当时最先进的大型电脑 IBM 650,并展现出了在计算机上超凡的才能。当时他写了个程序,用来分析大学篮球联赛中球员在每场比赛的得分、助攻、抢断、篮板球、盖帽等数据,然后让篮球队教练以此挑选球员,最终带领球队赢得了当时全美大学生篮球联赛冠军(这可能是最早的大数据在体育界的成功应用了)。后来高德纳也成为当时最好的工程科学期刊编辑,获得了国家奖,于是便从主修物理改成主修数学,毕业之后留在加州理工学院任教,并在数学与计算机程序设计领域取得多项成就。

他奠定了当今计算机算法的规范化和量化度量_计算机程序_04

而说起高德纳对计算机行业最伟大的贡献,就不得不提到他编纂的一部系统地介绍计算机程序设计的巨著《计算机程序设计艺术》,截至 2018 年 12 月,该书已经出版了 4 卷,高德纳本人预计第 5 卷将会在 2025 年完稿。其中第一卷是《基础算法》,比尔·盖茨曾花了很大精力学通了这一卷,此后便一辈子都在向人推荐这套书,他直言如果没读过这卷《基础算法》,就很难成为一个优秀的程序员。高德纳本人的说辞更狠:“要是这一卷都看不懂,那就别当程序员了”。(对不起,是我不配了

标签:计算机,复杂度,程序,算法,德纳,数据量,规范化,度量
From: https://blog.51cto.com/palxp/5929302

相关文章

  • vue源码分析-diff算法核心原理
    这一节,依然是深入剖析Vue源码系列,上几节内容介绍了VirtualDOM是Vue在渲染机制上做的优化,而渲染的核心在于数据变化时,如何高效的更新节点,这就是diff算法。由于源码中关于d......
  • Floyd算法
    Floyd算法dijistra算法解决,从一点出发,到其它所有点的最短路径。此算法解决,从任何一点出发,到任何点的最短路径。https://zhuanlan.zhihu.com/p/87480486理解......
  • gmgo国密算法库
    gmgo国密算法库一、背景介绍基于go1.17.5实现的国密算法库,包括:sm2:基于emmansun/gmsm的sm2部分实现部分扩展。sm3:基于emmansun/gmsm的sm3部分实现部分扩展。sm4......
  • 大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法
        在之前的一篇博客​​《大数据【企业级360°全方位用户画像】之RFM模型和KMeans聚类算法》​​​中,博主为大家带来了KMeans聚类算法的介绍。并在之后,基于不同的......
  • 弗洛伊德算法-考试题目用
    对带权有向图可用v1可以从v0开始写,都可以如下图 填好表格将第一行和第一列填入下一个表,判断第一行或第一列有无穷的,则这个元素的列或行的值填原来的,同时对角线填原理......
  • 代码随想录算法训练营Day04: 24.两两交换链表中的节点,19.删除链表的倒数第N个节点,面试
    24. 两两交换链表中的节点tag:#链表#反转leetcode地址:24. 两两交换链表中的节点代码:functionswapPairs(head:ListNode|null):ListNode|null{constre......
  • 基于密码算法库的国密算法支持研究与应用--个人报告
    北京电子科技学院《信息安全工程技术应用》课程设计报告基于密码算法库的国密算法支持研究与应用--个人报告      小组成员姓名:20201204于瀛鹏20201224吴卓航2......
  • Alpha-Beta算法简介
    Alpha-Beta-Chessprogrammingwiki 可运行的代码(最后的注释值得一看):nclude<stdio.h>#include<vector>struct{intscore;char*kids;}nodes[]={{......
  • 哈希算法学习笔记
    1.哈希表1-1.介绍本质上是一种高级的数组。原理是通过设计哈希函数将一些难以维护的值映射成为易于维护的值以加快查找速度。但如果哈希函数设计的不够巧妙,可能会导致......
  • 算法刷题入门数据结构|二分查找
    一.二分查找基础1、二分查找介绍二分查找(Binarysearch)也称折半查找,是一种效率较高的查找方法,时间复杂度。当对查数题目有时间复杂度要求是,首先就要考虑到二分查找。二......