APP下载

基于C程序设计与数据结构离散型混合研究

2019-07-16邓定胜

电脑知识与技术 2019年14期
关键词:C程序设计数据结构算法

邓定胜

摘要:作为一个拥有离散结构的数字电子计算机,它的操作对象只有离散和离散化了的数量关系,所以不光是计算机科学,还有与它和它的应用紧密相连的现代科学研究领域都面临着同一个难题,那就是在建立与离散结构对应的数学模型同时,怎样离散已经利用连续数量关系而建成的数字模型,并利用计算机来进行处理。事实上离散数学大致可以被认为是抽象化了的计算机问题,数据结构与算法设计中都能够体现出离散性。计算机里能够表现离散性的问题有很多,因此计算机科学在研究离散数学时有多种选择,这些表现大致都能够被认为是计算机中的二进制。本文主要从其算法、数据结构、离散数学与数字电子、计算机中的离散型问题以及实验仿真五个方面出发,对计算机的算法设计和数据结构离散进行了一定的研究和分析。希望可以对有关方面的改善和促进起到一定的借鉴作用和指导意义。

关键词:C程序设计;数据结构;离散型;算法

中图分类号:TP311     文献标识码:A

文章编号:1009-3044(2019)14-0210-03

Abstract: As a digital computer with discrete structure, its operating object only has discrete and discrete quantitative relationship, so not only computer science, but also modern scientific research fields closely linked with its application are facing the same problem, that is, how to discretize the continuous number while establishing the mathematical model corresponding to the discrete structure The digital model built by the relationship is processed by computer. In fact, discrete mathematics can be roughly regarded as abstract computer problems, which can be reflected in data structure and algorithm design. There are many problems in computer that can express discreteness, so computer science has many choices in the study of discrete mathematics, which can be roughly considered as binary in computer. In this paper, the algorithm design and data structure discretization of computer are studied and analyzed from five aspects: algorithm, data structure, discrete mathematics and digital electronics, discrete problems in computer and experimental simulation. I hope it can play a certain role in reference and guiding significance for the improvement and promotion of relevant parties.

Key words: C Programming; Data Structure; Discrete Type; Algorithms

互聯网行业的发展日新月异,引起了人们的高度重视,尤其是其中最为重要的计算机行业。理论上最应该受到重视的就是数据结构与程序算法,可大多数人本末倒置,对程序结果更为重视。

本文就如何体现数据结构与算法设计的离散性提出了方法,具体地说明了怎样解决抽象化了的计算机问题,以达到把连续性到离散性的思维方法传输给读者的目的。

作为一种科学知识,计算机算法与结构是计算机科学中必不可少的,它是模拟实验和进行计算机科学计算的主要工具,能够促进未来计算机科学的发展。最近几年,计算机科学发展迅速,获得了非常多的成就。基础科学给计算机科学提供了应有的理论支持,把计算机科学应用在现实生活之中,并结合基础科学构成了其发展的基础性理论[1]。数学知识是计算机科学的理论基础,在解决存在于应用过程中的各种各样的问题时,需要把计算机问题抽象化,从而把它当作数学问题。

1 算法

本节在表述计算机离散性问题时通常利用算法。本节就算法的基本概念给出了概述,同时利用双算法设计的方式来表现离散性。本节在表述算法时都利用了c语言。

1.1算法的基本概念

算法就是准确又具体地去描述解题方案,是能够把问题解决的一连串的明确指令,而且算法作为一种策略机制,在描述与解决问题时能够利用系统的方法。意思就是,可以在短时间内得到一定规范的输入所对应要求的输出。

算法应用在流程型的程序中时没有什么特别高的要求,可是在人机交互、图形图像识别、人工智能、虚拟现实、社会工程学、大数据分析、音视频识别、现实增强、云计算、大型网络拓扑等领域中应用时,对算法的要求就比较高了。

在日常生活中就能发现一些比较好的算法设计,例如手机中各种各样的美图软件。软件怎样把人脸识别出来?怎样确定眼睛、嘴巴和鼻子在人脸上的位置?怎样在人脸上进行一定的不失真的美化?

在世界第二次大战进行时,以人工智能之父、计算机科学之父阿兰·图灵为领头人的小组帮助盟军把能够破译德国密码系统Enigma的机器设计了出来。当中对机器的设计过程可以被认为是算法的设计过程。事实上可以说是图灵设计小组做出了一个能够把德国纳粹密码系统在短时间内解密出来的算法,同时为之相应的设计出了机器。

由此可知,程序的根本就是算法。不管是普通的高等院校还是在世界上都处于前沿的科技企业,在进行关于计算机或者程序的科学性研究时,都必然会涉及算法的研究。算法的设计是所有的系统中最基础、最关键的首要步骤。

1.2算法体现的离散性

