:: wikimiki.org ::
| 算法 |
算法Category:代数 Category:算法
算法是指完成一个任务所需要的具体步骤和方法。也就是说给定初始状态或输入数据,经过计算机程序的有限次运算,能够得出所要求或期望的终止状态或输出数据。
算法常常含有重复的步骤和一些比较或逻辑判断。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
算法的历史
“算法”的中文名稱出自周髀算經;而英文名稱 Algorithm 来自于9世纪波斯数学家比阿勒·霍瓦里松的名字al-Khwarizmi,因為比阿勒·霍瓦里松在数学上提出了算法这个概念。“算法”原为"algorism",意思是阿拉伯数字的运算法则,在18世纪演变为"algorithm"。
第一次编写算法是Ada Byron于1842年为巴贝奇分析机编写求解解伯努利方程的程序,因此Ada Byron被大多数人认为是世界上第一位程序员。因为巴贝奇(Charles Babbage)未能完成他的巴贝奇分析机,这个算法未能在巴贝奇分析机上执行。
因为"well-defined procedure"缺少数学上精确的定义,19世纪和20世纪早期的数学家、逻辑学家在定义算法上出现了困难。20世纪的英国数学家图灵提出了著名的图灵论题,并提出一种假想的计算机的抽象模型,这个模型被称为图灵机。图灵机的出现解决了算法定义的难题,图灵的思想对算法的发展起到了重要的作用。
算法的特征
#输入,一个算法必须有零个或多个输入量。
#输出,一个算法应有一个或多个输出量,输出量是算法计算的结果。
#确定性,算法的描述必须无歧义,以保证算法的执行结果是确定的。
#有穷性,算法必须在有限步骤内实现。注:此处“有限”不同于数学概念的“有限”,天文数字般的有限对于实际问题并无意义。
#有效性(亦称可行性),能够实现,算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现。
形式化算法
算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务,如计算职工的薪水或打印学生的成绩单。
一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用。
算法的复杂度
算法的时间复杂度
算法的时间复杂度是指算法需要消耗的时间资源。一般来说,计算机算法是问题规模n的函数f(n),算法的时间复杂度也因此记做
T(n)=O(f(n))
因此,问题的规模n越大,算法执行的时间的增长率与f(n)的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。
算法的空间复杂度
算法的空间复杂度是指算法需要消耗的空间资源。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。
非確定性多項式時間(NP)
算法的实现
算法不单单可以用计算机程序来实现,也可以在神经网络、电路或者机械设备上实现。
例子一
这是算法的一个简单的例子。
我们有一串随机数列。我们的目的是找到这个数列中最大的数。如果将数列中的每一个数字看成是一颗豆子的大小,可以将下面的算法形象地称为“捡豆子”:
# 首先将第一颗豆子放入口袋中。
# 从第二颗豆子开始检查,直到最后一颗豆子。如果正在检查的豆子比口袋中的还大,则将它捡起放入口袋中,同时丢掉原先口袋中的豆子。
# 最后口袋中的豆子就是所有的豆子中最大的一颗。
下面是一个形式算法,用近似于编程语言的伪代码表示
给定:一个数列“list",以及数列的长度"length(list)"
largest = list[1]
for counter = 2 to length(list):
if list[counter] > largest:
largest = list[counter]
print largest
符号说明:
- = 用于表示赋值。即:右边的值被赋予给左边的变量。
- List[counter]用于表示数列中的第counter项。例如:如果counter的值是5,那么List[counter]表示数列中的第5项。
- <= 用于表示“小于或等于”。
例子二
求两个自然数的最大公约数
设两个变量 M 和 N
#如果 M < N,则交换 M 和 N
#M 被 N 除,得到余数 R
#判断 R=0,正确则 N 即为“最大公约数”,否则下一步
#将 N 赋值给 M,将 R 赋值给 N,重做第一步。
用“BASIC 代码”表示--
If M < N Then Swap M,N
Do While R <> 0
R = M Mod N
M = N
N = R
Loop
Print N
算法设计和分析的基本方法
- 分治法
- 动态规划
- 贪心法(亦作饕餮法)
算法的分类
- 基本算法
- 枚举
- 搜索
- 深度优先搜索
- 广度优先搜索
- 启发式搜索
- 遗传算法
- 数据结构的算法
- 数论与代数算法
- 计算几何的算法
- 凸包算法
- 图论的算法
- 哈夫曼编码
- 树的遍历
- 最短路径算法
- 最小生成树算法
- 最小树形图
- 网络流算法
- 匹配算法
- 动态规划
- 其他
- 数值分析
- 加密算法
- 排序算法
- 检索算法
- 随机化算法
- 关于并行算法,请参阅并行计算一文。
参见
- 计算机科学课程列表
ja:アルゴリズム
ko:알고리즘
th:อัลกอริทึม
Category:代数Category:数学
ja:Category:代数学
ko:분류:대수학
Category:算法算法(Algorithm)指完成任务所需要的具体步骤和方法的描述。
Category:数据结构
Category:計算理論
ja:Category:アルゴリズム
ko:분류:알고리즘
计算机程序
计算机程序或者软件程序(通常简称程序)是指一组指示计算机每一步动作的指令,通常用某种程序设计语言编写,运行于某种目标体系结构上。打个比方,一个程序就像一个用汉语(程序设计语言)写下的红烧肉菜谱(程序),用于指导懂汉语的人(体系结构)来做这个菜。 通常,计算机程序要经过编译和链接而成为一种人们不易理解而计算机理解的格式,然后运行。未经编译就可运行的程序通常称之为脚本程序。
程序的运行
为了一个程序运行,计算机加载程序代码,可能还要加载数据,从而初始化成一个开始状态,然后调用某种启动机制。在最低层上,这些是由一个引导序列开始的。
在大多数计算机中,操作系统例如Windows等,加载并且执行很多程序。在这种情况下,一个计算机程序是指一个单独的可执行的映射,而不是当前在这个计算机上运行的全部程序。
冯诺依曼体系结构
在一台基于最常见的冯诺依曼体系结构(又称Harvard Architecture)的计算机上,程序从某种外部设备,通常是硬盘,被加载到计算机里。 如果计算机选择冯诺依曼体系结构,那么程序就被加载入内存。 指令序列顺序执行,直到一条跳转或转移指令被执行,或者一个中断出现。所有这些指令都会改变指令寄存器的内容。
基于这种体系计算机如果没有程序的支持将无法工作。一个计算机程序是一系列指令的集合。
程序里的指令都是基于机器语言;程序通常首先用一种计算机程序设计语言编写,然后用编译程序或者解释执行程序翻译成机器语言。 有时,程序也可以用汇编语言编写,汇编语言实质就是表示机器语言的一组记号-在这种情况下,用于翻译的程序叫做汇编程序(Assembler)。
程序和数据
程序已经被定义了。如何定义数据呢?数据可以被定义为被程序处理的信息。当我们考虑到整个计算机系统时,有时程序和数据的区别就不是那么明显了。中央处理器有时有一组微指令控制硬件,数据可以是一个有待执行的程序(参见脚本编程语言),程序可以编写成去编写其它的程序;所有这些例子都使程序和数据的比较成为一种视角的选择。有人甚至断言程序和数据没有区别。
编写一个程序去生成另外一个程序的过程被称之为原编程()。它可以被应用于让程序根据给定数据生成代码。单一一个程序可能不足以表示给定数据的所有方面。让一个程序去分析这个数据并生成新的程序去处理数据所有的方面可能会容易一些。就是一例支持这种编程模式的程序语言。
在神经网络里储存的权重是一种数据。正是这些权重数据,跟网路的拓扑结构一起,定义了网络的行为。人们通常很难界定这些数据到底表示什么或者它们是否可以由程序来代替。这个例子以及跟人工智能相关的其它一些问题进一步考验程序和数据的区别。
算法
算法指解决某个问题的严格方法,通常还需辅以某种程度上的运行性能分析。算法可以是纯理论的,也可以由一个计算机程序实现。理论算法通常根据复杂性分为不同类别;实现的算法通常经过颇析()以测试其性能。请注意虽然一个算法在理论上有效可行,但是一个糟糕的实现仍会浪费宝贵的计算机资源。(更详细信息,参见算法信息论,)
开发
编写程序是以下步骤的一个往复过程:编写新的源代码,测试、分析和提高新编写的代码以找出语法和语义错误。从事这种工作的人叫做程序设计员。由于计算机的飞速发展,编程的要求和种类也日趋多样,由此产生了不同种类的程序设计员,每一种都有更细致的分工和任务。软件工程师和系统分析员就是两个例子。现在,编程的长时间过程被称之为“软件开发”或者软件工程。后者也由于这一学科的日益成熟而逐渐流行。
因此,如今程序设计员可以指某一领域的编程专家,也可以泛指软件公司里编写一个复杂软件系统里某一块的一般程序员。一组为某一软件公司工作的程序员有时会被指定一个程序组长或者项目经理,用以监督项目进度和完成日期。大型软件通常经历由系统设计师的掌握的一个长时间的设计阶段,然后才交付给开发人员。牛仔式的编程(未经详细设计)是不为人所齿的。
两种当今常见的程序开发方式之一是项目组开发方式。使用这种方式项目组里每一个成员都能对项目的进行发表意见,而由其中的某一个人协调不同意见。这样的项目组通常有10个左右的成员,这样做是为了便于管理。第二种开发方式是结对开发。
参见
- 程序员
- 卸载程序
- 源代码
- 電子計算機
- 计算机软件
- 程序设计语言
- 編程典範
- 固件
- 操作系统
- 图灵机
- 系统需求
外部链接
- [http://www.webopedia.com/TERM/P/program.html Definition of Computer program @ Webopedia]
参考文献
#Eric Baum What is Thought MIT Press 2004 ISBN 0-262-02548-5
#- Chapter Two: The Mind is a Computer Program
Category:计算机软件
Category:程序设计
ja:プログラム
ko:프로그램
simple:Computer program
时间复杂度时间复杂度是指完成一个算法所需要的平均时间。
Category:代数
Category:算法
周髀算經由于你的文章属于原始文献或者其他类似的文章,因此该页面已经移动到维基文库,你可以从这里访问。
请记住,维基百科不是公共领域或其它原文资源的收集处。
如果你觉得你需要基于该作品写成一个百科全书条目,请点击左上角的"重定向自"然后进行编辑。编辑时请在页面中加入如下的一行。
参看
- wikipedia:不适合维基百科的文章
9世纪
800年至899年的这一段期间被称为9世纪。
- 年代 - 世纪 - 千年
重要事件、发展与成就
- 科学技术
- 战争与政治
- 公元9世纪的天灾人祸
- 文化娱乐
- 社會與經濟
- 疾病与医学
- 环境与自然资源
- 宗教與哲學
重要人物
世界领导人
- 非洲
- 美洲
- 亚洲
- 欧洲
- 中东
科学家
军事领袖
艺术家
9世纪年历
ja:9世紀
ko:9세기
nb:9. århundre
波斯波斯是伊朗在欧洲的旧称译音。历史上在这一西南亚地区曾建立过多个的帝国。
西南亚
波斯和伊朗
自从前600年开始,希腊人把这一地区叫做“波斯”。这个名称来自于波斯的一个地区帕斯(Pars)。直到1935年,欧洲人一直使用波斯来称呼这个地区和位于这一地区的国家。而波斯人则从萨珊王朝 开始称呼自己的国家为“伊朗”,意为“雅利安人的家园”。
1935年,波斯国王礼萨·沙·巴列维宣布国际上该国应被称作“伊朗”。但波斯一词在这之后还有人使用。
在中文里,“波斯”被用于描述1935年之前的事,或该民族从古就有的事物,如波斯语和波斯地毯。现代政治、经济等事物则用“伊朗”一词。
波斯诸帝国
在波斯,历史上有多个帝国先后建立、兴盛、和衰亡。
前330年
阿契美尼德帝国,又称波斯“第一帝国”。公元前549年居鲁士二世统一波斯,建立阿契美尼德王朝。居鲁士二世击败了当时统治波斯的米底人(Median),使波斯成为一个强盛的帝国。前539年,居鲁士占领巴比伦。
到了大流士一世,帝国疆域得到了空前的发展。向东大流士进军印度河流域,在西线对希腊的进攻则由于马拉松战役(前490年)的失败而功败垂成。其子薛西斯一世后来再度对希腊用兵遭受失败。
阿契美尼德帝国是当时世界上最大的帝国之一。
前334年马其顿人亚历山大大帝的希腊大军击败大流士三世,波斯成为希腊帝国的一部分。亚历山大的帝国很快就分崩离析。亚历山大手下大将塞琉西一世自立塞琉西王朝,以叙利亚为中心,统治波斯地区。
这一时期波斯成为东西方的交流的一个枢纽:丝绸之路由此连接中国,佛教从印度传来,琐罗亚斯德教则西去影响了犹太教。
塞琉西王朝的后期在前238年东部的安息(帕提亚)和大夏(巴克特里亚)独立之后,东部被貴霜王朝所扰,西面又面临罗马帝国的扩张,最终被罗马帝国和安息瓜分。
安息帝国位于今天的伊朗的东北部,与罗马帝国隔幼发拉底河为界,首都泰西封位于今天的伊拉克首都巴格达附近。两个帝国之间连年战争。同时安息帝国与东邻貴霜王朝也是战事频传。帝国国力衰竭,各地军阀割据。
650年
226年阿尔达希尔一世经过两年的战争,推翻安息帝国,建立萨珊王朝,首都泰西封。萨珊王朝因阿达希尔的祖父而命名。波斯自阿契美尼德帝国之后第一次统一,被认为是第二个波斯帝国。萨珊帝国多次与罗马帝国开战,曾俘虏过一个罗马的皇帝。
萨珊帝国是一个高度中央集权的帝国,以琐罗亚斯德教为国教,全体人民分为教士、军人、文人、和平民四等。基督教中天主教被迫害,景教则得以发展。
由于对东罗马帝国的连年征战,萨珊帝国对臣民横征暴敛,同时加强对宗教的控制,造成暴乱迭起,在629年和642年,两任皇帝遇刺,帝国终于崩溃。
魏晋南北朝时期,中国和波斯间的友好往来较频繁,《魏书》记载,波斯使臣来中国交聘达数十次之多,给北魏皇帝带来的各种礼品,有珍物、训象等。1970年,在甘肃张掖大佛寺出土了六枚波斯萨珊王朝银币。帝国崩溃后,萨珊王朝末代皇帝的儿子俾路支逃到了中国。
1290年哈伦·拉希德统治时期的阿拔斯王朝诸行省]]
混乱的萨珊帝国迅速被新兴的伊斯兰教指引下的阿拉伯帝国击溃。波斯成为阿拉伯帝国的一部分。阿拉伯语成了通行的语言,伊斯兰教迅速取代了琐罗亚斯德教,各地大量兴建清真寺。
750年阿拔斯王朝统治阿拉伯帝国,而波斯人则在政府中取得了支配地位。在这期间波斯的文化得到巨大的发展。
9世纪后,阿拔斯王朝因内部叛乱不治而国势日衰,割据局面形成。1037年从东北方来的塞尔柱人占领波斯,1205年花剌子模征服波斯。
1219年成吉思汗率大军灭花剌子模,之后他的孙子旭烈兀征服波斯和阿拉伯,建立伊兒汗國。1295年伊兒汗國大汗入伊斯兰教。1370年到1405年,波斯成为帖木尔帝国的一部分。帖木尔死后波斯陷入混乱和割据。
伊兒汗國时期,是中国和波斯文化交流得到空前发展的时期。不少精通中国天文、历法、医药的学者随旭烈兀来到波斯进行交流。
1405年到1433年,中国明朝的穆斯林太监郑和组织船队下西洋,多次到达波斯。郑和在斯里兰卡立的石碑用中文、泰米尔语、波斯语三种文字写成。阿拉伯语和波斯语在明朝穆斯林的经堂教育中广被使用。
1722年
萨非王朝(又译萨法维王朝)是一个突厥人建立的帝国,其建国的英主伊斯迈尔一世统一波斯,并把疆土扩展到今天的阿塞拜疆、伊拉克、和阿富汗的一部分,以什叶派的「十二伊玛姆」教义为国教。萨非王朝与奥斯曼土耳其帝国战争不断。1588年阿拔斯大帝继位,迁都伊斯法罕,与土耳其讲和,赶走乌兹别克人,从葡萄牙人手中夺得波斯湾中的小岛巴林,使波斯成为伊斯兰世界的最重要的文化中心。
1722年俄国的彼得大帝联合奥斯曼土耳其帝国入侵波斯,之后波斯国内又爆发了逊尼派教徒为抵抗被迫强制信奉什叶派的暴动,萨非王朝灭亡。
1779年至1925年,波斯在卡扎尔王朝的统治下,被北面的俄国和东面以印度为基地的英国所蚕食,其领土中分出了英国势力的巴林、阿富汗的一部分,和俄国势力的阿塞拜疆、吉尔吉斯斯坦、土库曼斯坦、塔吉克斯坦、乌兹别克斯坦。俄、英在此的战略竞争被称为“大博弈”。
第一次世界大战期间,参战的俄国、土耳其、英国(经阿富汗)和德国(经土耳其)均向波斯派出军队以控制波斯的油田。战后波斯北部被英国驻军控制。1925年礼萨·沙·巴列维推翻卡扎尔王朝建立巴列维王朝,而直到冷战期间,英国及苏联还一直对波斯保持影响力。
1935年,礼萨·沙·巴列维将波斯在国际上更名为伊朗。
参见
- 波斯君主列表
- 伊朗
-
Category:中东历史
ja:ペルシア
ko:페르시아 제국
阿拉伯数字
阿拉伯数字是一种数字系统。
阿拉伯数字以十进制为基础,采用0、1、2、3、4、5、6、7、8、9共十个计数符号。采取位值法,高位在左,低位在右,从左往右书写。借助一些简单的数学符号(小数点、负号等),这个系统可以明确的表示所有的有理数。为了表示极大或极小的数字,人们在阿拉伯数字的基础上创造了科学记数法。
一般也用阿拉伯数字表示其它进制的数,用时选一部分数字或增加几个数字。
阿拉伯数字始创于中印边界地区,后来传到中东地区的阿拉伯地区,而得此名。现在它已成为目前使用最广泛的数字系统,通行于全世界.
阿拉伯数字在Unicode码中的位置是四十八到五十七。
严格的说,阿拉伯数字有两套数字体系:标准阿拉伯语数字和东阿拉伯语数字,使用于书写阿拉伯语的伊朗、巴基斯坦和印度。
参看
- 阿拉伯字母
ja:アラビア数字
ko:아라비아 수 체계
18世纪
1701年至1800年的这一段期间被称为18世纪。這個世紀注重的是“穩定”與“和諧”,卻也是人們對自然探索的萌芽期。政治上,歐洲各國開始與中國、印度和土耳其進行小規模的通商貿易,並持續在東南亞與大洋州建立殖民據點。此時多數的王權國家(如清、蒙兀兒帝國、法蘭西帝國、奧圖曼土耳其、奧地利帝國、俄羅斯帝國)正處於全盛時期,但民主思潮卻逐漸燃起,並以美國獨立戰爭和法國大革命影響最深。學術上,在西歐興起的啟蒙運動開始挑戰基督教教會的思想體系,使科學的成果感染到社會的各個層面,而歐洲以外的地區也透過傳教與貿易的方式接觸這思潮,進而產生小規模的學術復興運動。
另外,由於商業上的需要,部分技術孕育而生,成為工業革命之濫觴。而在技術外,生產與管理方式在西歐逐漸發生改變:傳統世襲的學徒制逐漸被破壞,分工與工廠生產方式開始抬頭。
藝術與文化上,追尋希臘與古羅馬風格的新古典主義盛行西方世界,並影響印度與中國的宮廷藝術。但同樣的,中國和大洋洲的文化物品流入歐洲,使西方世界的上流社會吹起十分表面的異國風。
歷史
東亞
中亞·中東
北非
歐洲
重要事件、发展与成就
- 科学技术
- 战争与政治
- 18世纪的天灾人祸
- 文化娱乐
- 社會與經濟
- 疾病与医学
- 环境与自然资源
- 宗教與哲學
重要人物
世界领导人
- 非洲
- 美洲
- 华盛顿,美国
- 亚洲
- 康熙,大清帝國
- 乾隆,大清帝國
- 欧洲
- 彼得一世,俄国
- 中东
科学家
军事领袖
艺术家
- 鄭燮
18世纪年历
ja:18世紀
ko:18세기
1842年
----
大事记
- 8月20日——中國與英國簽訂《南京条约》。
- 8月29日——清政府派耆英、伊里布与璞鼎查在南京下关江面的军舰“汉华丽”号上签订《中英南京条约》。
出生
-
逝世
-
Category:1842年
Category:1840年代
ko:1842년
ms:1842
simple:1842
程序员程序员是从事程序开发、维护的专业人员。一般我们将程序员分为程序设计人员和程序编码员,但两者的界限并不非常清楚,特别是在中国。
英国著名诗人拜伦的女儿Ada Lovelace曾设计了巴贝奇分析机上解伯努利方程的一个程序。她甚至还建立了循环和子程序的概念。由于她在程序设计上的开创性工作,Ada Lovelace被称为世界上第一位程序员。
作为中国最早一批计算数学专业学生的王选院士在他回忆早年生活的文章中认为,董铁宝是“中国第一个程序员”。董铁宝1945年赴美国学习,在伊利诺伊大学学习、研究时,参与了第一代电子计算机伊利亚克机的设计、编程和使用。董铁宝于1956年回到中国并任教于北京大学,成为王选的老师。董铁宝在1968年文化大革命期间自杀身亡。
参考资料
- 王选《回忆北大数学力学系的大学生活》,自《北京大学数学学院九十年》纪念文集。
Category:程序设计
Category:職業
ja:プログラマ
ko:프로그래머
th:โปรแกรมเมอร์
19世纪
1801年至1900年的这一段期间被称为19世纪。這段期間最顯著的是西歐與北美因工業革命促成的技術與經濟上的進步。連帶的,各種自然科學學科,如物理、化學、生物學、地質學等皆逐漸成形,並影響到社會科學(包含社會學、人類學、歷史學等)的誕生或重塑。但另一方面,這些工業國家透過強大的生產力與武器,成功殖民世界大多數地區,並以傾銷的方式破壞許多古文明國度,如中國、印度、土耳其既有的社會與經濟體系,造成這些國家被迫走向“現代化”。此外,民族主義興起,使多數歐洲民族建立起屬於自己的現代國家,並開始建立與保存本國的歷史與文化。
在藝術上,上世紀流行的古典藝術逐漸被浪漫主義替代,後來受到科學與工業革命的刺激,歐洲又開始朝向寫實主義發展,希望透過繪畫、文學、音樂與攝影等方式捕捉現實生活的各種情境與人物,這其中又以印象派最為著名。而社會上,大量的社會衝突不停發生,使得社會主義思潮逐漸發酵,這其中又以深深影響下一世紀的馬克思主義最為著名。
歷史
東亞
南亞
中亞·中東
歐洲
工業國家的人們開始全面探索世界的每個角落與各個部落。可另一方面演化論與民族主義使他們逐漸產生“白種人的負擔”這種優越感,進而埋下20世紀前半葉種族屠殺的伏筆。
北美
中南美
非洲
- 年代 - 世纪 - 千年
重要事件、发展与成就
- 科学技术
- 火车的普及使交通运输大众化了。
- 工业化得到了进一步的发展。大型企业,城市居民的集中使工人阶级成为了一个不可忽视的力量。工会等组织开始出现。
- 电力工业开始出现。发电机,电动机,电灯,电报,无线电通讯相继问世。
- 许多化学元素被发现。化学工业开始出现。化学理论日益完善。
- 牛顿体系达到其完美的顶峰。电学和热学理论化。
- 达尔文发表进化论。
- 战争与政治
- 太平天国起义。
- 经过一系列战争和不平等条约中国成为半殖民地。清朝统治摇摇欲坠。
- 日本通过改革成为东亚一强。
- 拿破仑的战争使民族主义和民主思想在欧洲得到普及。同时它打破了欧洲的许多界线,原来由宗教贵族统治的地域被世俗化了。
- 德意志帝国在普鲁士的领导下产生。意大利独立。在法国封建帝制终于被彻底放弃。
- 美国经过墨西哥战争和南北战争后基本成形并成为北美洲的强国。许多欧洲移民进入美国。
- 在法国的无产阶级第一次建立了自己的政权——巴黎公社。
- 19世纪的五大天灾人祸
- 拿破仑的战争。
- 普法战争。
- 美国南北战争。
- 八国联军入侵北京(?)。
- 。
- 文化娱乐
- 社會與經濟
- 疾病与医学
- 环境与自然资源
- 煤和钢铁是19世纪最重要的矿物。
- 宗教與哲學
重要人物
世界领导人
- 非洲
- 美洲
- 林肯,美国
- 亚洲
- 慈禧太后,中国
- 伊藤博文,日本
- 欧洲
- 拿破仑,法国
- 威廉一世,德国
- 卑斯麦,德国
- 梅特涅,奥地利
- 亚历山大二世,俄罗斯
- 中东
科学家
- 詹姆斯·麦克斯维尔
- 达尔文
- 马克斯
- 爱迪生
- 洪堡
军事领袖
-
艺术家
- 雨果
- 迪更斯
- 哥德
19世纪年历
als:19. Jahrhundert
ja:19世紀
ko:19세기
simple:19th century
th:คริสต์ศตวรรษที่ 19
zh-min-nan:19 sè-kí
图灵
阿兰·麦席森·图灵(Alan Mathison Turing)),英国数学家、邏輯學家,他被視為计算机之父。
1931年图灵进入剑桥大学国王学院,毕业后到美国普林斯顿大学攻读博士学位,二战爆发后回到剑桥,后曾协助军方破解德国的著名密码系统Enigma,帮助盟军取得了二战的胜利。
图灵对于人工智能的发展有诸多贡献,例如图灵曾写过一篇名为《机器会思考吗?》(Can Machine Think?)的论文,其中提出了一种用于判定机器是否具有智能的试验方法,即图灵试验。至今,每年都有试验的比赛。
此外,图灵提出的著名的图灵机模型为现代计算机的逻辑工作方式奠定了基础。
图灵患有严重的花粉过敏症。
孩童和年轻时代
图灵的父亲Julius Mathison Turing是一名英属印度的公务员。图灵的母亲Ethel1911年在印度的Chatrapur怀了孕。他们希望艾伦在英国出生,所以回到伦敦,住在帕丁顿(Paddington)。结果就在那里诞下了艾伦。父亲的公务员委任使他在艾伦小时候经常来往于英伦和印度。由于对于英属殖民地安全的忧虑,他把家庭留在英伦与朋友同住。图灵很小的时候就表现出它的天才,后来就更加显著。他说他在三个星期里自己学会阅读,而且,就对数字和智力游戏着迷。
六岁的时候,他的父母为他在一间叫圣迈克尔的(St. Michael's)日间学校注了册。女校长很快就注意到他的天才,随后Marlborough学院的许多教育家也注意到这点。1926年,他十四岁的时候转到了在多尔瑟(Dorset)的Sherborne寄宿学校。开学的第一天,刚好遇上了大罢工。图灵决心要赶上第一天的课,于是他独自从南桑普敦(Southampton)骑了六十英里的自行车去上学,途中还在一间旅社度过一宵。
图灵天生对科学的喜好并没有给他在Sherborne的老师留下好印象。他们对教育的定义是着重于人文学科而不是科学。虽然如此,图灵继续在他喜欢的学科表现出惊人的能力。还没有学过基础微积分,他就能够解答在他当时年龄来说是很高深的难题。
1928年,图灵十八岁,開始閱讀阿尔伯特·爱因斯坦的著作。他不但能够理解,而且能够从一段并没有明示的文字里推导出爱因斯坦的运动定律。
大学和可计算性的工作
阿尔伯特·爱因斯坦
图灵不愿意如他在科学和数学方面一样地努力去学习人文学科,他的期终考试曾经几次不及格,因此,他不能进入他的第一志愿三一学院,而是去了剑桥大学国王学院。他在哈代指导下学习。哈代是很受尊敬的数学家。从1931年到1934年,他是当时剑桥一个数学研究和教学中心的Sadleirian讲座教授。图灵在1935年成为国王学院研究员。
图灵在他的重要论文《论可计算数及其在判定问题上的应用》(On Computable Numbers, with an Application to the Entscheidungsproblem)(1936年5月28日提交)里,对哥德尔1931年在证明和计算的限制的结果作了重新论述,他用现在叫做图灵机的简单形式裝置代替了哥德尔的以通用算术为基础的形式语言。由于速度很慢,尽管没有一台图灵机会有实际用途,图灵还是证明了这样的机器有能力解决任何可想像的数学难题,如果这些难题是用一种算法来表达。现今,图灵机还是计算理论研究的中心课题。他继续证明了判定问题(Entscheidungsproblem)是没有答案的。他的证明首先展示了图灵机的停机问题(halting problem)是没有答案的,这是说不可能用一个算法来决定一台指定的图灵机是否会停机。尽管他的证明比阿隆佐·邱奇在λ演算方面相等的证明晚发表了几个月,图灵的著作是更易于理解和直观的。 他的通用(图灵)机的概念也是新穎的。这一通用机能够完成任何其他机器所能做的任务。这篇论文还介绍了可定义数的概念。
图灵在普林斯顿大学度过了1937年和1938年的大部分时间,在邱奇指导下学习。1938年,他取得了博士学位。他的论文介绍了超计算(hypercomputation)的概念。这里,图灵机给加上了启示器,因而,可以用于研究不能用算法解答的问题。
1939年图灵回到剑桥,聆听了维特根斯坦关于数学基本原理(foundations of mathematics)的讲座。他们激烈地争论,图灵为形式主义辩护,而维根斯坦則认为把数学抬得太高而且不能发现任何绝对真理。
早期的计算机研究:图灵试验
形式主义
1945年到1948年,图灵在国家物理实验室,负责自动计算引擎(ACE)的工作 。1949年,他成为曼切斯特大学计算机实验室的副主任,负责最早的真正的计算机---曼切斯特一号的软件工作。在这段时间,他继续作一些比较抽象的研究,如“计算机械和智能”。图灵在对人工智能的研究中,提出了一个叫做图灵试验的实验,尝试定出一个决定机器是否有感觉的标准。
1952年,图灵写了一个国际象棋程序。可是,当时没有一台计算机有足够的运算能力去执行这个程序,他就模仿计算机,每走一步要用半小时。他与一位同事下了一盘,结果程序输了。後來美國新墨西哥州洛斯阿拉莫斯國家實驗室的研究群根據圖靈的理論,在MANIAC上設計出世界上第一個電腦程序的象棋。
图案形成和数理生物学的研究
从1952年直到去世,图灵一直在数理生物学方面做研究。他在1952年发表了一篇论文《形態發生的化学基础》(The Chemical Basis of Morphogenesis)。他主要的兴趣是斐波那契葉序列,存在于植物结构的斐波那契數。他应用了反应-扩散公式,现在已经成为图案形成范畴的核心。他后期的论文都没有发表,一直等到1992年《艾伦·图灵选集》出版,这些文章才见天日。
迫害和逝世
1992年
因为图灵的同性恋倾向而遭到的迫害使得他的职业生涯尽毁。1952年,他的同性伴侣协同一名同谋一起闯进了图灵的房子实施盗窃。图灵为此而报警。但是警方的调查结果使得他被控以“明显的猥亵和性颠倒行为”(请参看鸡奸法)。他没有申辩,并被定罪。在著名的公审后,他被给予了两个选择:坐牢或荷尔蒙疗法。他选择了荷尔蒙注射,并持续了一年。在这段时间里,药物产生了包括乳房不断发育的副作用。1954年,图灵因食用浸过氰化物溶液的苹果死亡。很多人相信他的死是有意的,并判决他的死是自杀。但是他的母亲极力争论他的死是意外,因为他在实验室里不小心堆放了很多化学物品。
参见
- 图灵奖
- 著名同性恋和双性恋者
外部链接
- [http://www-history.mcs.st-andrews.ac.uk/history/Mathematicians/Turing.html MacTutor biography of Turing]
- [http://www.turing.org.uk/bio/part1.html A short biography of Turing]
- [http://www.idsia.ch/~juergen/turing.html An even shorter bio]
- [http://www.systemtoolbox.com/article.php?history_id=3 Alan Turing - Towards a Digital Mind: Part 1]
- [http://www.loebner.net/Prizef/TuringArticle.html Computing machinery and intelligence] Full text of article.
- [http://episte.math.ntu.edu.tw/articles/sm/sm_30_11_2/index.html 謎樣的計算機科學之父]
Turing
Turing
Turing
ja:アラン・チューリング
ko:앨런 튜링
simple:Alan Turing
th:แอลัน ทัวริง
计算机電子計算機,--电脑,是一种电子化的计算工具。在中國大陆也經常用計算機來指代電子計算機。就目前而言,電子計算機是根据预先设定好的程序来进行信息处理的一种设备。電子計算機分为巨型计算机(又称“超级计算机”)、大型计算机、中型计算机、小型计算机、微型计算机(简称“微机”,其中包括个人计算机,PC),已经逐步进入社会各个领域,尤其是进入了家庭和个人领域,极大地改变了社会的日常面貌。
定义
上述对于電子計算機的定义包括了许多只能计算或是只有有限功能的特定用途的设备。然而当说到现代電子計算機,最重要的特征是,只要给予正确的规划,任何電子計算機都可以模拟其他任何的行为(只受限于電子計算機本身的存储容量和执行的速度)。据此,现代電子計算機相对于早期的電子計算機也被称为通用型電子計算機。
分类
为了定义什么是電子計算機,对所有计算设备进行分类是必然的。下面的章节介绍几种不同的分类方法。这些分类方法必须一起使用才能准确无误的描述一台特定的電子計算機。
按用途分类
这是最明显的分类法。電子計算機制造商通常用这种方法来描述他们的产品;用户用同样的方法来描述与他们交流的机器。例如:
- 巨型计算机
- 小巨型计算机
- 超級计算机
- 大型计算机
- 企业应用服务器
- 小型计算机
- 工作站
- 个人计算机或者台式机
- 膝上型电脑或者笔记本电脑
- 个人数字助理
- 可以穿戴的电脑
按用途分类很通俗,但是也导致它的不确定性,因为仅仅当前广泛使用的设备被包含进来了。電子計算機发展的快速性意味着其新用途层出不穷,当前的定义很快就过时。许多不再被人使用的電子計算機的类型,例如微分分析器,通常不被列入分类条目之中。所以,必须采用其他分类方法来明白无误的定义電子計算機这条术语。
按制造技术分类
- 机械式电脑
- 半电子—半机械式
- 电子式
- 晶体管式
- 半导体集成电路式
按设计特点分类
现代電子計算機综合了许多基本的设计特点,这些特点是许多贡献者在很多年里逐渐开发出来的。设计特点经常独立于实现技术。现代電子計算機的综合性能来源于这些特点互相作用的方式。一些重要的设计特性罗列如下:
数字式和模拟式
设计一种電子計算機时需要有一个基本的决定,即这种電子計算機应该是数字式还是模拟式的。数字式处理离散的数字性或者符号性值,而模拟式仍然应用于一些特殊目的的领域,例如机器人和回旋加速器的控制。其他的途径,象脉冲计算和量子计算,也是可能存在的;但是他们或者用于很特殊的目的或者仍然处于试验阶段。
二进制和十进制
在数字式计算的发展历程中,一个重大的设计进步是引入了二进制作为内部的数字系统。这种方法避免了那些基于其他数字系统的電子計算機中必须的复杂的进位机制,例如十进制系统。采用二进制的好处是简化了实现算术功能和逻辑运算的设计。
按功能分类
对不同的计算设备分类的最好办法可能是按他们的内在能力分类,而不是按他们的用途,实现技术,或者设计特性来分类。電子計算機按能力可以分为三大类:只能计算一种函数的单用途设备,可以计算有限范围内的函数的特殊用途设备,以及我们天天使用的通用设备。过去電子計算機这个词用来描述所有这些类型的机器,但是现在口语中的用法通常特指通用電子計算機了。
通用電子計算機
按定义来说,一台通用電子計算機能用来解决任何问题,只要这个问题可以用程序来表示。然而,程序运行的是有一些实际的限制的:電子計算機的存储能力,问题的大小,以及运行的速度。在1934年,艾伦·图灵证明了:给定正确的程序,任何通用電子計算機可以模拟其他任何电脑的行为。他的数学证明是纯粹理论上的,因为那时候还没有通用電子計算機存在。这个证明的意义是深远的:例如,从理论上说,现在的通用電子計算機能够模拟任何未来制造的通用電子計算機的行为,尽管速度很慢。
通用電子計算機也称作完备的图灵机,它经常被用来作为定义现代電子計算機的能力上限。然而,这种定义是有问题的。几种过分单纯化的计算设备已经展现出完备的图灵机特性。但是他们都处于一种幽默化表达的“图灵沥青陷阱”(?)状态,一种什么都是有可能的,但是和实用性一点都不沾边。现代電子計算機不仅仅是理论上的通用化,而且是实用化的通用工具。
从1930年代中期到1940年代后期,许多人在开发现代的、数字的、电子的,通用電子計算機。许多试验型的机器被造了出来并且可能是图灵完备化的。这些机器在当时都被宣称为第一台電子計算機,然而它们都只有有限的处理通用问题的能力,所以他们的设计最终都被抛弃了。
存储程序電子計算機
特殊用途電子計算機
单用途電子計算機
按操作类型分类
電子計算機也可以按用户操作的方式来分类。有两大类操作方式:批处理和交互式处理。
嵌入式電子計算機
从1980年代起,许多的家用设备,不只包括电视游戏控制器,而且延伸到移动电话、录相机、PDA和许多其他的工业、电子设备,都内嵌有特定用途的電子計算機。这些電子計算機也通常被称之为“微控制器”或者嵌入式計算機。
个人计算机
就目前而言,一般人所提到的计算机都是指个人计算机。
大型计算机
巨型计算机
成指数级增长的电脑的发展
划分不同种電子計算機的难度因为它的计算能力的指数增长更加复杂化。粗略估计,从1900年到现在,计算设备的计算能力(按1000美元能够买到的设备在每秒种内处理运算指令的数量)每一年半到两年就增加一倍。英特尔公司的创始人之一,戈登·E·摩尔在1965年首次描述了電子計算機发展的这种特性(参考摩尔定律)。快速发展的電子計算機制造工程技术维持了这种指数级的能力增长。与这种能力增长携手并进的另一过程是戏剧化的小型化过程。第一代的電子計算機,例如ENIAC(出现于1946年),都是一些重达数吨,占据好几间房间,需要多个操作员来维持它们正常工作的庞然大物。这些大家伙太贵了,以至于只有政府和大型机构才能够买得起。它们也的确太怪异了,当时的人们都认为几台,或者几十台这样的机器就能够满足全世界的需求了。相比之下,现代電子計算機比第一代前辈多了几个数量级,更加多才多艺,而且便宜、小巧,还随处可见。
電子計算機是如何工作的
自从1940年代第一台電子計算機问世以来,大部分的電子計算機仍采用冯·诺依曼结构体系,虽然其相关技术已经发生了翻天覆地的变化。
冯·诺依曼结构将一个電子計算機系统分为四个主要部分:算术逻辑单元、控制器、存储器和输入输出设备。这些部分是通过总线连接起来的。
参看
- 電子計算機的历史
- 计算机图片
- 电脑游戏
- 计算机软件
- 计算机网络
Category:计算机硬件
ja:コンピュータ
ko:컴퓨터
ms:Komputer
nb:Datamaskin
simple:Computer
th:คอมพิวเตอร์
图灵机即确定型图灵机
1936年,阿兰·图灵提出了一种抽象的计算模型 ── 图灵机 (Turing Machine)。图灵的基本思想是用机器来模拟人们用纸笔进行数学运算的过程,他把这样的过程看作下列两种简单的动作:
- 在纸上写上或擦除某个符号;
- 把注意力从纸的一个位置移动到另一个位置;
而在每个阶段,人要决定下一步的动作,依赖于 (a) 此人当前所关注的纸上某个位置的符号和(b) 此人当前思维的状态。为了模拟人的这种运算过程,图灵构造出一台假想的机器,该机器由以下几个部分组成:
# 一条无限长的纸带。纸带被划分为一个接一个的小格子,每个格子上包含一个来自有限字母表的符号,字母表中有一个特殊的符号 表示空白。纸带上的格子从左到右依此被编号为 0, 1, 2, ... ,纸带的右端可以无限伸展。
# 一个读写头。该读写头可以在纸带上左右移动,它能读出当前所指的格子上的符号,并能改变当前格子上的符号。
# 一个状态寄存器。它用来保存图灵机当前所处的状态。图灵机的所有可能状态的数目是有限的,并且有一个特殊的状态,称为停机状态。
# 一套控制规则。它根据当前机器所处的状态以及当前读写头所指的格子上的符号来确定读写头下一步的动作,并改变状态寄存器的值,令机器进入一个新的状态。
注意这个机器的每一部分都是有限的,但它有一个潜在的无限长的纸带,因此这种机器只是一个理想的设备。图灵认为这样的一台机器就能模拟人类所能进行的任何计算过程。
图灵机的形式化定义
一台图灵机 (Turing Machine)是一个七元组 ,其中 都是有穷集,且满足
# 是状态集合;
# 是输入字母表,其中不包含特殊的空白符 ;
# 是带字母表,其中 且 ;
# 是转移函数,其中 表示读写头是向左移还是向右移;
# 是起始状态;
# 是接受状态。
# 是拒绝状态,且 。
图灵机 将以如下方式运作:
开始的时候将输入符号串
从左到右依此填在纸带的第 号格子上,
其他格子保持空白(即填以空白符)。
的读写头指向第 0 号格子,
处于状态 。
机器开始运行后,按照转移函数 所描述的规则进行计算。
例如,若当前机器的状态为 ,读写头所指的格子中的符号为 ,
设 ,
则机器进入新状态 ,
将读写头所指的格子中的符号改为 ,
然后将读写头向左移动一个格子。
若在某一时刻,读写头所指的是第 0 号格子,
但根据转移函数它下一步将继续向左移,这时它停在原地不动。
换句话说,读写头始终不移出纸带的左边界。
若在某个时刻 根据转移函数进入了状态 ,
则它立刻停机并接受输入的字符串;
若在某个时刻 根据转移函数进入了状态 ,
则它立刻停机并拒绝输入的字符串。
注意,转移函数 是一个部分函数,
换句话说对于某些 ,,
可能没有定义,
如果在运行中遇到下一个操作没有定义的情况,
机器将立刻停机。
图灵机的基本术语
设 是一台图灵机,
# 的带描述(tape description)是一个函数 ,其中 表示 的带上第 个格子中的符号;
# 的格局(configuration)是一个三元组 ,其中 是当前的带描述, 是当前的状态, 是当前读写头所处的位置;
# 设 , 是 的格局,设,若满足,以及则称 从格局 产生格局,记作。
# 设 为 的格局,若 则称 为接受格局;若 则称 为拒绝格局;接受格局和拒绝格局统称为停机格局。
设 是一台图灵机,将字符串
作为其输入,若存在格局序列 ,使得
# 是 在输入 上的起始格局,即 ,其中
# ,其中 ;
# 是接受格局。
则称 接受字符串 ,且 称为图灵机 在输入 上的接受计算历史。同理,若 是拒绝格局,则称 拒绝 ,且 称为图灵机 在输入 上的拒绝计算历史。 所接受的所有字符串的集合称为 的语言,记作 。
圖靈機的例子
[TODO: 這裡需要補充幾個例子]
設
和.
比如做一個以 1 的個數表示數值的加法運算,
在磁带上的數據是 0000001110110000 ,
就是3+2的意思.
程序如下
0,0 -> 0,0R
0,1 -> 1,1R
1,0 -> 10,1R
1,1 -> 1,1R
10,0 -> 11,0L
10,1 -> 10,1R
11,0 -> E
11,1 -> 0,0S
第一行程序 0,0->0,0R 意思就是如果機器讀到0,就將其變成0,狀態變為0, 讀寫頭向右移動一格. R就是向右移動一格,L就是向左移一格,E是錯誤,S是停機. xx,y -> aa,bb 中 xx是當前狀態, y是當前格子的值, aa是程序下一步的狀態, b是當前格的修改值.
雖然這裡給出與上面不同形式的定義, 但兩者是等價的, 這裡的定義並不比上面的定義能完成更多的工作.
步數 狀態 磁帶 步數 狀態 磁帶
- - - - - - - - - - - - - - - - -
1 0 0000001110110000 9 1 0000001110110000
2 0 0000001110110000 10 1 0000001110110000
3 0 0000001110110000 11 10 0000001111110000
4 0 0000001110110000 12 10 0000001111110000
5 0 0000001110110000 13 10 0000001111110000
6 0 0000001110110000 14 11 0000001111110000
7 0 0000001110110000 15 0 0000001111100000 (停機)
8 1 0000001110110000 -- 停機 --
通用图灵机
对于任意一个图灵机,因为它的描述是有限的,因此我们总可以用某种方式将其编码为字符串。
我们用 表示图灵机 的编码。
我们可以构造出一个特殊的图灵机,它接受任意一个图灵机 的编码 ,然后模拟 的运作,这样的图灵机称为通用图灵机(Universal Turing Machine)。现代电子计算机其实就是这样一种通用图灵机,它能接受一段描述其他图灵机的程序,并运行程序实现该程序所描述的算法。
图灵机的变体
图灵机有很多变种,但可以证明这些变种的计算能力都是等价的,即它们识别同样的语言类。
证明两个计算模型 和 的计算能力等价的基本思想是:
用 和 相互模拟,
若 可模拟 且 可模拟 ,
显然他们的计算能力等价。注意这里我们暂时不考虑计算的效率,只考虑计算的理论上“可行性”。
首先我们可以发现,改变图灵机的带字母表并不会改变其计算能力。例如我们可以限制图灵机
的带字母表为 ,这并不会改变图灵机的计算能力,因为我们显然可以用带字母表为
的图灵机模拟带字母表为任意有限集合 的图灵机。
另一个要注意的是,如果我们允许图灵机的纸带两端都可以无限伸展,这并不能增加图灵机的计
算能力,因为我们显然可以用只有纸带一端能无限伸展的图灵机来模拟这种纸带两端都可以无限
伸展的图灵机。
如果我们允许图灵机的读写头在某一步保持原地不动,那也不会增加其计算能力,因为我们可以用
向左移动一次再向右移动一次来代替在原地不动。
其它的常见图灵机变种包括:
- 多带图灵机
- 非确定型图灵机
- 枚举器
图灵可计算性
- 图灵可识别语言
- 图灵可枚举语言
- 图灵可判定语言
- 图灵可计算函数
- 递归可计算函数
- 停机问题
- 可判定性
- 不可判定性
其它等价的计算模型
除了图灵机以外,人们还发明了很多其它的计算模型。包括:
- 算盘机
- 递归函数
- λ演算
- 生命游戏
- 马尔可夫算法
然而这些模型无一例外地都和图灵机的计算能力等价,因此邱奇,图灵和歌德尔
提出了著名的邱奇-图灵论题:一切直觉上能行可计算的函数都可用图灵机计算,反之亦然。
参考文献
- Turing, A., [http://www.abelard.org/turpap2/tp2-ie.asp On Computable Numbers, With an Application to the Entscheidungsproblem], Proceedings of the London Mathematical Society, Series 2, Volume 42, 1936; reprinted in M. David (ed.), The Undecidable, Hewlett, NY: Raven Press, 1965;
- Michael Sipser, Introduction to the Theory of Computation, PWS Publishing, 1997. ISBN 053494728X
外部链结
- [http://www.cheransoft.com/vturing/ Visual Turing, a Turing machine interactive simulator/IDE] (free software for Windows).
- [http://www.igs.net/~tril/tm/ Suzanne Brittons Turing Machine Simulator] (java applet).
- [http://sourceforge.net/projects/turing-machine/ C++ Simulator of a Nondeterministic and Deterministic Turing Machine] (free software).
- [http://citeseer.org/cs?q=Turing+machine Citations from CiteSeer]
category:可计算模型
category:图灵机
category:形式語言
ja:チューリングマシン
ko:튜링 기계
th:เครื่องจักรทัวริง
时间复杂度时间复杂度是指完成一个算法所需要的平均时间。
Category:代数
Category:算法
电路电路(电子线路)是由电气设备和元器件按一定方式联接起来,为电流流通提供了路径的总体,也叫电子网路,简称网络。如电阻、电容、电感、二极管、三极管和开关等,构成的网络。电路的大小可以相差很大,小到硅片上的集成电路,大到输电网。根据所处理信号的不同,电子电路可以分为模拟电路和数字电路。
模拟电路对信号的电流和电压进行处理。最典型的模拟电路应用包括:放大电路、振荡电路、线性运算电路(加法、减法、乘法、除法、微分和积分电路)。
数字电路中信号大小只表示有限的状态,多数采用布尔代数逻辑对信号进行处理。典型数字电路有,振荡器、寄存器、加法器、减法器等。
所有的电路都遵循一些基本电路定律。
- 基尔霍夫电流定律: 流入一个节点的电流总和等于流出节点的电流总合。
- 基尔霍夫电压定律: 环路电压的总合为零。
- 欧姆定律: 线性元件(如电阻)两端的电压等于元件的阻值和流过元件的电流的乘积。
- 诺顿定理: 任何由电压源与电阻构成的两端网络总可以等效为一个理想电流源与一个电阻的并联网络。
- 戴维宁定理: 任何由电压源与电阻构成的两端网络总可以等效为一个理想电压源与一个电阻的串联网络。
分析包含非线性器件的电路则需要一些更复杂的定律。实际电路设计中,电路分析更多的通过计算机模拟来完成。
参见
- 电阻, 阻容网络, 直流, 交流, 负载, 电路图,
Category:电路
ja:電気回路
编程语言程序设计语言,是一组用来定义计算机程序的语法规则。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。
程序设计语言原本是被设计成专门使用在计算机上的,但它们也可以用来定义算法或者数据结构。正是因为如此,程序员才会试图使程序代码更容易阅读。
设计语言往往使程序员能够比使用机器语言更准确地表达他们所想表达的目的。对那些从事计算机科学的人来说,懂得程序设计语言是十分重要的,因为在当今所有的计算都需要程序设计语言才能完成。
在过去的几十年间,大量的程序设计语言被发明、被取代、被修改或组合在一起。尽管人们多次试图创造一种通用的程序设计语言,却没有一次尝试是成功的。之所以有那么多种不同的编程语言存在的原因是,编写程序的初衷其实也各不相同;新手与老手之间技术的差距非常大,而有许多语言并对新手来说太难学;还有,不同程序之间的运行成本()各不相同。
有许多用于特殊用途的语言,只在特殊情况下使用。例如,PHP专门用来显示网页;Perl更适合文本处理;C语言被广泛用于操作系统和编译器的开发(所谓的系统编程)。
高级程序设计语言(也称高级语言)的出现使得计算机程序设计语言不再过度地倚赖某种特定的机器或环境。这是因为高级语言在不同的平台上会被编译成不同的机器语言,而不是直接被机器执行。最早出现的编程语言之一FORTRAN的一个主要目标,就是实现平台独立。
虽然大多数的语言可以既被编译()又被解译(),但大多数只在一种情况下能够良好运行。在一些编程系统中,程序要经过几个阶段的编译,一般而言,后阶段的编译往往更接近机器语言。这种常用的使用技巧最早在1960年代末用于BCPL,编译程序先编译一个叫做“0代码”的转换程序(),然后再使用虚拟器转换到可以运行于机器上的真实代码。这种成功的技巧之后又用于Pascal和P-code,以及Smalltalk和二进制码,虽然在很多时候,中间过渡的代码往往是解译,而不是编译的。
如果所使用的翻译的机制是将所要翻译的程序代码作为一个整体翻译,并之后运行内部格式,那么这个翻译过程就被成为编译。因此,一个编译器是一个将人可阅读的程序文本(叫做源代码)作为输入的数据,然后输出可执行文件()。所输出的可执行文件可以是机器语言,由计算机的中央处理器直接运行,或者是某种模拟器的二进制代码。
如果程序代码是在运行时才即时翻译,那么这种翻译机制就被称作解译。经解译的程序运行速度往往比编译的程序慢,但往往更具灵活性,因为它们能够与执行环境互相作用。参见解译语言。
特点
每一种程序设计语言可以被看作是一套包含语法、词汇和含义的正式规范。
这些规范通常包括:
- 数据和数据结构
- 指令及流程控制
- 引用机制和重用
- 设计哲学
大多数被广泛使用或经久不衰的语言,拥有负责标准化的组织,经常会晤来创造及发布该语言的正式定义,并讨论扩展或贯彻现有的定义。
数据和数据结构
现代计算机内部的数据都只以二元方式储存,即开-关模式()。现实世界中代表信息的各种数据,例如名字、银行账号、度量以及同样低端的二元数据,都经由程序设计语言整理,成为高端的概念。
一个程序中专门处理数据的那个系统被称为程序语言的型态系统();对型态系统的研究和设计被称为型态理论()。语言可以被分为静态型态系统(),例如C++和Java,和动态型态系统(),例如Lisp,JavaScript,Tcl和Prolog。前者可被进一步分为包含宣告型态()的语言,即每一个变量和函数的型态都清楚地宣告,或type-inferred语言(例如MUMPS,ML)。
大多数语言还能够在内置的型态基础上组合出复杂的数据结构型态(使用数组,列表,堆栈,文件等等)。面向对象语言(,又译作“物件导向语言”)允许程序员定义新的数据型态,即“对象”或“物件”(),以及运行于该对象的函数()和方法()。
除了何时以及如何确定表达式和型态的联系,另外一个重要的问题就是语言到底定义了哪些型态,以及允许哪些型态作为表达式的值。诸如C编程语言之类的低端语言允许程序命名内存位置、内存区域以及编译时的常量;ANSI C甚至允许表达式返回结构值()。功能性的语言一般允许变量直接使用运行时计算出的值,而不是指出该值可能储存的内存地址。
指令及流程控制
一旦数据被确定,机器必须被告知如何对这些数据进行处理。较简单的指令可以使用关键字或定义好的语法结构来完成。不同的语言利用序列系统来取得或组合这些语句。除此之外,一个语言中的其他指令也可以用来控制处理的过程(例如分支、循环等)。
引用机制和重用
引用的中心思想是必须有一种间接设计储存空间的方法。最常见的方法是通过命名变量。根据不同的语言,进一步的引用可以包括指向其他储存空间的指针。还有一种类似的方法就是命名一组指令。大多数程序设计语言使用宏调用、过程调用或函数调用。使用这些代替的名字能让程序更灵活,并更具重用性。
程序设计语言的历史
二十世纪四十年代当计算机刚刚问世的时候,程序员必须手动控制计算机。当时的计算机十分昂贵,唯一想到利用程序设计语言来解决问题的人是德国工程师楚泽()。
几十年后,计算机的价格大幅度下跌,而计算机程序也越来越复杂。也就是说,开发时间已经远比运行时间来得宝贵。
于是,新的集成、可视的开发环境越来越流行。它们减少了所付出的时间、金钱(以及脑细胞)。只要轻敲几个键,一整段代码就可以使用了。这也得益于可以重用的程序代码库。
常见的程序设计语言
- APL、A+和J
- Ada
- | | |