資料結構的筆記 1
遞迴
遞迴與歸納法密切相關
1.先判斷問題能否分成 f(n)=exp(n...f(n-i)) 漢諾塔問題
注意邊界條件
2.遞迴一般有遞迴模型 :遞迴出口 f(s)=m; 遞迴體 f(sn)=g(f(si),f(si+1)...Cj,Cj+1...) (不一定和sn-1有關)
3.遞迴深度指遞迴樹的深度而非呼叫次數
4.一些技巧:vis陣列(記憶化) 自頂向下 ...
5.尾遞迴可以轉化為迴圈
其他
1.inline 把func直接放到呼叫的函式裡copy。問題是造成程式碼膨脹
2.記憶化很常用
if(vis)return
else
3.全排列問題
1.一般方法:遞迴 注意有重複元素時不要直接swap ,增加一個if(swap)判斷是否要交換
2.字典序方法
相關推薦
資料結構筆記1---連結串列與順序表
導讀 1.單鏈表(建立,插入,刪除,查詢(2),判空) 2.陣列線性表(建立,插入,刪除,查詢,判空,判滿) 3.迴圈連結串列(建立,插入,刪除,判空) 4.運用陣列線性表的串的替換暴力演算法 單鏈表 #include <iostrea
大話資料結構讀書筆記艾提拉總結 查詢演算法 和排序演算法比較好 第1章資料結構緒論 1 第2章演算法 17 第3章線性表 41 第4章棧與佇列 87 第5章串 123 第6章樹 149 第7章圖 21
大話資料結構讀書筆記艾提拉總結 查詢演算法 和排序演算法比較好 第1章資料結構緒論 1 第2章演算法 17 第3章線性表 41 第4章棧與佇列 87 第5章串 123 第6章樹 149 第7章圖 211
Python 資料結構筆記(1):Python資料結構的效能
本系列部落格是閱讀《Problem Solving with Algorithms and Data Structures using Python》的筆記,原文連結 1、列表 List 索引和賦值是兩個非常常用的操作。這個兩個操作不論列表多長,它們的時間複雜
【資料結構】—— 1、不要小瞧陣列
2-1、 使用Java中的陣列 2-2 二次封裝屬於我們自己的陣列 2-3 向陣列中新增元素 2-4 陣列中查詢元素和修改元素 2-5 包含,搜尋和刪除 2-6 使用泛型 2-7 動態陣列 2-8 簡單的複雜度分析 2-9 均攤複雜度和防止複雜度的震盪
資料結構作業1-資料結構基本概念
1-1 抽象資料型別中基本操作的定義與具體實現有關。 (1分) [ ] T [x] F 1-2 若用連結串列來表示一個線性表,則表中元素的地址一定是連續的。 (1分) [ ] T [x] F 2-1 在決定選取何種儲存結構時,一般不考慮()。 (2分) [ ] A.
C#入門——C#語法(資料結構)1
C#語言是一種面向物件的語言。C#程式結構大體可由註釋、名稱空間、類、Main方法和語句構成的。 一.註釋 註釋是什麼:為對某行或某段程式碼的解釋說明或忽略程式碼。 註釋的作用:方便自己閱讀與維護或讓他人能夠更好地理解自己的程式。 註釋分兩種:行註釋與塊註釋 1.行註釋 static voi
資料結構——3.1樹與樹的表示
一、引言 層次結構舉例 家譜、城市(鄉鎮),檔案管理系統等 為什麼用層次結構呢? 分層次組織在管理上具有更高的效率 查詢 靜態查詢:對查詢的集合沒有插入和刪除操作,只有查詢 動態查詢:對查詢的集合除查詢外,還可能發生插入和刪除 二分查詢的啟示 例如11個元素的二
資料結構——4.1 二叉搜尋樹
一、二叉搜尋樹 一棵二叉樹,可以為空;如果不為空,滿足以下性質: 1)非空左子樹的所有鍵值小於其根結點的鍵值 2)非空右子樹的所有鍵值大於其根結點的鍵值 3)左右子樹都是二叉搜尋樹 二、二叉搜尋樹操作的特別函式 1、查詢 1)Find ① 查詢從根結點開始,如果樹
大話資料結構筆記_線性表
線性表的定義 : 簡而言之 : 0 個 或 多個元素(型別相同)的有限序列( 有順序 ) , 第一個元素無前驅 , 最後一個元素無後繼 , 其他元素 與有唯一的前驅 和 唯一的後繼 數學語言定義 : 若將線性表記為 ( a1 , a2 , ..... , ai - 1 , ai , ai+1 , ..
資料結構筆記---緒論
資料三要素 邏輯結構(線性,非線性) 儲存結構(物理結構) 資料運算 演算法的特性 有窮性,可行性,確定性,輸入,輸出 正確性,可讀性,健壯性(杭電17年考過的) 演算法度度量 演算
資料結構 筆記:程式演算法的選擇
如果兩個演算法都滿足功能性需求,那工程中最關心的其他特性是什麼?如何比較評判呢? ps:價效比(效率)是工程中最關注的演算法附加特性! 事後統計法 -比較不同演算法對同一組輸入資料的執行處理時間 -缺陷 ·為了獲得不同演算法的執行時間必須編寫相應程式 ·執行時間嚴重依賴硬體以
資料結構 筆記:程式的靈魂
資料結構靜態的描述了資料元素之間的掛你 高效的程式需要在資料結構的基礎上設計和選擇演算法 演算法是特定問題求解步驟的描述 在計算機中表現為指令的有限序列 算是獨立存在的一種解決問題的方法和思想,對於演算法而言,語言並不重要,重要的是思想。 演算法的特性: -輸入:演算法具有0
資料結構 筆記:資料的藝術
資料的概念 -程式的操作物件,用於描述客觀事物 資料的特點 -可以輸入到計算機 -可以被計算機程式處理 資料中的新概念 -資料元素 ·組成資料的基本單位 -資料項 ·一個數據元素由若干資料項組成 -資料物件 ·性質相同的資料元素的結合 資料結構指資料物
資料結構 筆記:線性表的順序儲存結構
順序儲存的定義 線性表的順序儲存結構,指的是用一段地址連續的儲存單元一次儲存線性表中的資料元素。 順序儲存結構的元素插入操作 -判斷目標位置是否合法 -將目標位置之後的所有元素後移一個位置 -將新元素插入目標位置 -線性長度加1 順序儲存結構的元素插入示例 bool
資料結構 筆記:線性表的本質和操作
線性表(List)的表現形式 -零個或多個數據元素組成的集合 -資料元素在位置上是有序排列的 -資料元素的個數是有限的 -資料元素的型別必須相同 線性表(List)的抽象定義 線性表是具有相同型別的n( >= 0)個數據元素的有限序列 線性表(List)的性質
資料結構 筆記:演算法效率的度量
演算法的空間複雜度(space Complexity) -定義:S(n) = S(f(n)) ·n為演算法的問題規模 ·f(n)為空間使用函式,與n相關 推導時間複雜度的方法同樣適用於空間複雜度 空間與時間的策略 -多數情況下,演算法的時間複雜度更令人關注 -如果有必要,
資料結構 筆記:演算法的事件複雜度
判斷一個演算法的效率時,運算元量中的常數項和其他次要項常常可以忽略,只需要關注最高階項就能得出結論 演算法的複雜度 -時間複雜度 ·演算法執行後對時間需求量的定性描述 -空間複雜度 ·演算法執行後對空間需求量的定性描述 大O表示法 -演算法效率嚴重依賴於操作(Operat
資料結構 筆記:單鏈表的具體實現
LinkList設計要點 -類模板,通過頭結點訪問後繼結點 -定義內部結點型別Node,用於描述資料域和指標域 -實現線性表的關鍵操作(增,刪,查,等) template<typename T> class LinkList : public List<T>
資料結構 筆記:線性表的鏈式儲存結構
鏈式儲存的定義 為了表示每個資料元素與其直接後繼元素之間的邏輯關係;資料元素出了儲存本身的資訊外,還需要儲存直接後繼的資訊。 ps:在邏輯上,元素之間是相鄰的;在實體記憶體中元素之間並無相鄰關係。 鏈式儲存邏輯結構 -基礎鏈式儲存結構的線性表中,每個節點都包含資料域和指標域 ·資
資料結構 筆記:陣列類的建立
需求分析 -建立陣列類代替原生陣列的使用 ·陣列類包含長度資訊 ·陣列類能夠主動發現越界訪問 Array設計要點 -抽象類模板,儲存空間的位置和大小由子類完成 -過載陣列操作符,判斷訪問下標是否合法 -提供陣列長度的抽象訪問函式 -提供陣列物件間的複製操作 Arr