原创 循環賽日程表

一、循環賽日程表算法基本思想 循環賽日程表是基於分治的思想的。對於一個龐大的問題規模,我們無從下手,那麼如果讓你安排兩個人的循環賽,你是不是可以很輕鬆的解決呢?那不廢話嗎,1選手和2選手幹一場就是了!那麼,如果是4個人呢,我們是否可以分成

原创 最小生成樹

Prim算法 1.概覽 普里姆算法(Prim算法),圖論中的一種算法,可在加權連通圖裏搜索最小生成樹。意即由此算法搜索到的邊子集所構成的樹中,不但包括了連通圖裏的所有頂點(英語:Vertex (graph theory)),且其

原创 插入排序

一、插入排序算法基本思想 在未排序的序列中選擇一個元素,插入到已經排好序的序列中。 二、插入排序的數據結構 一個數組分成兩部分,前頭的是排好序的(剛開始是第一個元素認爲是排好序的),後邊是未排序的。 三、排序過程圖解 四、算

原创 冒泡排序

一、冒泡排序算法基本思想 冒泡排序是選擇排序的一種。每一趟遍歷數組,確定一個最大(如果升序排序)元素通過冒泡的形式把它至於數組的未排好序的末尾處。 二、冒泡排序的數據結構 一個數組分成兩部分,前頭的是未好序的,後邊是排好序的。 三

原创 歸併排序

一、歸併排序算法基本思想 歸併排序是基於分治的思想,把整個數組Array的排序問題,分成兩個子數組Array1和Array2的先各自排序,然後合併成一個新數組的問題。以此遞歸下去,直到子數組的大小爲1的時候,結束遞歸調用。 二、歸併排

原创 0/1揹包問題

一、0/1揹包問題算法基本思想 0/1揹包問題是經典的動態規劃問題。 問題基本描述爲:給你體積爲V的揹包,在物品G1,G2,G3...(這些物品所對應的體積分別爲W1,W2,W3...價值分別爲P1,P2,P3...)中選擇一些放到揹包

原创 快速排序

一、快速排序算法基本思想 快速排序是基於分治思想的一種,在待排序列中選擇一個數,在剩下的數中,大於這個數的放在它的右邊,小於它的放在它的左邊。然後,再遞歸的對左右兩邊的數據進行以相同的方式操作。 二、快速排序的數據結構 數組,以選擇

原创 A Swift Tour

目錄 目錄 About Swift Hello World 變量與常量 數據類型轉換以及字符串String插值 數組Array和字典Dictionary 控制流 條件控制流 if-else switch-case 循環控制

原创 棋盤覆蓋

一、棋盤覆蓋算法基本思想 棋盤覆蓋也是基於分治思想,把一個棋盤分成左上,右上,左下,右下四個部分,然後依次解決四個子棋盤的覆蓋問題。對於四個子棋盤,如果有奇異方格,那麼遞歸解決棋盤覆蓋問題。如果沒有奇異方格,那麼進行如下操作: 1.如

原创 堆排序

一、堆排序算法基本思想 利用最小堆(最大堆)的數據結構,利用待排序數據,建立最小/大堆每次取走堆頂的元素,然後將堆底的一個最後一個元素,放到堆頂,重整堆成爲最小堆,然後再取走堆頂元素,以此類推......直到取完所有元素 二、堆排序

原创 矩陣連乘

一、矩陣連乘算法基本思想 矩陣連乘是基於動態規劃的問題。面對ABCDEF...這麼多矩陣連乘,讓你在其中添加括號使得這些矩陣所做的乘法次數最少。面對這麼大的一個問題,我們肯定無從下手。那麼如果給你兩個矩陣,你是不是又會罵,傻X都會呢?是的

原创 最長公共子序列

一、最長公共子序列算法基本思想 最長公共子序列是基於動態規劃的思想。 最長公共子序列,英文縮寫爲LCS(Longest Common Subsequence)。其定義是,一個序列 S ,如果分別是兩個或多個已知序列的子序列,且是所有符合

原创 二叉樹

定義 二叉樹不是線性的數據結構,而是樹型結構,它的特點是每個結點之多有兩顆子樹(即二叉樹不存在出度大於2的結點),並且二叉樹子樹有左右之分,其次序不能任意顛倒。二叉樹有5條非常重要的性質以及4種遍歷方法。前者經常在筆試題中出現,後者經常會

原创 深入理解RunLoop

RunLoop 是 iOS 和 OS X 開發中非常基礎的一個概念,這篇文章將從 CFRunLoop 的源碼入手,介紹 RunLoop 的概念以及底層實現原理。之後會介紹一下在 iOS 中,蘋果是如何利用 RunLoop 實現

原创 二叉查找樹

定義 二叉搜索樹(Binary Search Tree),又稱爲二叉排序樹(Binary Sort Tree), 簡稱爲BST。它具有以下性質: ①. 任何一個結點大於它左子樹所有結點的值,小於它右子樹所有結點的值 ②. 任何一個結點