1. 程式人生 > >軟考複習之資料結構篇

軟考複習之資料結構篇

演算法設計

迭代法:用於求方程的近似根。 1、若方程無解,則演算法求出的近似根序列就不會收斂,迭代過程會變成死迴圈,因此在使用迭代演算法前應先考查方程是否有解,並在程式中對迭代的次數給予限制。 2、方程雖有解,但迭代公式選擇不當,或迭代的初始近似根選擇不合理,也會導致迭代失敗。   窮舉搜尋法:對可能是解的眾多候選解按某種順序進行逐一列舉和檢查,並從中找出符合要求的候選解作為問題的解   遞推法:利用問題本身所具有的一種遞推關係求問題解的一種方法   遞迴法:執行過程分遞推和迴歸兩個階段:在遞推階段,把較複雜的問題的求解分解成比原問題簡單一些的問題的求解。在迴歸階段,從獲得的最簡單情況的解,逐級返回,依次獲得稍複雜問題的解。(遞迴法就是把問題轉化為規模縮小了的同類問題的子問題)   分治法:把大問題分解成一些較小的問題,然後由小問題的解方便地構造出大問題的解,每個小問題都是相互獨立的。例如二分查詢法、漢諾塔問題、斐波那契、歸併排序   動態規劃法:基本思想也是將大問題分解為多個小問題,但是與分治法不同的是,動態規劃法的子問題往往不是獨立的。因此,動態規劃法可以避免大量重複的計算。以自底向上的方式計算出最優值。例如最大子段問題   貪心法:不追求最優解,只希望得到較為滿意解的方法。可以快速得到滿意的解,不考慮整體情況,所以貪心法不要回溯。例如哈夫曼編碼   回溯法:該方法首先暫時放棄關於問題規模大小的限制,並將問題的候選解按某種順序逐一列舉和檢驗。當發現當前候選解不可能是解時,就選擇下一個候選解;倘若當前候選鍵除了不滿足問題規模要求外,滿足所有其他要求,繼續擴大當前候選解的規模,並繼續試探。如果當前候選解滿足包括問題規模在內的所有要求,該候選鍵就是問題的一個解。在回溯法中,放棄當前候選解,尋找下一個候選解的過程被稱為回溯;擴大當前候選解的規模,以繼續試探的過程稱為向前試探,回溯法以深度優先的方式搜尋解空間樹。   分支限界法:類似於回溯法,也是在問題的解空間樹上搜索問題解的方法。但在一般情況下,二者的求解目標不同。回溯法是找出解空間樹中滿足空間樹中滿足約束條件的解中找出使某一目標函式值達到極大或極小的解,即在某種意義下的最優解。分支限界法以廣度優先或以最小耗費優先的方式搜尋空間樹。例如單源最短路徑問題  

演算法複雜度

一般地,當遞迴方程為 T(n) = aT(n/c) + O(n),T(n)的解為:

 

概率演算法

數值概率演算法:適用於數值問題的求解,這類演算法得到的往往是近似解,且近似解的精度隨時間的增加不斷提高。在多數情況下,要計算出問題的精確解是不可能的或是沒有必要的,因此數值概率演算法可得到相當令人滿意的解。   蒙特卡羅演算法:適用於求問題的精確解,該演算法能求得一個解,但該解未必是正確的,正確的概率依賴演算法所用的時間,時間越久,正確率越高。因此,該演算法的缺點就是無法有效地判斷所得到的解是否正確。   拉斯維加斯演算法:如果該演算法找到一個解,那一定是正確的解,得到正確解的概率依賴演算法所用的時間。   舍伍德演算法:一定能找到一個正確的解,該演算法設法消除最壞情形與特定例項之間的關聯性。   鄰接矩陣 無向圖:其鄰接矩陣第i行的元素的和即為頂點i的度 例如:頂點4的度就是第四行的和,即2。
  有向圖:其鄰接矩陣第i行元素之和為頂點i的出度,而鄰接矩陣的第j列元素之和為頂點j的入度 例如:頂點3的出度和入度分別為5和16  

