經過一天努力實現了kd-tree樹二維的建立,但是**只適用於二維,這是令人遺憾的地方。
在這個過程中學到了不少東西,特別是對vector的一些用法,多了更多的了解。
思路:建立樹時,傳遞vector為形參,以第n%2維為變數,對結構體vector排序,找出中位數,奇數找中間,
偶數取第(n/2)+1個,以它為分界線,左邊的放在vector<>a中,右邊的數放在vector<>b中,中位數那個點,
儲存為節點,遞迴呼叫建立左右子樹。
**限制普適性的地方:1、建立了點的結構體
2、找到操作維數,並對其操作的**
學到的用法:
1、vector可當形參,而且跟其他形參一樣,函式中的操作可不影響原vector
#include#includeusing namespace std;
void f(vectorx)
int main()
}
3、c++訪問控制
第一:private, public, protected 訪問標號的訪問範圍。
private:只能由1.該類中的函式、2.其友元函式訪問。
不能被任何其他訪問,該類的物件也不能訪問。
protected:可以被1.該類中的函式、2.子類的函式、以及3.其友元函式訪問。
但不能被該類的物件訪問。
public:可以被1.該類中的函式、2.子類的函式、3.其友元函式訪問,也可以由4.該類的物件訪問。
注:友元函式包括3種:設為友元的普通的非成員函式;設為友元的其他類的成員函式;設為友元類中的所有成員函式。
第二:類的繼承後方法屬性變化。
private 屬性不能夠被繼承。
使用private繼承,父類的protected和public屬性在子類中變為private;
使用protected繼承,父類的protected和public屬性在子類中變為protected;
使用public繼承,父類中的protected和public屬性不發生改變;
4、vector的排序
bool sortbyx( const point &v1, const point &v2)//注意:本函式的引數的型別一定要與vector中元素的型別一致
sort(v.begin(),v.end(),sortbyx);
kd-tree建立
#include#include#include #include#includeusing namespace std;
const int n=6;//the number of sample
//const int k=2;//the div of sample
//vectort;// 1th
class point ;
vectorr;
class kdtreenode;
class kdtree;
void kdtree::datain()
}void kdtree::dataout()
else
return p;
}void kdtree::lookkdtree(kdtreenode*p)
int main()
輸入: data.txt
2 35 4
9 64 7
8 17 2
輸出:7 2
5 42 3
4 79 6
8 1
K近鄰與KdTree的簡單理解
k近鄰演算法是一種簡單有效的分類與回歸方法。其基本思想是 給定乙個訓練用的資料集,對於新的輸入例項,在訓練資料中找到與該例項最為相似或者接近的k個例項,通過某種表決規則,比如這k個例項的多數類別為某個類a,就把這個新輸入的例項類別歸為這個類a k近鄰演算法是很簡單與直觀的。只需要通過簡單的距離度量,...
統計機器學習 3 K近鄰法(二)Kd Tree
為什麼需要kd樹呢?因為在實現k近鄰法時,主要考慮的問題是如何對訓練資料進行快速k近鄰搜尋,這點在特徵空間的維度大及訓練資料容量大時尤其必要。k近鄰法最簡單的實現方法是線性掃瞄,這時要計算輸入例項與每乙個訓練例項點的距離,當訓練集很大時,計算非常耗時,這種方法是不可行的。為了提高k近鄰搜尋的效率,可...
關於k近鄰法的研究
在這裡我們將學習到k 近鄰法的基本原理,如何使用測量距離的方法來分類 我們會學習如何玻璃鋼python從文字檔案匯入並理解資料 再次,還要避免在存在許多資料倆元時,要避免計算計算距離時遇到的一些常見錯誤 利用k 近鄰演算法改進約會 和數字手寫識別系統。一 演算法概述 通過測量不同特徵值之間的距離的方...