计算机概述系列目录

第一章 计算机概述(一)——计算机发展历程与基础表示

第二章 计算机概述(二)——构建CPU

第三章 计算机概述(三)——编程介绍


文章目录

  • 计算机概述系列目录
  • 前言
  • 一、早期的编程方式
  • 二、编程语言发展史
  • 三、算法
  • 四、数据结构
  • 五、图灵机
  • 六、软件工程

前言

学习计算机概述,目前参考资料来源《计算机科学速成课》(https://www.bilibili.com/video/BV1EW411u7th?p=3),以后逐步补充、更新。
编程:通过对计算机进行一系列的规定,利用计算机解决问题。
内部程序运行主要依靠CPU与内存,而程序如何进入内存以及编程的基本介绍是本章主要讲述的内容。


一、早期的编程方式

穿孔纸卡(Punch Cards)——插线板(Plugboards)——面板编程(Panel progamming)——内存(存储程序计算机(Stored-Program Computers))

  1. 穿孔纸卡/纸带是最早出现的编程模式,主要用来输入/输出数据,代表:纺织机、穿孔纸卡读取器。缺点:当数据、指令较多时,需要的纸卡或纸带多,难以收集、整理。
  2. 插线板是为执行不同计算的控制面板,通过更换连通的线路选择不同的计算方法,以此存储程序。缺点:更换线路时复杂、耗时长。
  3. 面板编程:因穿孔纸卡编程成本昂贵,便诞生了利用开关进行编程的模式,即利用开关编辑指令/数据的二进制编码等,一行一行输入。
  4. 现代计算机采用更为简单、灵活的存储程序的方式:内存。优点:程序易于修改、方便CPU快速读取。(早期存入数据与程序仍然是用穿孔纸卡读取器的方式)
    如果内存足够,不仅可以存储程序,也可以存储数据,这样的存储结构称为冯诺依曼结构,标志:一个处理器(有算术逻辑单元)+数据寄存器+指令寄存器+指令地址寄存器+内存(负责存数据和指令)

二、编程语言发展史

程序在硬件层面编程困难,程序员更期待一种更通用、更软的媒介——软件,让程序员更专注于处理问题,而不是底层硬件实现细节。

  1. 情况:计算机只能理解二进制——机器语言/机器码(Machine Code),与文字语言相差甚远。
  2. 早期编程过程:先在纸上写一个“高层次版”代码描述(伪代码Pseudo Code),然后用“操作码表”把伪代码转成二进制机器码。
    缺点:二进制的机器码远离生活,记忆、操作复杂。
  3. 汇编语言:为了将机器码向更高层次进化,以减轻程序员负担,由此诞生了一种新语言——汇编语言,每个操作码分配一个简单的名字“助记符”(mnemonics),助记符后面跟数据,形成完成指令。并配备一个二进制程序——汇编器(Assembler),将助记符等文字语言自动转成二进制指令。
    缺点:虽然对机器码进行了优化、诞生了许多便捷操作(利用可跳转文字标签,自动分析JUMP地址),便于记忆,但一般都是一条汇编指令对应一条机器指令,汇编语言与底层硬件关系紧密,仍需要思考寄存器类型以及内存地址等。
  4. 高级语言:更进一步抽象汇编语言,一条指令对应多条机器指令,且不用考虑寄存器地址等硬件层面的信息。并配备一个编译器,将高级语言转化成汇编语言或者机器语言。

三、算法

算法:解决问题的具体步骤。
好坏判断标准:所需步骤、所占内存大小——复杂度:算法输入规模和运行步骤之间的关系,表示运行速度的量级。

  1. 排序算法
    (1)选择排序(Selection Sort)
    比较数组中所有元素选出最小的元素,再继续选出剩余元素中最小的值,依次排列。复杂度O(n²)。
    (2)归并排序(Merge Sort)
    检查数组大小是否>1,if true,就把数组分成两半,直到每一个数组里只含一个元素。然后两个为一组进行比较,按大小顺序排列后合并为一组。比较完成后,继续以两个为一组进行比较(两小的先比较,剩下的再与另一组的另一个数进行比较)。以此循环,直至所有数组合并为1个数据。复杂度O(n*logn)。
  2. 图搜索(Graph Search)
    尝试每条路,计算出每条路的成本,时间复杂度是O(n!)
    Dijkstra算法:总是从成本最低的节点开始,跑到所有相邻节点,记录成本。eg:从高庭出发,跑到相邻的点,可得到君临城的成本最低;再从君临城出发到奔流城和三叉戟河,结果发现从高庭到君临城到奔流城成本为33,而高庭到奔流城的成本为10,所以从奔流城开始向派克城和三叉戟河继续记录成本,直到到凛冬城。

四、数据结构

数据结构:存在内存中的算法处理的数据格式。
应具备的特点:结构化,方便读取

  1. 数组(Array)/列表(list)/向量(Vector)
    数组的值是连续存储在内存中,即地址连续。创建时大小固定,不能动态增加大小。
    字符串(String)其实是字符、数字、标点符号等组成的数组。每个字符串以二进制的零结尾(null)。
  2. 矩阵(Matrix)
    数组中的数组,二维及以上纬度的数组。
  3. 结构体(Struct)
    多个不同类型的变量打包在一起。内存地址连续。
  4. 节点(Node)
    节点是一个结构体,内部包含一个变量和指向下一个节点的指针。可用来构成链表、队列、栈、二叉树、图等。

    (1)链表(linked list)
    一种灵活的数据结构,由多个节点构成,每个节点中的指针指向下一个节点实现,即地址不连续,但相邻节点之间存在关系,方便插入,也容易重新排序、两端缩减、分割、倒序等。
    (循环链表:最后一个节点的指针指向第一个节点。)

    (2)队列(Queue)
    队列类似于管道的链表,只有一个出口出(出队(dequeuing))、一个入口进(入队(enqueuing)),先进先出(FIFO)。
    (3)栈(Stack)
    栈类似于容器,先进去的就堆在最下面,后进去的在最上面,也是最先出来的。后进先出(LIFO)(入栈(push) 出站(pop))
    (4)树(tree)
    将节点的指针改为两个或多个,就形成了树。
    节点指针为两个时,树称为二叉树(binary tree)。
    特点:由根节点到叶节点的路径是单向的。
    相关术语:
    根节点(root):最高节点。
    子节点(children nodes):根节点以下的所有节点。
    父节点(parent nodes):子节点的直属上一级节点。
    叶节点(leaf nodes):没有任何子节点的节点。

    (5)图(Graph)
    图:数据节点之间随意连接,包括循环, 用有多个指针的节点表示。
  5. 红黑树

五、图灵机

  1. 解决的问题:可判断性问题
    是否存在一种算法,输入正式逻辑语句,输出准确的“是”或“否”答案?
  2. 图灵机:
    图灵机是一台理论计算设备,具备如下功能:
    (1)有无限长的纸带,纸带可以存储符号;(无限的输入、无限的内存)
    (2)有一个读写头,用于读取、写入纸带数据;(能够与纸带进行交互)
    (3)有一个状态变量,保存当前状态;
    (4)有一组规则,描述机器做什么。(规则是根据当前状态+读写头看到的符号,决定机器做什么)
  3. 图灵机停机问题
    问题描述:给定图灵机描述和输入纸带,是否有算法可以确定图灵机是会继续运行下去还是停机。
    证明:
    (1)假设有算法能够确定图灵机是继续运行下去还是停机。设图灵机为H,输入信息经过H后,会得到两种输出:YES则表示停机,No则表示继续运行。再另设一个机器BIZARRO,BIZARRO内部包含一个图灵机H。输入信息进入BIZARRO后会交给H进行处理,如果H输出为YES,则BIZARRO继续运行,如果H输出为NO,则BIZARRO停机。
    此时如果将BIZARRO本身的状态作为输入信息,即BIZARRO若为停机状态作为输入信息输入H,H将输出YES表示停机,但当H输出NO时,BIZARRO将继续运行。输入与输出结果相悖,即相互矛盾,所以不存在该算法。
    (2)用函数来表示更容易理解。将图灵机H表示为函数f,返回值为true则停机,为false则继续运行。输入参数表示输入信息。
    bool f(InputInfo a)
    {
    if(InputInfo a) return true;//停机
    else:return false;//继续运行
    }
    此时BIZARRO可表示为
    program BIZARRO(bool f, program BIZARRO)
    {
    if(f(BIZARRO)) return false;//如果f输出停机,则BIZARRO继续运行
    else: return true;//如果f输出继续运行,则BIZARRO停机
    }
    由此可得输入信息BIZARRO与输出结果相矛盾。
  4. 图灵机的意义
    (1)计算能力无与伦比:如果有足够规则、状态和纸带,图灵机可以执行任何计算,是一台通用计算机,没有计算机比图灵机更强大。(和图灵机一样强大的被称为“图灵完备”,如现代计算机)
    (2)图灵机停机问题的不可判定的论证,表明计算机无法用任何程序判定任何程序的执行是否会终止,避免为编制这样的程序耗费精力,同理,计算机领域中不可判定问题都没有必要为此编写程序。

六、软件工程

为了隐藏复杂度,便于用户使用,程序员将代码层层封装,从代码到函数再到对象,最终形成软件。

  1. 软件的开发
    软件的开发是需要靠程序员之间的团队合作,而对于程序员而言,如何进行团队合作?大项目分解成小项目。
    对于程序员个人而言,为了方面其他人阅读并修改代码,需要做以下工作:
    (1)提供API(Application Progaramming Interfece程序编程接口)。目前大多数软件都是将函数打包成对象以此编程,称为面向对象编程(Object Oriented Programming),而面向对象编程的核心就在于隐藏代码的复杂度,通过访问修饰符选择性的公布功能。因此只需要提供给其他程序员API能够调用对象即可(不需要知道具体细节,只要知道如何使用)。
    (2)给代码写README文档,或者是在代码中写注释。
    有利于提供程序员工作效率的方法:
    (1)利用IDE(Integrated Development Environmets集成开发环境) 。IDE将帮助写代码、整合代码、测试代码、调试等功能全部集中在一个工具上,为程序员提供了很好的编译环境。
    (2)源代码管理(Source Control)或版本控制(Version Control/Revision Control)。源代码管理就是将代码都集中在代码仓库(Code Repository)中,通过Check out取出要修改的代码,在经过编译、测试(又称为质量保证测试QA Quality Assurance testing),成功后提交到代码仓库的管理过程。这样的方式可以记录修改内容、修改人,当新版本出现Bug时,还可以通过Rolled Back(回滚)返回上一个稳定版本。
  2. 小细节
    (1)软件在正式发布之前,会有两个版本alpha版本和beta版本。alpha版本比较粗糙,主要是公司内部测试并修改bug,beta版本bug较少,有时会发布给用户测试,让用户帮助发现bug。

计算机概述(三)——编程介绍相关推荐

  1. 计算机概述(四)——计算机的快速发展

    计算机概述系列目录 第一章 计算机概述(一)--计算机发展历程与基础表示 第二章 计算机概述(二)--构建CPU 第三章 计算机概述(三)--编程介绍 第四章 计算机概述(四)--计算机的快速发展 文 ...

  2. java 计算机概述看这一篇文章就够了

    第一章 计算机概述 第1节 计算机介绍 1 广义上: 凡是可以帮助我们完成计算的工具统称为计算机(比如 算盘.计算器等...) 狭义上: 当前说计算机一般情况特指电子计算机(电脑) 第2节 计算机历史 ...

  3. 新手必看的编程介绍,帮你推荐学习方案!

    新手必看的编程介绍,帮你推荐学习方案! VB是什么? ) y0 {6 G# G; j3 B VB 是Visual Basic编程语言 * B. O2 G# z) O1 |- g8 `4 ^ 编写计算机 ...

  4. 用计算机自我介绍,计算机个人简历:计算机专业简历自我介绍【四篇】供参考使用(5页)-原创力文档...

    计算机个人简历:计算机专业简历自我介绍[四篇]供参考使用 --文章均为WORD文档,下载后可直接编辑使用亦可打印-- 篇一 在大学期间,我始终以提高自身的综合素质为目标,以自我的全面发展为努力方向,树 ...

  5. 计算机组成原理实验箱连接显示输出,计算机组成原理实验箱介绍.ppt

    计算机组成原理实验箱介绍,,实验系统由实验箱.PC机.软件三大部分组成.本课程围绕实验箱组织教学,通过在实验箱上的一系列实验来学习计算机的基本工作原理.实验箱包含七个部分:,实验箱简介(1),1.数据 ...

  6. python爬虫工程师面试自我介绍范文_计算机工程师面试自我介绍范文五篇

    自我介绍在面试中是必然要过的一关,自我介绍得好不好也直接影响到面试的效果,那么该如何做到与众不同又精彩呢?下面是小编给大家搜集的范文五篇,希望有帮助到大家. 计算机工程师面试自我介绍(一) 面试官您好 ...

  7. 计算机专业简介自我介绍,计算机专业自我介绍

    自我介绍是向别人展示你自己的一个重要手段,自我介绍好不好,甚至直接关系到你给别人的第一印象的好坏及以后交往的顺利与否.你的自我介绍写好了吗?以下是出国留学网小编为大家精心整理的"计算机专业简 ...

  8. 用计算机自我介绍,计算机简单的自我介绍

    无论是找工作还是申请学校,面试都是大家必经的一个过程.而每一场面试几乎都是以"自我介绍"开始的.那么面试计算机应该怎么自我介绍?以下是学习啦小编为您整理的计算机简单的自我介绍内容, ...

  9. 来吧,嘤!,c++高级编程介绍

    c++高级编程介绍 学c++确实是件痛苦的事,这水平得一步步抬上去,实话说学校教的也不好,就更痛苦了,还要学这学那,对技术没半点提升.最近就在学这个,没得方向,只好自己归纳了.嘤!嘤! 目录 预处理 ...

最新文章

  1. [转]各种编码ANSI、GB2312、GBK、GB18030、UNICODE以及UTF-8傻傻分不清!
  2. 第四章 数据的预处理与特征构建(续)
  3. java8 内置函数(api)总结
  4. java中byte、short、char、boolean实际都是按照int处理的!
  5. python 当前时间的前一天_python中time、datetime模块的使用
  6. RabbitMQ 整合 Spring Cloud Stream
  7. nodejs window下安装与配置淘宝镜像
  8. Inno Setup 检测已安装的.NET Framework 版本
  9. Android视频截图【转】
  10. 微言Netty:分布式服务框架
  11. 地理空间数据云下载的dem数据打不开怎么办? 显示光盘映像已损坏
  12. Spring Cloud从入门到精通(四):熔断器 Hystrix
  13. C T1 汉字大写金额
  14. 怎么在删除计算机里面搜索记录,Win7如何删除我的电脑搜索栏里面的搜索记录介绍三种删除win7搜索记录的方法...
  15. C++身份证校验码计算器
  16. ddl是什么(ddl是什么软件)
  17. JavaMail 邮件附件名乱码问题
  18. windows10桌面鼠标右键出现卡顿解决方法
  19. 华为运营商级路由器配置示例 | 配置VPLS over TE示例(LDP方式)
  20. 男程序员用双手虐了多少女明星?

热门文章

  1. 淄博师专信息科学系2012级计算机班,信息工程系名师风采——记“淄博市最美青年”魏宝亮...
  2. ruby 对象转换哈希(Hash)
  3. 数据中心100G连接的发展驱动400G解决方案需求增长
  4. 经典全变分图像去噪算法(tv算法)和维纳滤波结合 算法
  5. 方舟服务器显示被移除,《方舟:生存进化》官方反悔 清除服务器数据计划作废...
  6. 大数据领域必读经典:大数据技术与应用实践指南终于更新第二版了
  7. 狂神说mysql笔记
  8. 腾信微信公众号初步开发应用
  9. 国外电子商务软件公司市场占有率排行
  10. 【电商运营】如何吸引客户?经典WhatsApp营销案例分享!