《電子技術應用》
您所在的位置:首頁 > 測試測量 > 設計應用 > 計算機科學中的算法設計與數據結構的離散性
計算機科學中的算法設計與數據結構的離散性
2016年微型機與應用第22期
甄鵬華,于振梅
山東女子學院 信息技術學院, 山東 濟南 250300
摘要: 數字電子計算機是一個離散結構,它只能處理離散的或離散化了的數量關系,因此,無論計算機科學本身,還是與計算機科學及其應用密切相關的現代科學研究領域,都面臨著如何對離散結構建立相應的數學模型,以及如何將已用連續數量關系建立起來的數學模型離散化,從而由計算機加以處理的問題。實際上,可以將離散數學理解為對計算機問題的抽象,離散性可以在算法設計和數據結構中體現。計算機中也有其他的問題表現出了離散性,所以,計算機科學對離散數學的研究不應太過局限,這些表現都可以歸結為計算機所采用的二進制。
Abstract:
Key words :

  甄鵬華,于振梅

  (山東女子學院 信息技術學院, 山東 濟南 250300)

       摘要:數字電子計算機是一個離散結構,它只能處理離散的或離散化了的數量關系,因此,無論計算機科學本身,還是與計算機科學及其應用密切相關的現代科學研究領域,都面臨著如何對離散結構建立相應的數學模型,以及如何將已用連續數量關系建立起來的數學模型離散化,從而由計算機加以處理的問題。實際上,可以將離散數學理解為對計算機問題的抽象,離散性可以在算法設計數據結構中體現。計算機中也有其他的問題表現出了離散性,所以,計算機科學對離散數學的研究不應太過局限,這些表現都可以歸結為計算機所采用的二進制。

  關鍵詞:離散數學;算法設計;數據結構;離散性;二進制

  中圖分類號:TP301文獻標識碼:ADOI: 10.19358/j.issn.16747720.2016.22.005

  引用格式:甄鵬華,于振梅. 計算機科學中的算法設計與數據結構的離散性[J].微型機與應用,2016,35(22):18-21.

0引言

  計算機科學(Computer Science)是一門日新月異的學科。計算機科學與技術專業的研究人員時刻站在國際先進科技的前沿,學習新知識,并向創造新知識而努力。

  但是計算機科學中亦有許多基礎科學中的理論支持,其與計算機的實際相結合,構成了計算機科學中最基礎的理論。計算機問題歸根結底是數學問題,將計算機問題抽象成數學問題,是一種合適的解決方式。

  隨著互聯網行業的快速發展,作為其支柱的計算機行業越來越受到人們重視。然而,人們更加注重程序結果而不是算法,更疏于關心數據結構。

  本文提出了對算法設計和數據結構的離散性體現的思路,給抽象解決計算機問題做一種具體化解釋,以期給讀者建立一種從連續性到離散性的思維。

