前 言
素質教育是當今大學教育的重要任務之一,而計算思維已成為現代素質教育的基本組成部分,其教育教學從單純的計算機基本概念到思想與方法的提升,即以解決問題(計算機應用)為目標,涵蓋問題描述、形式化表示、數據結構和算法設計、編碼實現及其驗證全過程。目前很多高校開設了與計算思維教育密切相關的程序設計、數據結構和程序設計綜合實踐課程,但存在以下主要問題:
(1)停留基礎內容,應用性與實踐性不強。程序設計教學往往注重語言詞法、語法、語義,而經常忽視問題求解的內容。數據結構的教學重點在抽像化的數據及其聯繫和數據操作(算法)上,缺少具體化的應用。程序設計綜合實踐課程應用性不強,大多以復雜數據結構的練習為主。
(2)實踐主題復雜,繫統性與前沿性不足。在實踐類課程中,實踐內容還有相當部分是數據結構的內容,而不是開展數據結構的應用,此外還有一些模擬數據管理的簡單應用,缺少繫統化和緊扣時代特征的應用。
(3)基礎教材豐富,實踐教材較少。程序設計和數據結構教材的種類很多,這些教材的主題明確並且強調應用(包括綜合程序設計、數據結構、問題求解),但是與社會發展需求密切相關的教材很少,尤其與人工智能主題相關的實踐類教材更少。
針對上述存在的問題,本教材本著面向新工科教育、提升計算思維認識、落實應用技能培養的宗旨,以確保基礎、注重聯繫、增強應用、提高技能為指導,並將其融入到以計算思維為目的、以程序設計為主線、以智能搜索為背景、以提高應用實踐技能為目標的教學內容組織編寫中,具有以下特點:
(1)主題先進:以智能搜索技術及其實現為應用背景,內容緊扣智能時代的主流(見表1);
(2)課程目的明確:面向最短路徑、組合優化與函數優化、專家知識推理等不同問題求解,采用不同搜索技術,培養基於搜索策略的計算機應用能力;
(3)內容主線清晰:從樹搜索、圖搜索、啟發式搜索到局部搜索、全局搜索再到規則(與/或)樹搜索,內容逐漸深入,每個搜索算法可以解決特的定問題,並且可以引出新問題和改進算法,可訓練創新思想;
(4)學習內容豐富:除計算機語言知識和編程技能外,綜合應用了數據結構知識和智能搜索算法問題求解。所有程序案例采用自頂向下、逐步細化模塊化設計,程序編寫規範、注釋詳細,提高案例程序的可讀性和可理解性,潛移默化培養軟件工程思想。
本書主要包括以下內容:
第1章,C語言及其程序設計基礎:對C語言及其程序設計的內涵和要點進行回顧總結;
第2章,樹搜索:可回溯盲目搜索,路徑求解;
第3章,圖搜索:可回溯圖搜索、啟發式搜索,路徑求解;
第4章,啟發式搜索:局部性、隨機性、可回溯搜索,路徑求解;
第5章,局部最優搜索:啟發性、隨機性、局部性、不可回溯搜索,目標求解;
第6章,全局最優搜索:並行性、啟發性、隨機性、全局性、不可回溯搜索,目標求解;
第7章,規則樹搜索:規則樹正向搜索和逆向搜索,目標求解、過程(路徑)求解。
本書所有程序采用標準C語言實現,均在Visual C++ 6.0環境中調試通過。若使用其他C語言編譯繫統,則請參考相關資料,略加修改程序即可。
本書作者多年從事本科生和研究生的C語言、數據結構和人工智能教學,深入了解學生對C語言和智能知識的渴求以及希望達到應用水平後纔逐步確定本書的內容。在本書編寫過程中,得到中國石油大學(北京)教務處、信息科學與工程學院和中國石油大學(北京)克拉瑪依校區教務處與國際交流部、文理學院和石油學院大力支持以及校級C語言優秀教學團隊的大力幫助,在此表示衷心的感謝。同時,也感謝教育部——中銳網絡產學合作協同育人項目“面向新工科教育的計算思維培養教學改革與實踐——以C語言程序設計混合教學模式為例(201801181004)” 和新疆維吾爾族自治區教改項目“面向新工科教育的計算機基礎教學研究與實踐(2017JG094)”的支持。另外,趙建輝、吳衛江、張岩、段毛毛、董丹丹等老師對本書提出很多建議,在此向他們表示衷心的感謝。由於計算機技術飛速的發展,並且作者水平有限,書中不完善之處甚至錯誤在所難免,敬請讀者批評、指正。