在进行算法的设计时,通常能够体现离散性[2],离散性作为一种不连续的特性在计算机科学中可以经常见到。

1.2.1算法设计常用的方法

算法设计有许多方法与有关文献。这里介绍了两种最简单的方法:递推法和递归法,而且在后面做出了相关举例。

(1)递推法

递推算法在序列计算机中是比较常见的,它的特点是化难为易,化繁为简。因为计算机是一种机器,它的运行速度非常快,而且不会疲惫,所以在计算序列各项时,有一定的规律可循,一般要想知道序列中指定的项,需要利用计算机前面的一些项来求得。其原理是把庞大又复杂的计算过程分割成多次重复的简单又容易的过程[3]。

(2)递归法

递归就是程序将自身的编程技巧加以运用的过程。表现为一个过程或者函数在它的说明和定义中涉及自身的调用,它一般是将一个比较庞大复杂的问题一点点转化成一个大概等同于原问题的比较小型且简单的问题,并求解。在将一个有着多次重复计算的解题过程简化时,需要运用递归法,而且仅仅需要很少的程序量就能够解决,使程序的代码量降低了很多。递归的能力表现在定义对象的无限集合时用的是有限的语句。通常递归的三要素是有边界条件、递归前进段以及递归返回段。如果边界条件不满足,那么递归前进,反之,递归返回。

1.2.2两种方法的离散性体现

递推法中,计算机在进行一个比较复杂的运算时,用的方法比较傻。例如算法1,通过一个求最大值的算法来解释。

算法1:求最大值

int max(int *array,int size)

{int mval=*array;

int i;

for(i=1;i

if(array[i]>mval)

mval=array[i];

return(mval);

}

由此可见,不管有多少数字,只要还没有得出最终结果,计算机就会一直按部就班地用已知的最大的数去比较数组中的下一个数。相比来说,人类就不会用这种死板的方式去比较数字的大小,在数字特别多的情况下时,人们就会先把数字的位数最高的挑出来,如果有多个位数最高的数字,再让它们去比较。人类比较习惯应用连续性的思维模式,所以由人而产生的初等数学都是建立在连续的基础之上,从而也出现了几何的概念。可是计算机作为硬邦邦的机器,不具备人类思维灵活的特点,也就很难有这种连续的思维。要想让计算机模拟人类的连续性思维,必须为之设计出更为复杂多变的算法。人类之所以能够拥有这种连续性的思维,是因为作为思维控制中心的人类大脑这个驱动器非常的高级,自身就能够拥有足够复杂的算法。目前有不少的相关研究和文献能够为如何设计出更为复杂的算法、让计算机的运行更为快速并能模拟出人脑的思维方式提供资料,然而这并不是本文的重点。

有时能够用递归法来让算法更加的简单,例如在求两个自然数的最大公约数时,如算法2,其改用递归算法后如算法3。

算法2:求最大公约数

void swap(int *x,int *y)

{int tmp=*x;

*x=*y;

*y=tmp;

}

int ged(int m,int n)

{int r;

do

{if(m

swap(&m,&n);

r=m%n;

m=n;

n=r;

}while(n!=0)

return(m);

}

算法3:遞归法求最大公约数

int gcd(int a,int b)

{if(a%b)

return(gcd(b,a%b);

return(b);

}

可以把递归法理解为“自己调用自己”。一种离散性的表现和先前的例子差不多,这里就不再重复了。这里就程序运行所表现出来的离散性做出表述。计算机是在以“后进先出”为特点的栈中进行运行程序的。在这个递归算法的运行过程中,“自己”就可以满足返回值的需要,就是参数不同而已。一直到返回出一个确定的值,再层层返回,如图1 所示。

由此可知,在计算完成之前,计算机每用递归法计算一次,就伴随着一次Push内存,在计算完成之时,再开始一次一次有序的Pop出,这体现出了计算的离散性,与人类连续的思维模式是有区别的。

2 数据结构

本节在表述计算机中的离散性问题时主要利用数据结构,就数据结构的基本概念与其离散性的基本理解给出了概括。

2.1数据结构的基本概念

数据结构在计算机科学中有着举足轻重的地位。因为数据元素之间有着不同的特性关系,通常可以把其基本结构分为四种:树形结构、集合、线性结构、网状或图状结构,图2就表示了来自于数据结构的元素之中的离散性特征[4]。

猜你喜欢

C程序设计数据结构算法
基于MapReduce的改进Eclat算法
Travellng thg World Full—time for Rree
进位加法的两种算法
“翻转课堂”教学模式的探讨——以《数据结构》课程教学为例
C程序设计趣味教学初探
一种改进的整周模糊度去相关算法
接轨全国等级考试,探讨高校C语言课程教学改革
论中职生C程序设计学习兴趣的培养
TRIZ理论在“数据结构”多媒体教学中的应用
《数据结构》教学方法创新探讨