1算法

  本節主要以算法來表述計算機中的離散性問題。本節概括了算法的基本概念,并以兩個算法設計的方法來表述離散性的表現。該節算法均以C語言描述。

  1.1算法的基本概念

  算法(algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,算法代表著用系統的方法描述解決問題的策略機制[1]。也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。

  當然,對于流程型的程序確實對算法的要求不高,但對于人工智能、人機交互、圖形圖像識別、音視頻識別、虛擬現實、現實增強、社會工程學、數據挖掘、大數據分析、大型網絡拓撲、云計算等領域來說,算法是其關鍵。

  現在流行于手機的各種美圖軟件中,亦存在較不錯的算法設計。軟件如何識別出人臉?如何分析眼睛、鼻子、嘴巴等的位置?如何對其進行一定的“美圖”而不至于讓人無法分辨?

  由計算機科學之父、人工智能之父阿蘭·圖靈(Alan Turing)帶領的小組,在二戰中幫助盟軍設計了破譯德國的密碼系統Enigma的機器。設計機器的過程,可以稱作設計算法的過程。圖靈實際是領導小組成員設計出一個快速解密德國納粹密碼系統的算法,并為這個算法設計了機器。

  可見,算法其實是程序的根本。世界頂尖的科技企業和高等院校進行的各種科學性研究,只要涉及計算機或與程序相關,其中一大重點便是在研究算法。無論對于多么龐大的一個系統,設計其算法是最基礎也是關鍵的第一步。

  1.2算法體現的離散性

  算法設計中可以體現出計算機科學中常見的不連續的特性,即離散性。

  1.2.1算法設計常用的方法

  算法設計的方法有很多,亦有很多相關文獻。此處主要介紹最簡單的兩種方法[2],并在后面以此為例。

  (1)遞推法:遞推是序列計算機中的一種常用算法。它是按照一定的規律來計算序列中的每個項,通常是通過計算機前面的一些項來得出序列中的指定項的值。其思想是把一個復雜的龐大的計算過程轉化為簡單過程的多次重復,該算法利用了計算機速度快和不知疲倦的機器特點。

  (2)遞歸法:程序調用自身的編程技巧稱為遞歸(recursion)。一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語句來定義對象的無限集合。一般來說,遞歸需要有邊界條件、遞歸前進段和遞歸返回段。當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸返回。

  1.2.2兩種方法的離散性體現

  遞推法中,計算機用一種比較“傻”的方法來進行一個復雜的運算。如算法1,以一個求最大值的算法來解釋。

  算法1求最大值

  int max(int *array, int size)

  {

  int mval = *array;

  int i;

  for (i = 1; i < size; i++)

  if (array[i] > mval)

  mval = array[i];

  return mval;

  }

  可見對于計算機來說,它會不斷地用已知最大的數去和數組中下一個數字作比較,直到結束,即使有很多很多數字。而人類比較數字大小的方式就不同了,如果數字非常多,則可能會先看看數字都是幾位的,挑出位數最高的,如果不止一個,則再去逐個比較。這是一種連續性的思維模式。這正是人類習慣的連續性思維,初等數學都是建立在連續的基礎上,也亦有了幾何的出現。然而對于計算機來說,要有這種連續的思維是很困難的,要設計出更加復雜的算法,才能“模擬”出人類的這種連續性思維。當然,亦有可能是因為人類的大腦這個“CPU”比較高級,自身的算法就足夠復雜,所以人類才擁有連續性思維。對于設計出更復雜的算法和更快速的計算機來“模擬”人腦的思維模式,也有相關研究,亦有不少相關文獻,這不是本文重點。

  遞歸法有時可以簡化算法,以求兩個自然數的最大公約數為例,如算法2,其改用遞歸算法后如算法3。

  算法2求最大公約數

  void swapi(int *x, int *y)

  {

  int tmp = *x;

  *x = *y;

  *y = tmp;

  }

  int gcd(int m, int n)

  {

  int r;

  do

  {

  if (m < n)

  swapi(&m, &n);

  r=m%n;

  m=n;

  n=r;

  } while (r);

  return m;

  }

  算法3遞歸法求最大公約數

  int gcd(int a,int b)

  {

  if(a%b)

  return gcd(b,a%b);

  return b;

  }

  形象地說遞歸法就是“自己調用自己”。一種離散性的表現與之前的例子類似,這里不再重復。這里講的是程序運行表現的離散性。計算機會在棧中運行程序,棧的特點就是“后進先出”。在運行這個遞歸的算法時,需要返回值時返回一個“自己”,只不過參數不同。直到返回一個確定的值,再層層返回,如圖1所示。

圖像 002.png

  可見,對于該算法,計算機每遞歸計算一次,就要向內存中Push一次,直到計算完成,再一次一次Pop出。這是一種計算的離散性體現,這亦不會是人類的連續性的思維方式。

2數據結構

  本節主要以數據結構來表述計算機中的離散性問題。本節概括了數據結構的基本概念,并提出了數據結構的離散性的基本理解。

  2.1數據結構的基本概念

  數據結構是計算機科學的經典學科。字面上來說,就是研究數據元素之間的結構關系。根據數據元素之間關系的不同特性,一般來說可分為四類基本結構:集合、線性結構、樹形結構、圖狀結構或網狀結構[3],如圖2所示。這正是數據結構的元素具有的離散性特征。

圖像 003.png

  Nicklaus Wirth憑借“算法+數據結構=程序”這一公式獲得了計算機科學領域最高獎——圖靈獎。這已足以可見數據結構的重要性。

  數據結構主要討論的是相互之間存在一種或多種特定關系的數據元素的集合。在任何問題中,數據元素都不是孤立存在的,而是在它們之間存在著某種關系,這種數據元素相互之間的關系稱之為結構(structure)。而離散數學與數據結構有千絲萬縷的聯系,很多大學的計算機專業將離散數學作為數據結構的先導課程。

  2.2數據結構的離散性

  離散數學中的圖論可以說就是對數據結構的抽象,這方面的學術文獻相當豐富。這里僅對其做一個較為簡單、通俗的理解說明。

  對于集合結構,如圖2所示,其元素本身就是離散的、無關的。

  對于線性結構的離散性是顯而易見的。前文在介紹算法的離散性時提到棧的應用,可見其離散性。其余線性結構類似。

  樹形結構和圖形結構也很好理解,每個元素本來是獨立存在,由于元素之間滿足了某種關系使其變成了樹形或圖形結構,自然這種關系是離散的,不連續的。

  實際上,離散數學與數據結構的關系是最為緊密的。離散數學中的圖論實際就是研究一些復雜的數據元素之間的關系[4]。一些離散數學中的理論應用在計算機中,實現了一些難以解決的問題或優化了一些原本不恰當的方法,例如哈夫曼(Huffman)樹解決了壓縮編碼的問題。

3離散數學與數字電子

  本節將介紹離散數學的一些概念,并指出其與數字電子(主要是數字信號)的關系。

  3.1離散數學的基本概念

  離散數學是數學的幾個分支的總稱,是研究基于離散空間而不是連續的數學結構。與光滑變化的實數不同,離散數學的研究對象,例如整數、圖和數學邏輯中的命題[5],不是光滑變化的,而是擁有不等、分立的值[6]。因此離散數學不包含微積分和分析等“連續數學”的內容。離散對象經常可以用整數來枚舉。更一般地,離散數學被視為處理可數集合(與整數子集基數相同的集合,包括有理數集但不包括實數集)的數學分支[7]。但是,“離散數學”不存在準確且普遍認可的定義[8]。實際上,離散數學經常被定義為不包含連續變化量及相關概念的數學,甚少被定義為包含什么內容的數學。

  3.2數字電子的基本概念與離散性

  數字電子是一門學科,與計算機學科相互交叉。此處僅以其數字信號的基本概念解釋其離散性。

圖像 004.png

  數字信號同模擬信號相對,模擬信號是指時間和數值都連續的一組信號,而數字信號是指時間和數值都是離散的一組信號,如圖3所示。從圖3可以看出,這種連續性與離散性是非常明顯的。從數學上來說,連續,意味著其微積分有意義。顯然,對離散的信號這是沒有意義的。這里不再深究。

4計算機中的離散性問題

  本節主要介紹二進制體現出來的離散性問題,并歸結出計算機中的離散性問題基本都與計算機采用的二進制的性質有關。

  4.1二進制

  計算機中以二進制進行存儲和運算,這涉及邏輯數學的一些概念。實際上,邏輯運算亦能體現離散性。這與計算機的運算是有映射關系的。

  4.1.1基本概念

  二進制是逢2進位的進位制。“0”、“1”是基本算符。現代的電子計算機技術全部采用的是二進制,因為它只使用“0”、“1”這兩個數字符號,非常簡單方便,易于用電子方式實現[9]。

  由于人類習慣使用十進制,可以這樣表述二進制:二進制數的每一位數的位權(理解為“1”能有多“大”)為2n-1(n為位數)。這樣可以充分理解二進制數的“大小”。

  4.1.2體現

  計算機是一個只認識“0”、“1”的機器,對于人類來說很容易理解的信息(如圖片、音視頻)對于計算機來說卻不能直接理解。所以計算機本身就要通過離散的數據來“認識世界”。

  計算機所處理的對象都是離散的數據。所謂離散的數據,可以理解為從本質上說計算機只能處理“0”、“1”組成的二進制的數據。計算機要進行圖像、文字、聲音等數據的處理,必須將其轉換成二進制的數據表示,

  也就是說進行離散化處理。只如音頻處理,只有將連續變化的聲音轉換成二進制的數據來表示,這樣計算機才能進行處理。

  圖4所示就是計算機將音頻信息離散化的方法。離散化得越“細”,就越能還原聲音的原來面貌。  

圖像 005.png

  4.2簡要分析

  計算機采用的二進制使得計算機處理問題具有離散性的特征。前面所述的算法設計與數據結構的離散性體現,都可以通過二進制來解釋。這涉及一些比較靠近計算機底層的理論,這里不再深究。

5結論

  本文以探究離散數學的方式淺析了計算機的離散性問題,特別是在算法設計與數據結構上,并最終說明計算機采用的二進制是計算機離散性問題的一個關鍵。

  隨著計算機科學的發展和實際需求的日益增長,計算機的離散性越來越受到相關領域的關注和重視,相信這是一個極具價值的研究領域,值得更深一步的探索。

  參考文獻

  [1] 譚浩強. C程序設計[M]. 北京: 清華大學出版社,2005.

  [2] ROGERS H. Theory of recursive functions and effective computability[M]. Cambridge: The MIT Press, 1987.

  [3] 嚴蔚敏,吳偉民. 數據結構: C語言版[M]. 北京: 清華大學出版社,2007.

  [4] 屈婉玲,耿素云,張立昂. 離散數學[M]. 北京: 清華大學出版社,2008.

  [5] JOHSONBAUGH R. Discrete mathematics [M]. Upper Saddle River: Prentice Hall, 2008.

  [6] WEISSTEIN E. Discrete mathematics [EB/OL]. (2016-06-19)[2016-07-16] http://mathworld.wolfram.com/DiscreteMathematics.html.

  [7] BIGGS N. Discrete mathematics [M]. Oxford: Oxford University Press,2002.

  [8] HOPKINS B. Resources for teaching discrete mathematics [M]. Washington D.C.: Mathematical Association of America,2008.

  [9] 康華光. 電子技術基礎: 數字部分(第6版)[M]. 北京: 高等教育出版社,2014.


此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 亚洲精品123区 | 国产91网站在线观看免费 | 51短视频版在线观看www免费 | 黄色一级片在线免费观看 | 黄漫画黄网站在线观看 | 国内一级片 | 欧美性高清video | 中文字幕在线观看一区二区三区 | 涩涩逼| 日韩成人国产精品视频 | 狠狠躁天天躁夜夜躁夜天战 | 麻豆国内精品欧美在线 | 第一福利网址 | 国产亚洲精品成人久久网站 | 99pao在线视频成精品 | 欧美成人免费观看国产 | 中文字幕一区二区三区免费看 | 激情五月综合 | 无遮挡h肉动漫在线播放内衣 | 一级毛片在线看在线播放 | 美女黄网站 | 亚洲国产欧美91 | 综合在线播放 | 成人在线视频免费观看 | www狠狠| 日韩一级片在线播放 | 黄色片视频国产 | 五月综合激情网 | 欧美成人精品第一区二区三区 | 国产日韩欧美在线一二三四 | 一级免费黄色片 | 色网站在线免费观看 | 波多野结衣在线一区二区 | 成人免费专区 | 国产一区二区三区在线看 | 欧美日韩麻豆 | 久在草视频 | 亚洲第一精品夜夜躁人人爽 | 久在草视频 | 亚欧成人在线 | 欧美福利网 |