廣義表

廣義表的長度是將最外面那層的括號刪了以後所剩下的元素(組)個數,深度是括號的層數

儲存結構

    順序儲存結構:用一組地址連續的儲存單元依次儲存線性表的各個資料元素,適用於頻繁查詢時使用 鏈式儲存結構:在計算機中用一組任意的儲存單元儲存線性表的資料元素,適用於在較頻繁的插入、刪除、更新元素時使用 (單鏈表) (迴圈連結串列) (雙鏈表) 各連結串列的比較 因為雙鏈表有兩個指標域,因此,雙鏈表的靈活度優於單鏈表,但是雙鏈表的開支要大一些   雜湊儲存結構:將資料元素的儲存位置與關鍵碼之間建立確定對應關係的查詢技術,即鍵值對
索引儲存結構:索引是一個單獨的、物理的資料庫結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。比如資料庫

二叉排序樹
  • 若它的左子樹非空,則左子樹所有節點的值均小於它的根節點的值
  • 若它的右子樹非空,則右子樹所有節點的值均大於等於它的根節點的值
  • 它的左、右子樹也分別為二叉排序樹。查詢的時候,中序遍歷二叉樹,得到一個遞增序列
  • 關鍵字最大的結點可以有左子樹,但一定沒有右子樹
哈夫曼樹(最優二叉樹) 定義:哈夫曼樹是帶權路徑(WPL)最短的樹,權值越大的葉子節點越靠近根節點 WPL值的計算:樹的路徑長度是從樹根到每一結點的路徑長度之和。樹的帶權路徑長度為樹中所有葉子結點的帶權路徑長度之和,通常記作WPL 例題 已知一個檔案中出現的各字元及其對應的頻率如下表所示。若採用定長編碼,則該檔案中字元的碼長應為(1)。若採用Huffman編碼,則字元序列“face”的編碼應為(2)。 (1)A.2 B.3 C.4 D.5 (2)A.110001001101 B.001110110011 C.101000010100 D.010111101011 解析:所謂定長編碼是指用多少位二進位制足夠表示字元,圖中字元是有6個的,a、b、c、d、e、f,可用000到101表示a到f,這樣編碼字元的碼長可以為3,4位當然也是可以,但我們是找最合適的,自然3位能滿足要求。第二問,哈夫曼樹的左節點未必要比右節點小,但是通常做題時需要寫成左小右大的形式,再左0右1賦值,所謂“face”編碼,是指找到這4個字母,從根節點出發,要經歷的編碼數。如下圖所示,所以答案為B、A

 

 

平衡二叉樹 平衡二叉樹又稱為AVL樹,且具有以下性質: 它是一棵空樹或它的左右兩棵子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹   滿二叉樹 除最後一層無任何子節點外,每一層都上的所有節點都有兩個子節點或0個子結點的二叉樹   二分查詢法(折半查詢法) 適用情況 不經常變動而查詢頻繁的有序列表 優點 1、比較次數少 2、查詢速度快 3、平均效能好 缺點 1、要求待查表為有序表 2、插入刪除困難 實現演算法:首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。   分塊查詢 適用情況:節點動態變化的情況 優點:比順序查詢演算法快得多 缺點:速度不如折半查詢法 實現演算法:把一個線性表分成若干個塊,每塊中的節點可以任意存放,但塊與塊之間必須排序。假設是按關鍵碼值非遞減的,那麼這種塊與塊之間必須滿足已排序要求,實際上就是對於任意的i,第i 塊中的所有節點的關鍵碼值都必須小於第i+1塊中的所有節點的關鍵碼值。此外,還要建立一個索引表,把每塊中的最關鍵碼值作為索引表的關鍵碼值,按塊的順序存放到一個輔助陣列中,顯然這個輔助陣列是按關鍵碼值遞減排序的。查詢時,首先在索引表中進行查詢,確定要找的節點所在的塊。由於索引表的排序的,因此,對索引表的查詢可以採用順序查詢或折半查詢;然後在相應的塊中採用順序查詢,即可找到對應的節點 平均查詢長度: (1)以二分查詢確定塊時,平均查詢長度 = log2(n / s+1) + s / 2 (2)以順序查詢確定塊時,平均查詢長度 = (b + 1) / 2 + (s + 1) / 2 = (s^2 + 2s + n) / 2s 注:n 表示元素的總個數 s 表示每個塊所具有的元素個數 b 表示分為幾個塊  

