计算机科学中的算法设计与数据结构的离散性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.计算机算法指的是什么计算机算法指的是解决某一问题的有限运算序列,算法的定义是用来解决某一特定类型问题的有限运算序列;算法https://edu.iask.sina.com.cn/jy/3j3wiQ2YHuX.html
2.计算机算法指的是计算机算法指的是计算机算法指的是()计算机算法1计算机算法指的是() A.计算方法 B.排序方法 C.解决问题的步骤序列 D.调度方法 2 计算机算法指的是() A.计算方法 B.排序方法 C.解决问题的步骤序列 D.调度方法计算机算法指的是 () A.计算方法 B.排序方法 C.解决问题的步骤序列 D.调度方法 3 计算机算法指的是 () A.计算方法 B.排序方法 C.解决https://easylearn.baidu.com/edu-page/tiangong/questiondetail?id=1727074818182024229&fr=search
3.究竟什么是算法,怎么什么都要学算法?算法有什么用为什么都啃算法什么是计算机算法? 算法是计算机可以用来解决特定问题的指令列表。算法用于计算的所有领域,它们旨在以有效的方式解决问题。 算法的设计取决于它需要解决的问题的复杂性。对于简单的问题,蛮力可能是可行的。然而,对于更复杂的问题,需要更复杂的算法。 计算机算法无处不在 https://blog.csdn.net/2403_88996764/article/details/143954757
4.Alg是什么意思(详解算法计算机科学中的常用缩写)在计算机科学领域,我们经常听到一个词汇“Alg”,这是一个缩写,代表的是“算法”(Algorithm)这个英文单词的缩写。算法是计算机科学中的重要概念,是一种解决问题的方法和步骤,是程序设计的基础。 在本文中,我们将详细解释算法的概念,以及计算机科学中其他常用的缩写。 https://www.keneuc.com/IndustryNews/774.html
5.什么是算法我们说过算法与计算机无关,但现在绝大多数人把它们联系在一起。当算法与计算机结合在一起时,算法展现出其潜力,这是事实,但计算机实际上是一个特殊的机器,可命令它做一些确定的事物。我们通过编程(programming)来命令它,通过用编程来执行算法。 引自 算法、计算机和数学12 https://book.douban.com/annotation/137133352/
6.计算科学:什么是算法?如何编写代码算法?“算法”这个词今天在计算机科学和编程方面被大量提起 – 但算法到底是什么? 在本文中,我们将研究算法,学习如何创建它们,并讨论算法在现实生活中的使用。 一、什么是算法? 简而言之,算法是用于解决特定问题的一组步骤。 虽然算法经常出现在计算机科学或编码环境中,但算法可以像制作花生酱和果冻三明治的过程一样简单。https://kidscodes.cn/9038.html
7.算法概述为了满足人们对大数据量信息处理的渴望,为解决各种实际问题,计算机算法学得到了飞速的发展,线性规划、动态规划、贪心策略等一系列运筹学模型纷纷运用到计算机算法学中,产生了解决各种现实问题的有效算法。 设计一个具体问题的算法,通常按以下步骤: 1、认真分析问题,找出解决此题的一般数学方法; https://www.jianshu.com/p/8c8d20a9bde8
8.算法学习指南:什么是算法?51CTO博客算法是一种逐步解决问题的方法,可实现为计算机程序的形式,能够在可预测的时间内返回正确的结果。算法的研究既要关注正确性(它对于所有的输入是否都能发挥作用?),也要关注性能(它是解决这个问题的最有效方法吗?)。 下面我们详细观察一个算法的例子,看看它实际上是怎么处理问题的。如果我们想在一个无序列表中查找最https://blog.51cto.com/u_13127751/5966573
9.比特币计算的到底是什么?比特币采用的是什么算法?比特币区块链比特币来源于挖矿,比特币挖矿就是利用电脑硬件计算出比特币的位置并获取的过程,矿工使用计算机的算力通过复杂的、特定的算法来获取虚拟数字货币,但是大家真的知道比特币计算的到底是什么?比特币因特定的算法限制,使其被开采的速度越来越慢,而所谓的比特币计算本质上就是解决一个复杂的数学问题,该问题需要大量的计算能力https://www.jb51.net/blockchain/917305.html
10.什么是算法?什么是算法? 当人们提到“算法”一词,往往就会把它们当成专属于“人工智能”的范畴,很多专业的计算机人士也是,提起算法就头疼,不知道如何学习算法,慢慢的对算法就会失去兴趣,算法不仅仅是计算机行业特有的,在我们的生活中也处处存在着算法,算法是专注于解决问题的过程和方法。https://zhuanlan.zhihu.com/p/501462272
11.进化计算3 进化算法 4 进化算法和生物学 什么是进化计算 编辑 在计算机科学中,进化计算是受生物进化启发的用于全局优化的一系列算法,以及研究这些算法的人工智能和软计算的子领域。在技术方面,它们是具有元启发式或随机优化特征的基于群体的试错问题求解器家族。 在进化计算中,生成并迭代更新一组初始候选解。每一https://vibaike.com/124823/?ivk_sa=1024320u
12.什么是计算机视觉?计算机视觉的三种方法什么是计算机视觉?计算机视觉的三种方法 计算机视觉是指通过为计算机赋予人类视觉这一技术目标,从而赋能装配线检查到驾驶辅助和机器人等应用。计算机缺乏像人类一样凭直觉产生视觉和画面的能力,所以我们必须给予计算机一些算法,以便处理特殊任务。 本文着眼于使计算机能够像人类一样通过“看”来感知世界,从这一视角对人工https://www.elecfans.com/d/2313615.html
13.什么是算法?什么是算法?万千封印 浏览1128回答2 2回答 一只甜甜圈 算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗点说,就是计算机解题的过程。在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是推理实现的算法,后者是操作实现的算法。一个算法应该具有以下五个重要的特征:1、有穷性:https://m.imooc.com/mip/wenda/detail/509729
14.面经字节跳动计算机视觉算法实习生视频面试(45个问答)出一道算法题 算法题如下:给个有序数组,然后求元素平方后不重复的元素个数,例如[-10, -10, -5, 0, 1, 5, 8, 10] 我思想描述对了,然后面试官说有更好的方法吗,我想了一下说没有,然后面试官让我选个语言实现一下,选择了python来实现,用到了字典,然后面试官说用集合会不会更好,我说会的 # 这是https://maimai.cn/article/detail?fid=1452505627&efid=0XinlsIcCJUuCu6Zxdtq-Q
15.韩信竟是数学大师?中国古代数学启发计算机加密算法时至今日,中国剩余定理已经成为了很多计算机加密算法的基础,它的应用范围已经超乎你的想象。 影响当今计算机算法 外媒Quantamagazine在一篇名为《古代战争计策是如何影响当代数学》的文章中也提到:中国剩余定理对现代数学、计算机算法、天文学等领域都有很大的启发意义。 https://www.thepaper.cn/newsDetail_forward_14592114
16.循环生成网络CycleGan原理介绍腾讯云开发者社区循环生成对抗网络(简称CycleGans)[1]是功能强大的计算机算法,具有改善数字生态系统的潜力。它们能够将信息从一种表示形式转换为另一种表示形式。例如,当给定图像时,他们可以对其进行模糊处理,着色(如果其最初是黑白的),提高其清晰度或填补缺失的空白。 它们比传统的设计/生产/写作软件更强大。因为CycleGans是机器学习https://cloud.tencent.com/developer/article/1646144