《演算法競賽高階指南》讀書筆記
在學習了演算法設計與分析基礎這門課後,我還翻閱了《演算法競賽高階指南》這本書,這本書根據ccf-noi資訊學奧利匹克競賽涉及的知識體系進行編寫,對計算機程式設計的基本技能——資料結構與演算法進行了深入的講解。
我覺得通過這本書,我了解到的東西還是比較豐富的。比如字典樹的概念,在初學程式語言的時候,字串的基本操作最令我頭疼。而字典樹是一種用於實現字串快速檢索的多叉樹結構。下面我們來討論一下trie(字典樹)的基本操作過程。
初始化:一顆棵空樹僅包含乙個根節點,該點的字元指標均指向空。
插入:當需要插入乙個字串s時,我們令乙個指標p起初指向根節點。然後,依次掃瞄s中的每個字元c:
若p的c字元指標指向乙個已經存在的節點q,則令p=q。
若p的c字元指標指向空,則新建乙個節點q,令p的c字元指標指向q,然後令p=q。
當s中的字元掃瞄完畢時,在當前節點p上標記它是乙個字串的末尾。
檢索:當需要檢索乙個字串s在trie中是否存在時,
我們令乙個指標p起始指向根節點,然後依次掃瞄s中的每個字元c:
若p的c字元指標指向空,則說明s沒有被插入過trie,結束檢索。
若p的c字元指向乙個已經存在的節點q,則令p=q。
當s中的字元掃瞄完畢時,若當前節點p被標記為乙個字串的末尾,則說明s在trie中存在,否則說明s沒有被插入過trie。
這裡有乙個例子
在這個例子中,需要插入和檢索的字串都由小寫字母構成,所以trie的每個節點具有26個字元指標,分別為a到z。上圖展示了在一棵空trie中依次插入「cab」「cos」「car」「cat」「cate」和」rain」後的trie的形態,灰色標記了單詞的末尾節點。可以看出在trie中,字元資料都體現在數的邊(指標)上,樹的節點僅儲存一些額外資訊,例如單詞結尾標記等。其空間複雜度為o(nc),其中n是節點個數,c是字符集的大小。
利用字典樹的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率更高。除此之外,我還接觸到例如「剪枝」「迭代加深」等在課上沒有接觸到的內容,收穫頗豐。
演算法分析與設計實踐 作業13 讀書筆記
我從圖書館借閱了 演算法演化論 一書,此文是我讀後對該書的一些感想。計算機數學是科學計算的一門主體學科,它伴隨著電子計算機的推廣應用而成長壯大,是一門僅有40餘年歷史的新學科。在科學計算蓬勃發展的今天,迫切要求充實完善計算數學的學課體系。翻開科學發展史,可以看到,一門學科的形成可以有不同的方式 方法...
演算法設計與分析 作業13 讀書筆記
啊哈!演算法 讀書筆記 啊哈!演算法 這本書中的演算法舉例貼近生活,語言詼諧幽默,不會讓人產生枯燥感,並配有很多幽默的插圖。演算法講解通俗易懂,並配有詳細c語言 和注釋,是一本適合初學者學習以及借鑑的演算法書籍。由於時間有限,我簡單花了一些時間閱讀了其中的排序板塊,各種排序演算法層出不窮,一直都是困...
演算法分析與設計 作業13 讀書筆記
我在知乎上找有關演算法書的推薦,偶然間找到了這本 演算法導論 雖然我沒有完全看完,但我還是獲得了一些收穫。通過閱讀這本書使我更深刻地了解了演算法思想。我了解了書中有關動態規劃 貪心演算法 攤還分析 b樹 斐波那契堆等內容。初次接觸演算法,我感到還是有點困難,尤其是在演算法分析這一塊。一般來說學習演算...