《妙趣橫生的算法》

《妙趣橫生的算法》

《妙趣橫生的算法》理論與實踐相結合,旨在幫助讀者理解算法,並提高C語言編程能力,培養讀者的編程興趣,並鞏固已有的C語言知識。

基本信息

簡介

《妙趣橫生的算法》《妙趣橫生的算法》

《妙趣橫生的算法》全書分為2個部分共10章,內容涵蓋了編程必備的基礎知識(如數據結構、常用算法等),編程實例介紹,常見算法數據結構面試題等。《妙趣橫生的算法(C語言實現)》最大的特色在於實例豐富,題材新穎有趣,實用性強,理論寓於實踐之中。通過《妙趣橫生的算法(C語言實現)》的學習,可以使讀者開闊眼界,提高編程的興趣,提高讀者的編程能力和應試能力。

《妙趣橫生的算法(C語言實現)》附帶1張光碟,內容為《妙趣橫生的算法(C語言實現)》原始碼和作者為《妙趣橫生的算法(C語言實現)》錄製的5.5小時多媒體教學視頻。  

《妙趣橫生的算法(C語言實現)》可作為算法入門人員的教程,也可以作為學習過C語言程式設計的人士繼續深造的理想讀物,也可作為具有一定經驗的程式設計人員鞏固和提高編程水平,查閱相關算法實現和數據結構知識的參考資料,同時也為那些準備參加與算法和數據結構相關的面試的讀者提供一些有益的幫助。

編輯推薦

5.5小時教學視頻、86個趣味算法題、61個算法面試題,一學就會!幫您開闊眼界,培養編程興趣,提高編程能力,增強求職的競爭力!
特別提示
《妙趣橫生的算法(C語言實現)》配套多媒體教學視頻和涉及的實例代碼收錄於《妙趣橫生的算法(C語言實現)》配書光碟中。另外,《妙趣橫生的算法(C語言實現)》適合作為相關學校的教材使用。為了方便老師授課,《妙趣橫生的算法(C語言實現)》專門配備了相應的教學PPT。
《妙趣橫生的算法(C語言實現)》內容生動有趣,寓教於樂,旨在幫您開闊眼界,培養編程興趣,提高編程能力。增強求職的競爭力。如果您想在程式設計之路上走得更遠,請翻開《妙趣橫生的算法(C語言實現)》,仔細研讀吧,它將助您一臂之力。
《妙趣橫生的算法(C語言實現)》特色
◎提供了5.5小時多媒體教學視頻,學習起來比較直觀。
◎提供了24個數據結構和算法的基礎知識實例,便於讀者入門。
◎提供了86個經典、有趣、貼近生活、實用性強的算法實例。
◎提供了61個算法及數據結構的面試題。增強求職者的競爭力。
◎內容梯度科學,既適合入門,也適合進一步提高和研究。
◎書中實例用C語言實現,便於讀者驗證及加深對C語言的理解。
◎既涵蓋基本理論,又包含大量實例,寓理論於實踐之中。
◎講解由淺入深,通俗易懂,將複雜問題簡單化,讀者可以輕鬆掌握。

目錄

