k近鄰法中kd tree樹的建立

2021-07-10 08:40:53 字數 1789 閱讀 5367

經過一天努力實現了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 近鄰演算法改進約會 和數字手寫識別系統。一 演算法概述 通過測量不同特徵值之間的距離的方...