编程大神,老爸们,帮我看看我学校教学是不是有问题?
人不是神,所以需要计算机辅助,编程大牛才不来知乎,还有我还没找女朋友呢,别占我便宜
@-@
我觉得应该先想明白什么是计算机,怎么整个计算机出来,现代计算机的各种功能设计和本质意义。
一开始的纺织机械,到纸带机,到电子管,再到晶体管再到大规模集成电路。
它们其中抽象了什么概念?它们有什么共同点和不同点?(自己找资料)
从哪里发展来的,怎么发展来的?
怎么理解数学与逻辑的抽象化应用?
图灵完全
计算机理论的基础是可计算性理论,而可计算性理论的基石是“图灵机”与“丘奇-图灵论题”。
可计算性(可计算数):
若以数字为对象的集合,可计算数便是指图灵机通过有限的通用算法可以得到的数字,基本就是所有实数。
有理数靠加减乘除,无理数靠乘方开方,超越数可以用级数,想知道√2或者π的第一亿位是多少,写一段程序运行就得到了。
比如:所有计算或算法都可以由一台图灵机来执行。
或者以任何常规编程语言编写的计算机程序都可以翻译成一台图灵机,反之任何一台图灵机也都可以翻译成大部分编程语言的程序。
又或者:逻辑和数学中的有效或机械方法可由图灵机来表示。事实上,如何界定有效方法、执行算法、有限步骤,这些也正是该论题重点讨论的对象。
不可计算数:
不可计算数虽然理论上是一个常数,但理论上也证明了,永远也无法求出它来。因为求它的过程,会影响结果。
就是现在的结果不是你要的答案,回到之前的步骤试图改变,但结果会变成什么样子,回归迭代之前是不知道的,这是有点悖论了…
甚至在此之后还有更加诡异的,语言都无法定义的数字,叫做不可定义数,目前还没有数学家成功构造出来。
历史:
在1936年的一篇论文中,阿兰·图灵引入了图灵机,来证明“判定性问题”是无法解决的;阿隆佐·邱奇利用递归函数和lambda可定义函数,做出了类似的论题,用来描述有效可计算性;还是在1936年,图灵根据邱奇的工作,进一步证明了图灵机实际上描述的是同一集合的函数;再之后,更多用于描述有效计算的机制被提出来,比如寄存器机器、波斯特体系、组合可定义性以及马可夫算法等等。这些都被证明在计算上和图灵机拥有相同的能力,能与通用图灵机互相模拟,就被称为图灵完全。《我的世界》就被证明是图灵完全的,乐高积木据说也是,还有万智牌等等。
数学家和计算学家们渐渐弄清楚了,虽然形式、语言、系统各有不同,现代计算机本质上都和图灵机等价——现代计算机能完成的任务,图灵机也一定能完成;图灵机做不到的事情,现在计算机也做不到。
这就叫可计算性。
虽然现如今的计算机技术更发达了,速度也更加的快了。
但是算法其实大多还是平面,甚至一维展现的,我们把计算逻辑抽象出来,就是通过对近乎无限长的打孔纸带的组合加法,本身的效率低下并且结果也不直观,需要经过非常多的转制步骤才能得到想要的结果。
目前的普遍使用的计算机解决问题的最最最本质就是“加法器”了,所以,你需要学习编码学习算法构建,学习基本原理。
一些基础概念:
(由于记事本记了很多条,里面有概念重复的未整理)
计算机组成原理是指计算机硬件系统的设计和实现原则。它包括指令集系统、寄存器和算术逻辑单元(ALU)等核心组件,以及数据通路和控制器等辅助组件。
指令集系统是计算机能够理解和执行的指令集合。它定义了计算机的操作方式和功能,包括算术运算、逻辑运算、存储访问等。指令集系统的特点是清晰、高效和灵活。它能够通过不同的指令组合,实现各种复杂的计算和操作,满足不同应用的需求。
寄存器是计算机中用于存储和操作数据的高速存储器。它具有快速的读写速度和较小的容量。寄存器的特点是高速、临时和有限。它可以临时存储计算过程中的中间结果和待处理的数据,提高计算的效率和速度。
算术逻辑单元(ALU)是计算机中负责执行算术和逻辑运算的核心部件。它由各种逻辑门和算术运算电路组成,能够进行加法、减法、乘法、除法等数值计算,以及与、或、非、异或等逻辑运算。ALU的特点是高速、灵活和可编程。它能够根据指令集系统的要求,执行不同的计算和逻辑操作。
计算机组成原理
计算机组成原理与数学有着密切的关系。
数学是计算机科学的基础,计算机组成原理中的指令集系统、寄存器和ALU等都是基于数学原理和算法设计的。例如,指令集系统中的算术运算和逻辑运算是基于数学运算规则和逻辑推理原理的。寄存器和ALU的设计也依赖于数学模型和电路理论。
同时,计算机组成原理的发展也推动了数学的进步。计算机的出现和发展,催生了计算机科学和计算数学的研究领域。计算机组成原理的设计和实现,需要借助数学工具和方法,如布尔代数、逻辑推理、离散数学等。
因此,计算机组成原理与数学紧密相连,相互促进和影响。通过数学的基础和方法,计算机组成原理能够实现高效、灵活和可靠的计算和操作,推动了计算机科学和技术的发展。
借助数学工具和方法,如布尔代数、逻辑推理、离散数学等。因此,计算机组成原理与数学紧密相连,相互促进和影响。通过数学的基础和方法,计算机组成原理能够实现高效、灵活和可靠的计算和操作,推动了计算机科学和技术的发展。
计算机数学应用
计算机组成原理中的数学应用和具体实现包括:
逻辑门和布尔代数:逻辑门是计算机中用于实现逻辑运算的基本电路,如与门、或门、非门等。它们的设计和实现基于布尔代数,通过逻辑运算规则实现逻辑功能。布尔代数是一种数学体系,用于描述逻辑关系和运算规则,它在计算机组成原理中起到了关键作用。
逻辑电路设计:计算机组成原理中的逻辑电路设计依赖于数学模型和方法。通过使用逻辑门和逻辑电路,可以实现复杂的逻辑功能和算法。逻辑电路设计需要借助数学的逻辑推理和符号表示,以及电路理论和信号处理的知识。
算术运算和数值计算:计算机组成原理中的算术逻辑单元(ALU)负责执行算术和逻辑运算。它的设计基于数学的算术运算规则和算法,如加法、减法、乘法、除法等。ALU中的电路和逻辑门实现了这些数学运算,使计算机能够进行数值计算和处理。
数制转换和编码:计算机组成原理中涉及到不同的数制和编码方式,如二进制、十进制、十六进制等。数制转换和编码是基于数学的进位制原理和编码规则实现的。通过数制转换和编码,可以实现数据的表示、传输和存储。
离散数学和图论:离散数学是计算机科学中的重要分支,它涉及到计数、集合论、图论等数学概念和方法。离散数学的应用在计算机组成原理中体现在指令集系统的设计和优化、寻址方式的选择、存储器的组织和管理等方面。
计算机组成原理中的数学应用和具体实现是多方面的,涉及到逻辑运算、算术运算、数制转换、编码和离散数学等。这些数学应用和实现使得计算机能够高效、可靠地执行各种计算和操作。
离散
例如:在计算机组成原理中使用图论来优化指令集系统的设计。指令集系统是计算机硬件和软件之间的接口,它定义了计算机可以执行的指令集合。在设计指令集系统时,需要考虑指令之间的依赖关系、指令执行的顺序和优先级等因素。
图论提供了一种分析和优化指令集系统的方法。可以使用有向图来表示指令之间的依赖关系,其中图的节点表示指令,有向边表示指令之间的依赖关系。通过对这个有向图进行分析,可以确定指令的执行顺序和优先级,以达到最优的指令执行效率。
图论中的一些算法和技术,如拓扑排序、最短路径算法和最小生成树算法等,在指令集系统的设计中可以得到应用。这些算法和技术可以帮助设计者分析指令之间的关系,找到最优的指令执行顺序,从而提高计算机的性能和效率。
图论和寻址方式
例如使用图论来进行寻址方式的选择。在计算机组成原理中,寻址方式是指计算机中用于访问内存或外部设备的地址计算方法。不同的寻址方式会影响计算机的存储器访问效率和数据传输速度。
使用图论的方法可以帮助选择最优的寻址方式。可以将计算机的存储器和外部设备抽象成一个图,其中节点表示存储单元或设备,边表示数据传输路径。通过对这个图进行分析,可以确定最短路径或最小生成树,从而选择最优的寻址方式。
例如,假设计算机有多个存储器和外部设备,每个存储器和设备之间的传输速度不同,同时计算机对不同存储器和设备的访问频率也不同。通过构建一个图,其中节点表示存储器和设备,边表示数据传输路径,并且为每个边赋予相应的权重(表示传输速度),可以使用最短路径算法来确定访问不同存储器和设备的最优路径,从而选择最优的寻址方式。
最短路径
假设有一个城市的地图,其中有多个交叉路口和道路连接这些交叉路口。现在需要找到从一个交叉路口到另一个交叉路口的最短路径。
可以使用最短路径算法来解决这个问题。首先,将每个交叉路口看作图中的一个节点,将道路看作节点之间的边。
可以使用图论中的最短路径算法,如Dijkstra算法或Floyd-Warshall算法,来找到从起始交叉路口到目标交叉路口的最短路径。
要找到从交叉路口A到交叉路口C的最短路径就可以使用最短路径算法来解决这个问题。将每个交叉路口看作图中的一个节点,将道路看作节点之间的边。然后用Dijkstra算法来找到从交叉路口A到交叉路口C的最短路径。
最短路径算法的应用
在计算机中,最短路径算法可以应用于许多实际问题,如导航系统、网络路由、物流规划等。下面是一些常见的应用最短路径算法的情况:
导航系统:最短路径算法可以用于计算从一个地点到另一个地点的最短路线,以提供导航指引。例如,当我们在手机上使用导航应用时,应用程序会根据当前位置和目标位置,使用最短路径算法来计算最快到达目标位置的路线。
网络路由:在计算机网络中,最短路径算法可以用于确定数据包在网络中的最佳路径。路由器使用最短路径算法来选择下一跳节点,以将数据包从源节点传输到目标节点。
源节点传输到目标节点。
物流规划:最短路径算法可以用于规划货物的最佳运输路线。物流公司可以使用最短路径算法来确定从供应商到客户的最短路径,以最大程度地减少运输成本和时间。
最短路径算法实现
在计算机中应用最短路径算法的步骤如下:
构建图:将问题转化为图的形式,其中节点表示交叉路口或地点,边表示道路或路径。
初始化距离数组:将起始节点的距离设为0,其他节点的距离设为无穷大。
选择节点:选择距离数组中距离最小的节点,并将其标记为已访问。
更新距离:更新与当前节点相邻的节点的距离,如果新的距离比原来的距离小,则更新距离数组。
重复步骤3和步骤4,直到所有节点都被标记为已访问。
输出结果:最终的距离数组即为从起始节点到其他节点的最短路径长度。
根据具体的应用场景和问题,可以选择不同的最短路径算法,如Dijkstra算法、Floyd-Warshall算法、Bellman-Ford算法等。这些算法有不同的时间复杂度和适用条件,可以根据具体情况选择最合适的算法。
离散数学应用与寻址方式
离散数学在计算机科学中的寻址方式中有许多应用。以下是一些例子:
哈希表(Hash Table):哈希表是一种常见的数据结构,用于快速存储和检索数据。离散数学中的散列函数用于将输入数据映射到哈希表中的特定位置。这种映射关系可以使用离散数学中的模运算、散列函数和折叠等技术来实现。
数组(Array):数组是一种数据结构,用于存储一组有序的元素。离散数学中的整数和排列等概念可以应用于数组的索引和排序。例如,数组的索引从0开始,可以使用离散数学中的整数概念来描述数组的大小和访问方式。
位操作(Bit Manipulation):位操作是一种对二进制位进行操作的技术,用于在计算机中处理和存储数据。离散数学中的布尔代数和逻辑运算可以应用于位操作,例如位与、位或、位异或等运算。
地址编码(Address Encoding):在计算机中,地址编码用于将内存地址映射到特定的存储单元。离散数学中的编码和解码技术可以应用于地址编码,例如格雷码(Gray Code)和哈夫曼编码(Huffman Code)等。
编译器设计(Compiler Design):在编译器设计中,离散数学中的正则表达式、有限自动机和上下文无关文法等概念可以应用于词法分析和语法分析。这些概念用于描述和分析程序代码的结构和语法规则。
(未完)