计算机科学中的算法设计与数据结构的离散性AET

(山东女子学院信息技术学院,山东济南250300)

关键词:离散数学;算法设计;数据结构;离散性;二进制

中图分类号:TP301文献标识码:ADOI:10.19358/j.issn.16747720.2016.22.005

引用格式:甄鹏华,于振梅.计算机科学中的算法设计与数据结构的离散性[J].微型机与应用,2016,35(22):18-21.

0引言

计算机科学(ComputerScience)是一门日新月异的学科。计算机科学与技术专业的研究人员时刻站在国际先进科技的前沿,学习新知识,并向创造新知识而努力。

但是计算机科学中亦有许多基础科学中的理论支持,其与计算机的实际相结合,构成了计算机科学中最基础的理论。计算机问题归根结底是数学问题,将计算机问题抽象成数学问题,是一种合适的解决方式。

随着互联网行业的快速发展,作为其支柱的计算机行业越来越受到人们重视。然而,人们更加注重程序结果而不是算法,更疏于关心数据结构。

本文提出了对算法设计和数据结构的离散性体现的思路,给抽象解决计算机问题做一种具体化解释,以期给读者建立一种从连续性到离散性的思维。

1算法

本节主要以算法来表述计算机中的离散性问题。本节概括了算法的基本概念,并以两个算法设计的方法来表述离散性的表现。该节算法均以C语言描述。

1.1算法的基本概念

当然,对于流程型的程序确实对算法的要求不高,但对于人工智能、人机交互、图形图像识别、音视频识别、虚拟现实、现实增强、社会工程学、数据挖掘、大数据分析、大型网络拓扑、云计算等领域来说,算法是其关键。

现在流行于手机的各种美图软件中,亦存在较不错的算法设计。软件如何识别出人脸?如何分析眼睛、鼻子、嘴巴等的位置?如何对其进行一定的“美图”而不至于让人无法分辨?

由计算机科学之父、人工智能之父阿兰·图灵(AlanTuring)带领的小组,在二战中帮助盟军设计了破译德国的密码系统Enigma的机器。设计机器的过程,可以称作设计算法的过程。图灵实际是领导小组成员设计出一个快速解密德国纳粹密码系统的算法,并为这个算法设计了机器。

1.2算法体现的离散性

算法设计中可以体现出计算机科学中常见的不连续的特性,即离散性。

1.2.1算法设计常用的方法

(1)递推法:递推是序列计算机中的一种常用算法。它是按照一定的规律来计算序列中的每个项,通常是通过计算机前面的一些项来得出序列中的指定项的值。其思想是把一个复杂的庞大的计算过程转化为简单过程的多次重复,该算法利用了计算机速度快和不知疲倦的机器特点。

(2)递归法:程序调用自身的编程技巧称为递归(recursion)。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

1.2.2两种方法的离散性体现

递推法中,计算机用一种比较“傻”的方法来进行一个复杂的运算。如算法1,以一个求最大值的算法来解释。

算法1求最大值

intmax(int*array,intsize)