第1部分基礎篇
第1章數據結構基礎
1.1什麼是數據結構
1.2順序表
1.2.1順序表的定義
1.2.2向順序表中插入元素
1.2.3從順序表中刪除元素
1.2.4實例與分析
1.3鍊表
1.3.1創建一個鍊表
1.3.2向鍊表中插入結點
1.3.3從鍊表中刪除結點
1.3.4銷毀一個鍊表
1.3.5實例與分析
1.4棧
1.4.1棧的定義
1.4.2創建一個棧
1.4.3入棧操作
1.4.4出棧操作
1.4.5棧的其他操作
1.4.實例與分析
1.5佇列
1.5.1佇列的定義
1.5.2創建一個佇列
1.5.3入佇列操作
1.5.4出佇列操作
1.5.5銷毀一個佇列
1.5.6循環佇列的概念
1.5.7循環佇列的實現
1.5.8實例與分析
1.6樹結構
1.6.1樹的概念
1.6.2樹結構的計算機存儲形式
1.6.3二叉樹的定義
1.6.4.二叉樹的遍歷
1.6.5創建二叉樹
1.6.6實例與分析
1.7圖結構
1.7.1圖的概念
1.7.2圖的存儲形式
1.7.3鄰接表的定義
1.7.4.圖的創建
1.7.5圖的遍歷(1)——深度優先搜尋
1.7.6圖的遍歷(2)——廣度優先搜尋
1.7.7實例與分析
第2章常用的查找與排序方法
2.1順序查找
2.2折半查找
2.3排序的概述
2.4直接插入排序
2.5選擇排序
2.6冒泡排序
2.7希爾排序
2.8快速排序
第3章常用的算法思想
3.1什麼是算法
3.2算法的分類表示及測評
3.2.1算法的分類
3.2.2算法的表示
3.2.3算法性能的測評
3.3窮舉法思想
3.3.1基本概念
3.3.2尋找給定區間的素數
3.3.3TOM的借書方案
3.4遞歸與分治思想
3.4..1基本概念
3.4.2計算整數的劃分數
3.4.3遞歸的折半查找算法
3.5貪心算法思想
3.5.1基本概念
3.5.2最優裝船問題
3.6回溯法
3.6.1基本概念
3.6.2四皇后問題求解
3.7數值機率算法
3.7.1基本概念
3.7.2計算定積分
第2部分編程實例解析
第4章編程基本功
4.1字元類型統計器
4.2計算字元的ASCII碼
4.3嵌套if.else語句的妙用
4.4基於switch語句的解碼器
4.5判斷閏年
4.6指針變數作參數
4.7矩陣的轉置運算
4.8矩陣的乘法運算
4.9巧用位運算
4.10檔案的讀寫
4.11計算檔案的大小
4.12記錄程式的運行時間
4.13十進制/二進制轉化器
4.14列印特殊圖案
4.15列印楊輝三角
4.16複雜級數的前n項和
4.17尋找矩陣中的“鞍點”
4.18n階勒讓德多項式求解
4.19遞歸反向輸出字元串
4.20一年中的第幾天
第5章數學趣題(一)
5.1舍罕王的失算
5.2求兩個數的最大公約數和最低公倍數
5.3歌德巴赫猜想的近似證明
5.4三色球問題
5.5百錢買百雞問題
5.6判斷迴文數字
5.7填數字遊戲求解
5.8新郎和新娘
5.9愛因斯坦的階梯問題
5.10尋找水仙花數
5.11猴子吃桃問題
5.12兔子產仔問題
5.13分解質因數
5.14常勝將軍
5.15求兀的近似值
5.16魔幻方陣
5.17移數字遊戲
5.18數字的全排列
5.19完全數
5.20親密數
5.21數字翻譯器
5.22遞歸實現數制轉換
5.23誰在說謊
第6章數學趣題(二)
6.1連續整數固定和問題
6.2表示成兩個數的平方和
6.3具有特殊性質的數
6.4驗證角谷猜想
6.5驗證四方定理
6.6遞歸法尋找最小值
6.7尋找同構數
6.8驗證尼科徹斯定理
6.9三重回文數
6.10馬克思手稿中的數學題
6.11漁夫捕魚問題
6.12尋找假幣
6.13計算組合數
6.14遞歸法求冪
6.15漢諾Hanoi塔
6.16選美比賽
第7章數據結構趣題
7.1順序表的就地逆置
7.2動態數列排序
7.3在原表空間進行鍊表的歸併
7.4約瑟夫環
7.5二進制/八進制轉換器
7.6回文字元串的判定
7.7括弧匹配
7.8魔王語言翻譯
7.9動態雙向鍊表的套用
7.10判斷完全二叉樹
7.11動畫模擬創建二叉樹
7.12列印符號三角形
7.13遞歸函式的非遞歸求解
7.14任意長度整數加法
第8章數值計算問題
8.1遞推化梯形法求解定積分
8.2求解低階定積分
8.3疊代法開平方運算
8.4牛頓法解方程
8.5歐拉方法求解微分方程
8.6改進的歐拉方法求解微分方程
8.7雅可比疊代公式求解線性方程組
第9章綜合題
9.1破碎的砝碼
9.2計算24的問題
9.3馬踏棋盤
9.40-1背包問題
9.5八皇后問題求解
9.6簡易檔案加密/解密系統
第10章算法設計與數據結構面試題精粹
10.1常見的算法設計題
10.2常見的數據結構題

前言

程式=數據結構+算法——著名的計算機科學家沃斯(NikiklausWirth)
自從著名的計算機科學家沃斯將程式設計形象地用上面的公式表示出來後,這條“黃金定律”便成為了人們學習程式設計,進行程式開發的準則。要想成為一名真正專業的程式設計人員,基本的數據結構基礎和常用的算法知識是必須掌握的。脫離了這兩點,編寫出來的程式一定不是健壯的好程式。
然而單純地掌握了一些數據結構基礎和常用的算法知識也是遠遠不夠的。空洞地掌握所謂的數據結構和算法等理論知識只是紙上談兵,這些知識必須要依託於一門程式設計語言才具有真正的生命力,才能夠轉化為真實的程式代碼,才能真正地解決實際問題。
本書就是將數據結構基礎和常用的算法知識與目前廣泛套用、最具民眾基礎的C語言相結合而產生的。本書的寫作思想是理論與實踐相結合,以實踐為核心,以實例為主要內容。
首先,本書總結歸納了數據結構基礎、常用的排序查找算法和經典的算法思想,提綱挈領地闡述了核心的理論知識。這樣可以使沒有系統學習過或者不熟悉數據結構和算法等知識的讀者對這部分知識有一個基本的了解,並掌握基本的數據結構知識和常用而經典的算法思想,以便更加深入地學習本書的其他內容。
其次,本書列舉了大量的編程實例,這些題目都按照知識體系進行了內容上的劃分。本書列舉的這些編程實例都是一些比較靈活有趣的題目,有些題目滲透了巧妙的算法思想,有些題目則必須藉助特殊的數據結構才能更加容易解答。通過這些題目的訓練,可以使讀者開闊眼界,啟迪思維,提高編程的興趣。最重要的是能夠提高讀者算法設計的本領,提高讀者靈活套用各種數據結構的本領,提高讀者編寫程式解決實際問題能力。
本書有何特點
1.結構清晰,知識全面
本書分為兩部分。第1部分是基礎知識介紹,主要介紹數據結構的基礎知識和一些常用的算法思想。這部分內容為核心的理論知識,可以幫助讀者學習和回顧數據結構和算法的知識,使讀者在理論水平上有所提高,從而能夠更加順利地深入學習後續內容。第2部分主要是編程實例的介紹,通過一些非常有趣的編程實例使讀者開闊眼界,發散思維,提高算法設計本領,提高靈活套用各種數據結構的本領,提高讀者編寫程式解決實際問題能力。

