一.定義 回溯法的基本做法是搜尋,或是一種組織得井井有條的,能避免不必要搜尋的窮舉式搜尋法,這種方法適用於解一些組合數相當大的問題。回溯法在問題的解空間樹中,按深度優先策略,從根結點出發搜尋解空間樹。演算法搜尋至解空間樹的任意一點時,先判斷該結點是否包含問題的解。如果肯定不包含,則跳過對該結點為根的子樹的搜尋,逐層向其祖先結點回溯;否則,進入該子樹,繼續按深度優先策略搜尋。 二.回溯法的基本思想 &
一.分治法和遞迴的關係 分治法的設計思想是,將一個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。 直接或間接地調用自身的演算法稱為遞迴演算法。用函數自身給出定義的函數稱為遞迴函式。 由分治法產生的子問題往往是原問題的較小模式,這就為使用遞迴技術提供了方便。在這種情況下,反覆應用分治手段,可以使子問題與原問題類型一致而其規模卻不斷縮小,最終使子問題縮小到很容易直接求出其解。這自然導致遞迴過程的產生。
一.演算法:是指解決問題的一種方法或一個過程。 •演算法是若干指令的有窮序列,滿足性質 : •(1)輸入:有外部提供的量作為演算法的輸入。 •(2)輸出:演算法產生至少一個量作為輸出。
本章主要講述: 1.Floyd-Warshall演算法:求解任意兩點間的最短距離,時間複雜度為O(n^3)。 (1)使用條件&範圍:通常可以在任何圖中使用,包括有向圖、帶負權邊的圖。 (2)弗洛伊德(Floyd)演算法過程: 1、用D[v][w]記錄每一對頂點的最短距離。
本章中有三個最短路徑演算法: 1、Bellman-Ford演算法:解決的是一般情況下的單源最短路徑問題,可適用於邊的權重為負值,且有環路的情況,演算法返回一個bool值,表明是否存在一個從源結點可以到達的權重為負值的環路。如果存在,則返回false,否則,可以求出最短路徑和這條路徑的權重。 2、Dag_Shortest_Paths: 解決有向非循環圖的單源最短路徑問題,演算法根據結點的拓撲排序對帶權重的有向非循環圖G= (V,
編程實現矩陣乘法,並考慮當矩陣規模較大時的最佳化方法: (1)一般的解法: //矩陣乘法,3個for迴圈搞定 void Mul(int** matrixA, int** matrixB, int** matrixC) { for(int i = 0; i < n; ++i) { for(int j = 0; j < n; ++j) {
1.曼哈頓距離:紅藍黃皆為曼哈頓距離,綠色為歐式距離。 2.歐式距離:以空間為基準的兩點之間最短距離 3切比雪夫距離(Chebyshev distance)或是L∞度量是向量空間中的一種度量,二個點之間的距離定義為其各座標數值差的最大值 歐式距離是直接算最短距離的,而切比雪夫距離可能還得加上財力,比如第一個人財富值100,第二個只有30,雖然物理距離一樣,但是所包含的內容卻是不同的。
UML定義了以下5類、10種模型圖。 第一類是使用案例圖,使用案例圖從使用者角度描述系統的功能,並指出各功能的操作者。
堆排序演算法 一、堆排序演算法的基本特性時間複雜度:O(n*lgn)最壞:O(n*lgn)空間複雜度:O(1)不穩定。
(1)不使用額外的空間交換兩個數 a. 方法一. A=A+B B=A-B;(A+B-B=A)
給定一個數組,找出數組中第k大的數。其實現代碼如下: package com.threeTop.www;/** * 找出數組中第k大的數 * @author wjgs * */public class FindK {public static void find(int[]array,int begin,int end,int k){int
有100個連續的數字(假設1-100),隨機打亂順序,隨機取出一個數字,求最快在這個數組中快速找出缺少的數字。 (1)排序後挨個尋找 (2)運用hash表格儲存體每個值,再尋找 (3)巧妙的計算辦法,其實現代碼如下: package com.threeTop.www;import
在一個數組中,某個數字出現的次數超過了數組元素總長度的一半,找出這個數字。 package com.threeTop.www;/** * 找出數組中超過一半的元素 * @author wjgs * */public class MoreThanHalf {/** * O(n)時間複雜度解法 * @param array */public static void find(int[]array){int t=array[0];int n=0;for(int i=0;i<array.
有一個數組,長度為n,裡面只有0、1、2(分別代表紅、白、藍色),現在要求通過兩兩交換的方式,使得0在最前面,1在中間,2在最後面。 代碼實現如下: package com.threeTop.www;/** * 荷蘭國旗問題 * @author wjgs * */public class DutchFlag { /** * 荷蘭國旗問題 * @param array */public static
給定一個整型數組,把所有負值調到數組的左邊,把所有正值調到右邊。例如:1、-2、-4、5、9、-3、-8、6,調整後可以是-2、-4、-3、-8、1、5、9、6. 具體的實現代碼如下: package com.threeTop.www;/*** * 數組正負值排序 * @author wjgs * */public class ArraySort { /** * 借鑒快速排序的思想,進行排序 * @
求最大子矩陣的和:實現代碼如下 package com.threeTop.www;public class MaxSumMatrix { /** * 擷取矩陣的最大和子矩陣 * @param matrix * @return */public static int maxSumSubMatrix(int [][]matrix){int[][]total=matrix;for(int i=1;i<matrix.length;i++){for(int
數組中連續的一部分稱為原數組的子數組。比如3、-6、1、2、3、-1、2、-5、1、2,這個數組的的最大子數組就是1、2、3、-1、2。 實現代碼如下: package com.threeTop.www;/** * 動態規劃法 * @author wjgs * */public class MaxSumSubArray {/** * 動態規劃求最大子數組 * @param array */public
從數組中找出其和為指定值得兩個數:比如輸入的數組為1、3、5、7、9、15,尋找的結果為10,那麼輸出下標0、4,或者1、3都可以。 (1)最直接的辦法,遍曆每一個元素,對於任意a[k],只需要遍曆尋找是否存在值為sum-a[k]的數組元素。 (2)運用散列表,加快尋找的時間
完成Hadoop上的搭建,開始運行幾個小的測試,畢竟第一次,遇到了一些小問題。 首先,是參考資料中的 驗證安裝是否成功的步驟。 將下載資料 synthetic_control.data 上傳到HDFS中,命令如下 (1) hadoop fs -mkdir testdata(注意,此命令的檔案夾路徑必須是如上,不可是/testdata 等其他形式) (2) hadoop fs -put &
一、下載二進位檔案 點擊開啟連結 二、解壓檔案 tar -zxvf mahout-distribution-0.9.tar.gz -C /usr 三、 配置環境變數:在/etc/profile, 添加MAHOUT_HOME 環境變數 export MAHOUT_HOME=/usr/apache-mahout-distribution-0.12.2 export PATH=$PATH:$