演算法導論中的演算法總結
1、插入排序
INSERTION_SORT(A)
for j = 2 to A.length
key = A[j]
i = j-1
while i > 0 and A[i] > key
A[i+1] = A[i]
i = i-1
A[i+1] = key
迴圈不變式為:for迴圈的每次迭代開始時,子陣列A[1…j-1]由原來在A[1…j-1]中的元素組成,但以按序排列。
初始化:對迴圈技術變數的初始賦值後、在迴圈頭的第一次測試之前,保持迴圈不變式。
保持:每次迭代保持迴圈不變式。
終止:迴圈終止時保持迴圈不變式。
相關推薦
演算法導論中的演算法總結
1、插入排序 INSERTION_SORT(A) for j = 2 to A.length key = A[j] i = j-1 while i > 0 and A[i] > key A[i+1] = A[i] i = i-1 A[i+1] =
《演算法導論》上機總結
突然想到把所有的上機都總結一下。如果有錯誤還請不吝斧正。 目錄 實驗一 排序演算法 實驗二 Strassen’s 矩陣乘法和最近點對演算法 實驗三:作業排程和最長共同子序列算 實驗四:單源最短路徑和全點對最短路徑演算法 首先說明一下程式碼格式:我這邊所有的東西基本
演算法導論中紅黑樹插入演算法的C+實現及優化改進
之前在上到算導的紅黑樹插入時,突然冒出個想法,下課的時候找徐教授交流,由於當時也沒想透徹加上表述不清,就沒深入下去。恰巧實驗課要做紅黑樹插入的實現,於是整理了一番,記錄於此以備以後檢視。 由於C++水平太菜,程式碼基本用C實現,用到了一些C++的新特性。 首先是結點的資料
Java實現演算法導論中圖的廣度優先搜尋(BFS)和深度優先搜尋(DFS)
對演算法導論中圖的廣度優先搜尋(BFS)和深度優先搜尋(DFS)用Java實現其中的虛擬碼演算法,案例也採用演算法導論中的圖。 import java.util.ArrayList; import java.util.HashMap; import java.util.It
Java實現演算法導論中樸素字串匹配演算法
樸素字串匹配演算法沿著主串滑動子串來迴圈匹配,演算法時間效能是O((n-m+1)m),n是主串長度,m是字串長度,結合演算法導論中來理解,具體程式碼參考: package cn.ansj; publ
演算法導論中的順序統計學示範程式碼
#include<iostream> #include<vector> #include<algorithm> using namespace std; namespace select { /** * 使用快速排序的思想完
用Python實現演算法導論中的演算法 序
目前正好在學習Python和《演算法導論(原書第三版)》,於是想著想用Python把書中所有演算法實現一遍。更新時間不確定,完成時間我也沒有定下來,大概有空就會寫寫,希望儘早可以完成吧~ 本篇部落格將
Java實現演算法導論中最長公共子序列(LCS)動態規劃法
1、問題: 求兩字元序列的最長公共字元子序列LCS 2、求解:動態規劃法 動態規劃的思路就是用一個矩陣來記錄兩個字串中所有位置的兩個字元之間的匹配情況,若是匹配則為1,否則為0。然後求出對角線最長的1序列,其對應的位置就是最長匹配子
Python實現 《演算法導論 第三版》中的演算法 第2章 演算法基礎
第2章 演算法基礎 1. 插入排序 P17。插入排序比較簡單。 class InsertionSort: def sort(self, A): for i in range(
《演算法導論英文版第三版》電子書附下載連結+30個總結JVM虛擬機器的技術文排版好(收藏版)
技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好的作用。 對於每一章的知識,先閱讀標題,弄懂大概講的是什麼主題,再去快速看一遍,不懂也沒有關係,但是一定要在不懂的
《演算法導論》中演算法的部分實現[GitHub]
Introduction to Algorithms 介紹 GitHub地址 閱讀《演算法導論》過程中實現的部分演算法(Java版)。 已實現的演算法(後續持續更新。。。) chapter 2 插入排序 歸併排序 cha
Python實現 《演算法導論 第三版》中的演算法 第6章 堆排序
第6章 堆排序 1. 堆 堆是一個數組,它可以被看成一個近似的完全二叉樹。樹上的每一個結點對應陣列中的一個元素。除最底層外,該樹是完全充滿的,而且是從左向右填充。表示堆的陣列包括兩個屬性:A.le
演算法導論 第一章:演算法在計算中的作用 筆記
文章目錄 演算法 NP完全問題 插入排序和合並排序 演算法 演算法(algorithm) 就是定義良好的計算過程,它取一個或一組值作為輸入, 併產生出一個或一組值作為輸出。也就是說,演算法就是一系列的計算步驟,用來將輸入資料轉換成輸
(演算法導論習題解exercise2.3-7)給定一個整數序列以及一個數X,確定該序列中是否有兩個數的和為X
這是<<演算法導論>>中的一題,exercise 2.3-7.可以這麼做:1) 首先將序列排序,去掉重複的元素.2) 其次生成一個序列, 該序列中每個元素都是X-原序列中的值, 同樣的,去重.3) 對這兩個已經排序好的序列進行合併操作.4) 如果有兩個元素之和為X, 那麼在合併
(演算法導論習題解problem2.4)尋找一個序列中逆序對的數量
#include <stdio.h>void display(int array[], int size){ int i; for (i =0; i < size; ++i) { printf("%d ", array[i]); } printf(
《演算法導論》學習心得第一章——演算法在計算中的作用
閱讀本文大約需要 2 分鐘。 Hello~好久不見~上個學期的課程量比較大,將很多的計劃都擱置了,所以一直沒有更新公眾號,趁著相對輕鬆的寒假,我準備繼續之前的計劃,學習《演算法導論》,並且將學習的心得體會發在微信公眾號和CSDN部落格。 今天不討論理論的內容
演算法導論習題---求n個元素任何排列中逆序對的數量
問題描述: 設A[1…n]是一個包含n個不同數的陣列。如果在i < j的情況下,有A[i] > A[j],則(i,j)就稱為A中的一個逆序對(inversion),(逆序對的元素是下標,而不是數組裡的值)。給出一個演算法,它能用Θ(nlgn)的最壞
【演算法導論】9.中位數和順序統計量
在一個由n個元素組成的集合中,第i個順序統計量是該集合中第i小的元素。一箇中位數是它所屬集合的“中點元素”。中位數總是出現在上中位數處和下中位數處,本書中所用的“中位數”都是指下中位數。 本章討論的問題是,從一個由n個互異的元素構成的集合中選擇第i個順序統計量的問題,假設集合中的元素都是互異的。
資料結構與演算法分析筆記與總結(java實現)--陣列11:陣列中的逆序對(﹡)
題目:在陣列中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個陣列中的逆序對的總數P。並將P對1000000007取模的結果輸出。 即輸出P%1000000007 輸入描述: 題目保證輸入的陣列中沒有相同的數字 資料範圍:
演算法導論11.4開放定址法 練習總結
11.4-1 考慮將關鍵字 10、22、31、4、15、28、17、88、59用開放定址法插入到一個長度為 m = 11 的散列表中,輔助雜湊函式為 h'( k ) = k mod m。試說明分別用線性探查,二次探查(c1 = 1,c2 = 3) 和雙重雜湊h2( k )