計算機作為一種新生的生產力,在信息社會即新技術革命中發揮越來越重要的作用。那么作為計算機科學的重要內容——算法,就成了現在計算機領域研究的一個重點課題。然而在很多的算法教學上普遍存在著以下現象:只重視抽象的語句講解,而忽視直觀的操作演示;只重視靜態的算法描述,而忽視動態的過程演示,這樣的教學使得學生只知其然而不知其所以然。
一、典型算法可視化的研究背景
算法可視化是近幾十年新興起的一個算法研究方向。算法可視化是研究程序性能行為的有力工具,它是利用計算機圖形學的技術和方法將程序執行過程和數據演變形象地在計算機屏幕上用動態圖形表示出來。通過可視化工具,算法的執行過程可以更直觀,更容易的理解。到目前為止,已經出現了許多功能強大的算法可視化系統,促進了算法可視化的進一步發展。可以預見算法可視化技術的應用范圍會越來越廣。目前算法可視化技術已經在微機上實現了,這些技術已成為我們開展算法可視化應用研究的基礎。
二、算法可視化簡介
算法可視化是將一個程序的數據、操作和語義提取出來并進行動態演示,利用諸如圖形、文本、顏色、聲音、編碼、動畫和視頻等多媒體工具集合來描述算法。通過對算法的可視化設計,可以使算法的執行過程更直觀,理解更容易。
算法可視化一般分為兩類:靜態算法可視化,通過一系列靜止的圖像來展示算法的執行過程;動態算法可視化,即動畫算法,像電影一樣連續地描述算法的執行過程。
算法可視化主要用途之一就是用于教學。算法的教學難點在于它們的抽象性和動態性。在書本教材和課堂授課板書或投影膠片中采用圖示可以在一定程度上化抽象為直觀,但很難展現對象的瞬間動態特性和算法的作用過程。如果為教材配套的算法動態模擬輔助教學軟件,對典型算法進行動態交互式模擬跟蹤, 將抽象的數據結構和算法實現動態同步可視化。
三、算法可視化設計思路
(一)算法的收集和分析
算法的收集和分析是前期的基礎準備工作,也是算法可視化是否成功的關鍵。首先,確定要研究的算法所屬于的課程體系,例如:《數據結構》的入門級課程體系。其次,收集在這些課程中所需要的算法及基本程序。最后,對這些算法及基本程序,進行分析,確定這些算法的特點、結構和所要解決的問題。
(二) 算法可視化演示軟件的框架搭建
算法可視化演示軟件的框架主要包括兩方面:程序的運行過程、數據結構的變化及一些動態結果。要實現算法演示程序的標準化,首先應設計好與應用環境的接口。包括:屬性 (property),用來控制和獲取控件的特征。方法(method),針對控件所進行的某種操作,它在內部執行的是一個過程。
四、實現方法和技術
實現算法可視化的方法很多,主要借助可視化編程軟件來對算法進行模擬實現。在此選擇可以實現可視化的軟件Flash 8.0 來開發算法可視化模擬軟件。Flash 8.0既容易實現算法所對應的程序,又容易實現形象的演示。如何實現算法內部運行和外部動態顯示過程相結合,是演示軟件開發的關鍵。Flash就為實現這個關鍵提供了兩種方法。一種是用幀動畫的方式來達到算法運行與外部顯示的同步;另一種是用Flash中自帶的Action Script腳本來實現。
下面就以使用Action Script腳本編程方法來實現數據結構中的順序表建立、插入和刪除算法的演示的技術,說明如何解決這個問題的:
第1步 利用Action Script編寫順序表的建立、插入和刪除算法的對應程序,并調試成功。
第2步 通過Flash可視化界面顯示順序表算法的C 程序。借助如下代碼,可以實現執行與算法跟蹤顯示同步。
第3步 數據的初始化允許用戶完成,這也是算法演示軟件的重要特色。一種是以下拉列表的方式提供一組數據,由用戶選擇,另一種完全允許用戶根據需要輸入自己的數據,通過軟件進行判斷輸入的數據是否正確。下面以完全允許用戶根據需要輸入數據來講解。先是在軟件主界面中放置一個輸入文本框,設置它的變量名為shurue,把這個文本框看做是順序表插入元素的輸入框。并設置一個按鈕bt2來接受這個輸入的數,并對輸入的數作相應的判斷。
五、關鍵性技術
在算法可視化的分析過程中,為了實現算法的可視化,考慮了很多問題,總結出以下三個關鍵性技術:
1.用戶圖形界面設計
用戶圖形界面設計是軟件設計的關鍵工作之一,設計界面時要考慮到用戶的使用,方便用戶的使用, 操作簡單, 采用動畫技術, 最大限度地調動用戶的使用度。對于不同的算法程序采用與其相匹配的初始化設置界面。
2.圖形化動態演示
圖形化動態演示是將算法由抽象變具體,使學生的學習由枯燥變得生動。算法可視化軟件中,顏色、聲音、動畫等多媒體元素的使用使界面變得漂亮,故算法可視化軟件可以將多媒體元素合理使用,使軟件的可視化達到最佳效果。
3.算法動態跟蹤及演示
在算法的動態演示的過程中希望能很好的捕捉算法的動態運行過程。有的軟件還需要對算法進行中斷和單步執行來實現圖形化演示程序的動態執行過程。這個問題的分析很難,需要對所使用的設計軟件有深入的理解和對算法有深刻的認識。
六、結語
雖然算法可視化設計是一項十分復雜的工作,但還是希望會有更多的研究人員從事算法可視化的研究工作。這里本人是結合了自己設計的數據結構算法可視化作品得出的一些構想,希望以后會應用到教學中,并能收到成效。