{

intmval=*array;

inti;

for(i=1;i

if(array[i]>mval)

mval=array[i];

returnmval;

}

递归法有时可以简化算法,以求两个自然数的最大公约数为例,如算法2,其改用递归算法后如算法3。

算法2求最大公约数

voidswapi(int*x,int*y)

inttmp=*x;

*x=*y;

*y=tmp;

intgcd(intm,intn)

intr;

do

if(m

swapi(&m,&n);

r=m%n;

m=n;

n=r;

}while(r);

returnm;

算法3递归法求最大公约数

intgcd(inta,intb)

if(a%b)

returngcd(b,a%b);

returnb;

形象地说递归法就是“自己调用自己”。一种离散性的表现与之前的例子类似,这里不再重复。这里讲的是程序运行表现的离散性。计算机会在栈中运行程序,栈的特点就是“后进先出”。在运行这个递归的算法时,需要返回值时返回一个“自己”,只不过参数不同。直到返回一个确定的值,再层层返回,如图1所示。

可见,对于该算法,计算机每递归计算一次,就要向内存中Push一次,直到计算完成,再一次一次Pop出。这是一种计算的离散性体现,这亦不会是人类的连续性的思维方式。

2数据结构

本节主要以数据结构来表述计算机中的离散性问题。本节概括了数据结构的基本概念,并提出了数据结构的离散性的基本理解。

2.1数据结构的基本概念

数据结构是计算机科学的经典学科。字面上来说,就是研究数据元素之间的结构关系。根据数据元素之间关系的不同特性,一般来说可分为四类基本结构:集合、线性结构、树形结构、图状结构或网状结构[3],如图2所示。这正是数据结构的元素具有的离散性特征。

NicklausWirth凭借“算法+数据结构=程序”这一公式获得了计算机科学领域最高奖——图灵奖。这已足以可见数据结构的重要性。

数据结构主要讨论的是相互之间存在一种或多种特定关系的数据元素的集合。在任何问题中,数据元素都不是孤立存在的,而是在它们之间存在着某种关系,这种数据元素相互之间的关系称之为结构(structure)。而离散数学与数据结构有千丝万缕的联系,很多大学的计算机专业将离散数学作为数据结构的先导课程。

2.2数据结构的离散性

离散数学中的图论可以说就是对数据结构的抽象,这方面的学术文献相当丰富。这里仅对其做一个较为简单、通俗的理解说明。

对于集合结构,如图2所示,其元素本身就是离散的、无关的。

对于线性结构的离散性是显而易见的。前文在介绍算法的离散性时提到栈的应用,可见其离散性。其余线性结构类似。

树形结构和图形结构也很好理解,每个元素本来是独立存在,由于元素之间满足了某种关系使其变成了树形或图形结构,自然这种关系是离散的,不连续的。

实际上,离散数学与数据结构的关系是最为紧密的。离散数学中的图论实际就是研究一些复杂的数据元素之间的关系[4]。一些离散数学中的理论应用在计算机中,实现了一些难以解决的问题或优化了一些原本不恰当的方法,例如哈夫曼(Huffman)树解决了压缩编码的问题。

3离散数学与数字电子

本节将介绍离散数学的一些概念,并指出其与数字电子(主要是数字信号)的关系。

3.1离散数学的基本概念

3.2数字电子的基本概念与离散性

数字电子是一门学科,与计算机学科相互交叉。此处仅以其数字信号的基本概念解释其离散性。

4计算机中的离散性问题

本节主要介绍二进制体现出来的离散性问题,并归结出计算机中的离散性问题基本都与计算机采用的二进制的性质有关。

4.1二进制

计算机中以二进制进行存储和运算,这涉及逻辑数学的一些概念。实际上,逻辑运算亦能体现离散性。这与计算机的运算是有映射关系的。

4.1.1基本概念

二进制是逢2进位的进位制。“0”、“1”是基本算符。现代的电子计算机技术全部采用的是二进制,因为它只使用“0”、“1”这两个数字符号,非常简单方便,易于用电子方式实现[9]。

由于人类习惯使用十进制,可以这样表述二进制:二进制数的每一位数的位权(理解为“1”能有多“大”)为2n-1(n为位数)。这样可以充分理解二进制数的“大小”。

4.1.2体现

计算机是一个只认识“0”、“1”的机器,对于人类来说很容易理解的信息(如图片、音视频)对于计算机来说却不能直接理解。所以计算机本身就要通过离散的数据来“认识世界”。

计算机所处理的对象都是离散的数据。所谓离散的数据,可以理解为从本质上说计算机只能处理“0”、“1”组成的二进制的数据。计算机要进行图像、文字、声音等数据的处理,必须将其转换成二进制的数据表示,

也就是说进行离散化处理。只如音频处理,只有将连续变化的声音转换成二进制的数据来表示,这样计算机才能进行处理。

图4所示就是计算机将音频信息离散化的方法。离散化得越“细”,就越能还原声音的原来面貌。

4.2简要分析

计算机采用的二进制使得计算机处理问题具有离散性的特征。前面所述的算法设计与数据结构的离散性体现,都可以通过二进制来解释。这涉及一些比较靠近计算机底层的理论,这里不再深究。

5结论

本文以探究离散数学的方式浅析了计算机的离散性问题,特别是在算法设计与数据结构上,并最终说明计算机采用的二进制是计算机离散性问题的一个关键。

参考文献

[1]谭浩强.C程序设计[M].北京:清华大学出版社,2005.

[2]ROGERSH.Theoryofrecursivefunctionsandeffectivecomputability[M].Cambridge:TheMITPress,1987.

[3]严蔚敏,吴伟民.数据结构:C语言版[M].北京:清华大学出版社,2007.

[4]屈婉玲,耿素云,张立昂.离散数学[M].北京:清华大学出版社,2008.

[5]JOHSONBAUGHR.Discretemathematics[M].UpperSaddleRiver:PrenticeHall,2008.

[7]BIGGSN.Discretemathematics[M].Oxford:OxfordUniversityPress,2002.

[8]HOPKINSB.Resourcesforteachingdiscretemathematics[M].WashingtonD.C.:MathematicalAssociationofAmerica,2008.

[9]康华光.电子技术基础:数字部分(第6版)[M].北京:高等教育出版社,2014.

THE END
1.数学建模的十大常用算法4、图论算法(这类算法可以分为很多种,包括最短路、网络 流、二分图等算法,涉及到图论的问题可以用这些方法解决, 需要认真准备) 5、动态规划、回溯搜索、分治算法、分支定界等计算机算法 (这些算法是算法设计中比较常用的方法,很多场合可以用到 竞赛中) 6、最优化理论的三大非经典算法:模拟退火法、神经网络、 遗https://zhuanlan.zhihu.com/p/647657979
2.算法设计之五大常用算法设计方法总结算法设计技术算法设计之五大常用算法设计方法总结 一、【分治法】 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的https://blog.csdn.net/zolalad/article/details/11393915
3.初学者指南:算法设计思路详解本文详细介绍了算法的基本概念、常见的算法设计方法及优化技巧,涵盖递归、分治法、贪心算法和动态规划等核心内容。文章深入讲解了算法设计思路,包括理解问题、分析问题、设计算法和编写伪代码等步骤,帮助读者系统掌握算法设计的全过程。此外,文章还提供了具体的案例解析和优化技巧,并推荐了常用的算法学习平台和资源。 算法https://www.imooc.com/article/358042
4.1.问题求解算法及其推导方法; 理解模算术在密码中的应用 论题2-1:算法问题与解题的算法 ●学习目的:理解计算机算法的相关概念; 掌握算法复杂性的基本度量方法●引导要点:算法设计与算法分析是计算机问题求解不可或缺的两个方面 论题2-2:组合与计数 ●学习目的:掌握在算法分析中常用的计数原理与方法●引导要点:为什么算法分析中需要https://cs.nju.edu.cn/jxcgj/kctxsf.html
5.招聘航天科技集团一院期待你的加入澎湃号·媒体澎湃新闻2. 具备飞行力学、自动控制原理、最优控制、惯性导航等理论基础,掌握控制律的优化设计方法及控制稳定性的分析方法,熟练进行控制方法选择、设计及控制系统仿真分析; 3. 熟练掌握MATLAB、C/C++等常用软件的开发方法与流程; 4. 具有相关岗位工作经历及一定工程实践经验。 https://www.thepaper.cn/newsDetail_forward_15833677
6.路飞学城1、掌握常用算法知识,充分理解算法以及在实际应用算法; 2、掌握常用设计模式的实现,为各种类型软件设计提供理论支持 ; 第十阶段:数据分析(1周) 可掌握的核心能力: 1、掌握主流推荐系统算法和应用; 2、掌握数据分析常用技术的应用; 第十一阶段:机器学习、图像识别(1~2周) 可掌握的核心能力: 1、掌握机器学习https://m.luffycity.com/light-course/python
7.高中信息技术课程标准(2)经历用自然语言、流程图或伪代码等方法描述算法的过程。 (3)在使用计算机解决实际问题的过程中,通过观看演示、模仿、探究、实践等环节,了解顺序、选择、循环三种基本结构及其重要作用,掌握计算机程序的基本概念,能解释计算机程序执行的基本过程。 (4)了解程序设计语言、编辑程序、编译程序、连接程序以及程序开发环境等https://www.fqkhzx.cn/index/article/view/id/94.html
8.“才”聚天开,勇往“职”前2.熟悉CocosCreator引|擎的常用功能: 3.精通javascript/typescript等任一脚本开发语言 4.C/C++,数据结构,算法,网络通信等基础扎实: 5.关注新技术,自学能力强,能够与公司共同进步; 6.逻辑思维能力强,善于沟通,团队意识强; 7.工作认真细致,责任心强。 https://www.tjrc.com.cn/app/article/content/VE4rR2NWRjUzUU5SOFFxWDdRa09oZz09.shtml
9.算法设计与分析学习强国算法时间复杂度函数的主要性质,算法复杂度估计中常用的数学方法,如序列求和及递推方程求解。通用算法设计技术与分析方法部分主要介绍分治策略、动态规划、贪心法、回溯与分支限界等算法设计技术。重点介绍这些设计技术的使用条件、分析方法、改进途径,并给出一些重要的应用。 https://www.xuexi.cn/a4edc5d029baae7a340612de2f102f0a/9b0f04ec6509904be734f5f609a3604a.html
10.精选算法设计与分析(第六章分支限界法)总结算法设计与分析课程期末必记知识点。 第六章分支限界法 1、分支限界法与回溯法的区别 求解目标不同,分支限界法是找出满足约束条件的一个解。回溯法是找出满足约束条件的所有解。 分支限界法和回溯法的区别 2、如何组织活结点表 根据选择下一个扩展结点的方式来组织活结点表,不同的活结点表对应不同的分枝搜索https://cloud.tencent.com/developer/article/2399051
11.配方设计中的常用算法公式–爱酿(自酿破,自在生活)在设计啤酒配方的时候,需要事先计算好所需原料的配比。网站提供的各种计算工具和配方创建工具都可以帮助大家自动的计算这些数值,不过简单了解一些常用的算法公式也是必要的。 1. 根据目标ABV计算OG 我们在酿酒的时候都会测量麦汁的初始比重(OG: Original Gravity)和啤酒的终点比重(FG: Final Gravity),根据这两个数值,https://www.znp9.com/tech/3499/
12.2022年山东大学“832计算机综合”考哪些内容?要求考生系统地理解线性结构(线性表、数组和矩阵、栈、队列、跳表和散列表)、树型结构(森林(树)、二叉树、优先队列、搜索树)、图结构等各种主要数据结构的基本概念,掌握各种数据结构的定义、实现算法和应用;掌握基本算法设计方法(递归、贪婪算法、分而治之、动态规划)及应用;掌握程序性能分析方法。要求考生具有抽象思https://www.kyzs.com/article/10647.html
13.深基坑工程设计理论的发展与进步杨光华评论员发展了以增量法为代表的更实用有效的先进计算方法,能科学计算考虑各种复杂施工过程的受力和变形,目前已成为我国深基坑工程设计的主要和普遍应用的现代计算方法,解决了大量的工程设计的计算难题,提高了对深基坑支护结构受力机理的认识,极大的提高了深基坑工程的设计水平,形成了系统的现代深基坑工程设计的新算法,这是中国https://www.yantuchina.com/people/detail/1004/42890.html
14.一文图解弄懂八大常用算法思想动态规划主要就是用来解决多阶段决策的问题,但是实际问题中往往很难有统一的处理方法,必须结合问题的特点来进行算法的设计,这也是这种算法很难真正掌握的原因。 案例 背包问题。 有 n 件物品和容量为 m 的背包,给出物品的重量以及价值。求解让装入背包的物品重量不超过背包容量且价值最大 。 https://www.51cto.com/article/628524.html
15.《算法》教学设计优秀教案.pdf3 . 三维目标 过程与方 学会分析问题,提取问题形成算法描述,掌握流程图的概念与制作 三维目标 过程与方 学会分析问题,提取问题形成算法描述,掌握流程图的概念与制作 法: 方法。 法: 方法。 情感、态度 通过对问题的研究和分析,设计算法对问题进行求解,提高分析问 情感、态度 通过对问题的研究和分析,设计算法对https://m.book118.com/html/2021/1205/8012022013004052.shtm