排序

  歸併排序的歸併路數 歸併路數 = | logkm |,其中m為元素個數,k為多路歸併趟數

相關推薦

複習資料結構篇

演算法設計 迭代法:用於求方程的近似根。 1、若方程無解,則演算法求出的近似根序列就不會收斂,迭代過程會變成死迴圈,因此在使用迭代演算法前應先考查方程是否有解,並在程式中對迭代的次數給予限制。 2、方程雖有解,但迭代公式選擇不當,或迭代的初始近似根選擇不合理,也會導致迭代失敗。   窮舉搜尋法:對可

複習第一部分計算機組成原理

/*先說個好笑的,昨日我在知乎看見一個問題“初中生可以學佛法麼,看不懂怎麼辦”,下面有個回答就是,“你先好好學習,我初中就皈依了,我那個師傅日常跟我講“學習都學不好還想學佛法,先好好學習””然後我 0-0忍不住哈哈哈哈,一樣的口氣。同一個世界啊。。。下面大概先是手默知識點,我

複習計算機組成原理儲存系統

儲存裝置 my knowledge: 儲存有記憶體 外存之分 記憶體:儲存速度快,儲存空間小,易丟失,外存:儲存空間大,不易丟失,訪問速度慢,一般是磁碟,然後暫存器和記憶體不是一個東西,暫存器在cpu裡,大概就是這麼多了。  軟考書籍知識: 軟考試題知識點:

複習路—從瀑布模型到極限程式設計,敏捷開發

軟體開發是一門技術,也是一門藝術。 瀑布模型、極限程式設計、敏捷開發是有代表性的開發模式,在對開發者、客戶、最終的產品的關注上的變化,體現了軟體開發管理者在管理模式上的變化。 瀑布模型 是一種

(001)資料庫系統工程師複習計算機系統基礎知識

運算器(ALU)分為:算術運算、邏輯運算 加法器:儲存運算元和運算結果 程式狀態暫存器:執行結果的狀態儲存 控制器:分析和執行指令 指令暫存器:儲存執行的指令 指令譯碼器:分析操作做什麼(加或減等) 程式計數器:順序執行,儲存下一條執行的指令的地址,並不斷向後移動一個

android面試題資料結構篇

1.常見的資料結構介紹   https://www.jianshu.com/p/230e6fde9c75(轉) 2.常見的5種併發集合 1、常用的五種併發包 ConcurrentHashMap CopyOnWriteArrayList CopyOnWr

圖解Redis資料結構篇——簡單動態字串SDS

圖解Redis之資料結構篇——簡單動態字串SDS 前言     相信用過Redis的人都知道,Redis提供了一個邏輯上的物件系統構建了一個鍵值對資料庫以供客戶端使用者使用。這個物件系統包括字串物件,雜湊物件,列表物件,集合物件,有序集合物件等。但是Redis面向記

圖解Redis資料結構篇——連結串列

前言     Redis連結串列為雙向無環連結串列!     圖解Redis之資料結構篇——簡單動態字串SDS提到Redis使用了簡單動態字串,連結串列,字典(散列表),跳躍表,整數集合,壓縮列表這些資料結構來操作記憶體,並且

複習總結

實在還是想很抱怨,這個考試很不正規,不管是題目還是答案。各種奇怪。比如明明單選題它能兩個答案,明明是java程式碼它答案裡關鍵字能給我一個virtual(雖然我不怎麼會java但是好歹關鍵字還是造的啊),還有的就不一一列舉了,雖然是個例但是差不多每年都有的坑。雖然你不是高考,但是浪費我這麼久時間

複習

計算機組成與結構 程式語言 作業系統 軟體工程基礎知識 系統開發與執行 網路與多媒體知識 2網路互連硬體 1.7層OSI 2.各層對應的裝置和協議 路由器一個埠獨自構成一個廣播域,交換機上每個介面都是一個自己的衝突域、其所有介面連線的主機構成一個廣播域,集線器

面試複習資料結構

第一章 緒論 1.1 框架 資料結構: 基本概念(資料、元素、物件和ADT) 邏輯結構(集合、線性、樹形和圖形) 儲存結構(順序、鏈式、索引和雜湊) 演算法: 基本概念:演算法、特性和評價 演算法分析:時間和空間複雜度 1.2 大綱知識

binder驅動-------資料結構篇2

1:binder實體在驅動中的表示(struct binder_node ) binder_node是應用空間的binder實體在核心的表示,它直屬於某個特定的程序(binder_proc),其他程序對該binder實體的使用,都會掛在該binder實體的refs雜湊列表中

複習——作業系統

 開始準備軟考有一段時間了,最近跟幾個同學交流學習收穫,最後大部分都出現了一個“病症”:視訊看了,課本也過了一遍,感覺自己的知識儲備的應該差不多了,但是一做練習題,很受打擊。除了沒複習到的

C++複習資料結構

前言    C/C++ 陣列允許定義可儲存相同型別資料項的變數,但是結構是 C++ 中另一種使用者自定義的可用的資料型別,它允許您儲存不同型別的資料項。    結構用於表示一條記錄,假設想要跟蹤圖書館中書本的動態,可能需要跟蹤每本書的下列屬性: Title

知識點掙值計算

掙值分析法是一種進度、成本的測量技術。可用來測量和估計偏差的程度和範圍。  計劃工作量的預算費用(BCWS,PV)=計劃工作量 * 預算定額  已完成工作量的實際費用(ACWP,AC)  已完成工作量的預算成本(BCWP,EV)=已完成工作量 * 預算定額  剩餘工作的成本

筆記—計算機組成與體系結構

計算機體系結構分類—Flynn 體系結構型別 結構 關鍵特徵 代表 單指令流單資料流 SISD 控制部分:一個 處  理  器:一個 記憶體模組:一個 單處理器系統 單指令流多資料流 SIMD

總結總結、網路、中間程式碼

【前言】 **到現在軟考暫告一段落,大昨天下午雙十一我們幾個一起去北京,璐璐、唯妍小夥伴還有我,三小枝乖乖地一起準備、討論問題,感覺棒棒噠;來的路上從王璐身上學到了很多東西:進站、上車一個都不能少,

總計白盒測試中的覆蓋

      白盒測試 中的邏輯覆蓋有分為很多種,在此對其中比較有代表性的幾種覆蓋簡單總結如下: 覆蓋標準 概念 特點 語句覆蓋 選擇足夠多的測試資料,使得被測試程式中每一條

】【資料結構】演算法基礎

  演算法與資料結構的關係:演算法的實現依賴於資料結構的設計,儘管在設計演算法步驟時可以不考慮資料結構,但演算法在計算機上與採用的資料結構密切相關。演算法的效率與資料結構有一定的關係,但並不是資料結構越簡單演算法的效率就會越高。 1.演算法的特性  

圖解Redis資料結構篇——跳躍表

前言       跳躍表是一種有序的資料結構,它通過在每個節點中維持多個指向其他節點的指標,從而達到快速訪問節點的目的。這麼說,我們可能很難理解,我們可以先回憶一下連結串列。 一、複習跳躍表 1.1 什麼是跳躍表     對於一個單鏈表來講,即便連結串列中儲存的資料是有序的,如果我們要想在其中查詢某個資料,也