Time of Update: 2018-12-05
參考:《機器學習》Tom版 以及http://blog.csdn.net/v_july_v/article/details/7577684一、簡介決策樹是一個預測模型;他代表的是對象屬性與對象值之間的一種映射關係。樹中每個節點表示某個對象,而每個分叉路徑則代表的某個可能的屬性值,而每個葉結點則對應從根節點到該分葉節點所經曆的路徑所表示的對象的值。決策樹僅有單一輸出,若欲有複數輸出,可以建立獨立的決策樹以處理不同輸出。
Time of Update: 2018-12-05
演算法設計:後續遍曆此二叉樹,將兩個節點的父節點分別放入兩個鏈表中,然後順序對比,找出最後一個相同的節點,既是最低共同節點 C偽碼實現:List *h,*h1,*h2;bool find1=false,find2=false;void postVisit(BTNode *root){ if(root!=null) { add(root,h); //將root結點加入以h為表頭的鏈表中
Time of Update: 2018-12-05
參考自網路的各種資料: 可重新進入的函數簡單來說就是可以被中斷的函數,也就是說,可以在這個函數執行的任何時刻中斷它,轉入OS調度下去執行另外一段代碼,而返回控制時不會出現什麼錯誤;而不可重新進入的函數由於使用了一些系統資源,比如全域變數區,中斷向量表等,所以它如果被中斷的話,可能會出現問題,這類函數是不能運行在多任務環境下的。也可以這樣理解,重入即表示重複進入,首先它意味著這個函數可以被中斷,其次意味著它除了使用自己棧上的變數以外不依賴於任何環境(包括static),這樣的函數就是purecod
Time of Update: 2018-12-05
這些函數的區別在於 實現功能 以及 操作對象 不同。strcpy 函數操作的對象是 字串 ,完成 從 源字串 到 目的字串 的 拷貝 功能。snprintf 函數操作的對象 不限於字串 :雖然目的對象是字串,但是來源物件可以是字串、也可以是任意基本類型的資料。這個函數主要用來實現 (字串或基礎資料型別 (Elementary Data Type))向 字串 的轉換 功能。如果來源物件是字串,並且指定 %s 格式符,也可實現字串拷貝功能。memcpy 函數顧名思義就是 記憶體拷貝 ,實現
Time of Update: 2018-12-05
題目傳送門:進入分析:這道題是“石子合并”的變形。同樣是用動態規劃來解。用 dp[i, j] 表示從第 i 堆開始的 j 堆混合物合并所釋放的最少煙霧量sum[i, k] 表示從第 i 堆開始的 j 堆混合物合并後的顏色。顯然有狀態轉移方程:dp[i, j] = min { dp[i, k] + dp[i + k, j - k] + sum[i, k] * sum[i + k, j - k] } (1 <= k < j)由此不難寫出代碼:01 #include
Time of Update: 2018-12-05
這個程式的實現有助於壓縮key的大小,使尋找效率更高1.問題描述
Time of Update: 2018-12-05
1.概覽 以下主要敘述Hadoop如何將使用者寫好的MR程式,以Job的形式提交 主要涉及的四個java類檔案:hadoop-mapreduce-client-core下的包org.apache.hadoop.mapreduce: Job.java、JobSubmitter.javahadoop-mapreduce-client-jobclient下的包org.apache.hadoop.mapred:
Time of Update: 2018-12-05
1.雖然二分尋找是十分簡單的程式,但是因為迴圈等操作也是最容易出錯的,其中在寫迴圈(或者遞迴)程式的時候,應該特別注意三個方面的問題:初始條件、轉化、終止條件。 2.二分尋找源碼int biseach(char** arr, int b, int e, char* v){ int minIndex = b, maxIndex = e, midIndex; while(minIndex < maxIndex - 1) /
Time of Update: 2018-12-05
1.問題描述一個有N個整數元素的一維數組( A[0], A[1], ... , A[n-2], A[n-1]),子數組之和的最大值是什麼?(要求子數組的元素是連續的)例子:有數組( -2, 5, 3, -6, 4, -8, 6),則其子數組之和的最大值為8,其對應的數組為(5,3) 2.分析與解法解法一:採用直接法,記Sum[i...j],為數組A中從第i到第j之間所有數之和,算出所有Sum,取其最大,代碼如下,時間複雜度O(N2):int maxSum1(int *A, int n){
Time of Update: 2018-12-05
1.socket函數為了執行網路I/O,一個進程必須做的第一件事就是調用socket函數,指定期望的通訊協定類型#include <sys/socket.h> int socket (int family, int type, int
Time of Update: 2018-12-05
如果你還沒有看過上一篇文章,請先移步看問題描述。擴充問題二:至多掃描一遍序列,求出丟失的兩個數字。 不管用什麼方法,可以肯定的是我們至少需要掃描一遍序列。因為只能掃描一遍,所以先求出 a XOR b,再根據結果分類的方法就不適用了。既然我們不能根據某一位分類,那我們能否對所有位進行分類呢?比如,int是32位,我們可以對每一位都分成兩類分別異或。我們還要記錄每一位上1出現的次數,實際上,只需要記錄1出現奇數次還是偶數次就夠了。 如果某一位上1出現奇數次,那麼我們就知道 a 和 b
Time of Update: 2018-12-05
1.守護進程的特徵 守護進程也稱精靈進程是生存期長的一種進程,它們常常在系統引導裝入時啟動,在系統管比時終止。守護進程沒有控制終端,所以它們是在後台啟動並執行。守護進程是一種很有用的進程。 Linux的大多數伺服器就是用守護進程實現的。比如,Internet伺服器inetd,Web伺服器httpd等。同時,守護進程完成許多系統任務。比如,作業規划進程crond,列印進程lpd等。 所有守護進程都以超級使用者(使用者ID為0)的優先權運行。沒有一個守護進程具有控制終端,控制名稱設定為(
Time of Update: 2018-12-05
1.線程概念一個線程由表示一個進程裡的一個執行內容所需的資訊組成。這包括一個在進程裡標識線程的線程ID、一組寄存器值、棧、調用優先順序和策略、訊號掩碼、errno變數(1.7節)、和線程指定資料(12.6節)。在一個進程內的所有東西在進程裡的線程間都可以共用,包括可執行程式的代碼、程式的全域和堆記憶體、棧、和檔案描述符。 2.線程標識就像每個進程有一個進程ID一樣,每個線程也有一個線程ID。進程ID在整個系統的唯一的,但線程ID不同,線程ID只在它所屬的進程環境中有效1).下面一個函數被用來比
Time of Update: 2018-12-05
1.概覽當RM(ResourcesManager)和NM(NodeManager)陸續將所有模組服務啟動,最後啟動是NodeStatusUpdater,NodeStatusUpdater將用Hadoop RPC遠程調用ResourcesTrackerService中的函數,進行資源是初始化等操作,為將要啟動並執行Job做好準備。以下主要分析在Job提交之前
Time of Update: 2018-12-05
問題描述:對一個輸入文本中的每個單詞的出現次數統計,並選取出現頻率最大的10個單詞 首先用C++實現,著重注意STL的map,vector排序用法,這裡與編程珠璣的代碼不同。不知道何故,編程珠璣上的代碼, 輸入之後得到的結果是按照單詞排序的,而不是按照次數排序,這裡做了修改C++實現代碼:#include <iostream> #include <stdlib.h> #include <string> #include <map>
Time of Update: 2018-12-05
1.問題描述給出兩個單向鏈表的頭指標,比如h1、h2,判斷兩個鏈表是否相交。編程之美為了簡化問題,假設兩個鏈表均不帶環。如: 2.分析與解法解法一:直觀法,先判斷第一個鏈表的每個節點是否在第二個鏈表中,這種方法時間複雜度為O(Length(h1)*Length(h2)) 解法二:hash表計數法,首先將第一個鏈表的所有節點地址進行hash排序,建立hash表,然後針對第二個鏈表的每個節點的地址,查詢hash表,如果它在hash表中存在,那麼說明兩個鏈表有交點。這個方法時間複雜度O(Length
Time of Update: 2018-12-05
1.概述這章的TCP客戶/伺服器模型2.TCP回射伺服器程式1).main函數 #include "unp.h"int main(int argc, char **argv){ int listenfd, connfd; pid_t childpid; socklen_t clilen; struct sockaddr_in cliaddr, servaddr; listenfd = Socket (AF_INET, SOCK_STREAM,
Time of Update: 2018-12-05
1.問題描述假設有一個沒有頭指標的單鏈表。一個指標指向此單鏈表中間的一個節點(不是第一個,也不是最後一個),請將該節點從單鏈表中刪除。如所示: 2.分析與解法假設給定的指標為pCurrent, Node* pNext =
Time of Update: 2018-12-05
(來源網路)用newInstance與用new是有區別的,區別在於建立對象的方式不一樣,前者是使用類載入機制,那麼為什麼會有兩種建立對象方式?這個就要從可伸縮、可擴充,可重用等軟體思想上解釋了。 Java中原廠模式經常使用newInstance來建立對象,因此從為什麼要使用原廠模式上也可以找到具體答案。 例如: Class c = Class.forName(“A”);factory = (AInterface)c.newInstance();
Time of Update: 2018-12-05
1.問題描述程式的輸入包含兩個整數m和n,其中m<n。輸出是0~n-1範圍內m個隨機整數的有序列表,不允許重複。從機率的角度說,我們希望得到沒有重複的有序選擇,其中每個選擇出現的機率相等。 2.解決思路與代碼實現編程珠璣上給出了四個函數1).genknuth():演算法依次考慮整數0,1,2,...,n-1,並通過一個適當的隨機測試對每個整數進行選擇。通過按序訪問整數,可以保證輸出結果是有序的代碼C++實現:void genknuth(int m, int n) {