精彩書摘

其實階乘的數學定義可以用遞歸函式來簡單地描述:
這樣的函式稱為遞歸函式,因為該函式本身直接或間接地調用了該函式本身。基於階乘的遞歸函式的描述,就不難設計出計算n的階乘n!的遞歸算法。
可以看出,使用遞歸算法解決階乘問題形式上更加簡潔,更易於人們理解。
在設計遞歸算法時要注意以下幾點。

插圖插圖

(1)每個遞歸函式都必須有一個非遞歸定義的初始值,作為遞歸結束標誌,或遞歸結束的出口。就像實例3.5所描述的遞歸算法中的if(n-0)ret啪l;如果一個遞歸算法中沒有這個非遞歸定義的初始值,那么該遞歸調用是無法計算出具體的值的(或無法得到結果),同時該遞歸調用也無法結束。
(2)在設計遞歸算法時,要解決的問題需具有遞歸性。例如要計算,2的階乘n!,n!的定義本身具有遞歸性。這種所謂的遞歸性實際上就是一種反覆調用自身過程的特性。
(3)雖然採用遞歸算法解決問題,特別是一些複雜問題,更加方便且容易實現,但是遞歸方法的運行較低,時間和空間複雜度都比較高,因此對於一些對時間和空間要求較高的程式,建議使用非遞歸算法設計。
在實際的算法設計中,遞歸與分治如同一對兄弟,經常結合在一起使用。這是因為,由分治的方法產生的子問題往往都是原問題的更小規模。反覆使用分治的手段,可使子問題與原問題類型一致,但規模不斷縮小,最終使子問題比較容易求解。既然子問題與原問題的類型一致,這就具有了所謂的遞歸性,因此可以使用遞歸的方法用解決原問題的算法去解決同類型的子問題。在第2章中介紹的折半查找算法只是單純地使用了分治的策略,在下面的實例分析中將使用遞歸與分治思想相結合的方法進行折半查找算法的設計。

盤點有關算法書籍

算法可以理解為有基本運算及規定的運算順序所構成的完整的解題步驟。或者看成按照要求設計好的有限的確切的計算序列,並且這樣的步驟和序列可以解決一類問題。
《算法之道》
《妙趣橫生的算法》
《機器學習》
《光線跟蹤算法技術》
《遊戲核心算法編程內幕》
《植物的算法美》
《計算智慧型》
《組合數學教程》
《套用組合數學》
《大話數據結構》
《蟻群算法原理及其套用》
《數學建模》
《支持向量機導論》
《國際大學生程式設計競賽例題解》
《數據挖掘原理與算法》
《MATLAB函式速查手冊》
《大學算法教程》
《算法設計》
《多任務下的數據結構與算法》
《集體智慧編程》
《最最佳化理論與方法》
《深入淺出數據分析》
《群智慧型算法及其套用》
《高效程式的奧秘》
《近似算法》
《生物信息學算法導論》
《C數值算法》
《計算數論》
《ACM程式設計競賽基礎教程》
《算法引論》
《STL源碼剖析》
《新編實用算法分析與程式設計》
《並行程式設計》
《信息檢索》
《數據壓縮導論》
《多處理器編程的藝術》
《程式設計中常用的解題策略》
《圖論導引》
《算法設計與分析導論》
《分散式算法導論》
《面向千萬億次計算的算法與套用》
《分散式算法》
《數據結構與算法分析》
《具體數學》
《實時碰撞檢測算法技術》
《世界大學生程式設計競賽》
《算法設計與分析基礎》
《柔性字元串匹配》
《程式設計師實用算法》
《圖論簡明教程》
《現代最佳化計算方法》
《現代密碼學理論與實踐》
《MATLAB語言常用算法程式集》
《編程的本質》
《算法藝術與信息學競賽》

相關詞條

相關搜尋

熱門詞條

聯絡我們