int main(int argc, char** argv){ KDTree<simplePoint3> tree; std::vector<simplePoint3> pts{ {0,0,0},{1,1,1}, {-1, 3, 4}, {5, 6, 7}, {2, -6, 8}, {4, 5, -4}, {2, 3, 4}, {2, 5, 6}}; tree.buildTree(pts); tree.dumpTreeInorder(); std::cout << "searching near 0,0,0.1" << std::endl; auto closeNodes = tree.getPointsWithinCube({0, 0, 0.1}, 0.2); std::cout << "found" << std::endl; for(auto n : closeNodes){ tree.dumpNode(n); } std::cout << "searching near 0.5,0.5,0.5" << std::endl; closeNodes = tree.getPointsWithinCube({0.5, 0.5, 0.5}, 0.7); std::cout << "found" << std::endl; for(auto n : closeNodes){ tree.dumpNode(n); } std::cout << "min, x: " << std::endl; tree.dumpNode(tree.findMin(0)); std::cout << "min, y: " << std::endl; tree.dumpNode(tree.findMin(1)); std::cout << "min, z: " << std::endl; tree.dumpNode(tree.findMin(2)); for(auto i = 0; i < pts.size() -1; ++i){ std::cout << "deleting node " << i << std::endl; tree.deletePoint(i); tree.dumpTreeInorder(); } std::cout << "inserting 2 points" << std::endl; tree.insertPoint({1, 4, 5}); tree.dumpTreeInorder(); tree.insertPoint({3, 8, 6}); tree.dumpTreeInorder(); }
int main(int argc, const char * argv[]) { int K = 3; vector<vector<double> > dataset; ReadData rd1("sample_data.txt"); dataset=rd1.allDataPointsVec; int N=dataset.size(); //query_point vector<double> query_point; vector<vector<double> > query_point_dataset; ReadData rd2("query_points.txt"); int N2 = rd2.get_num_of_elements(); int dim2 = rd2.get_num_of_dimensions(); query_point_dataset=rd2.allDataPointsVec; query_point=query_point_dataset[1]; KDTree<128, size_t> kd; vector<Point<128>> keyVec; Point<128> key; for(int i=0; i<query_point_dataset.size(); i++) { for(int j=0; j<128; j++) { key[j]=query_point_dataset[i][j]; } keyVec.push_back(key); } vector<size_t> pointIndices; for(int i=0; i<N; i++) { pointIndices.push_back(i); } kd.buildTree(dataset, pointIndices); vector<size_t> indices; for(int i=0; i<query_point_dataset.size(); i++) { indices = kd.kNNValues(keyVec[i], K); for (int j = 0; j<K; j++) { cout<<"For the number row "<<i<<" query point, Using Exact kNN Search 3 Nearest Neigbour : The number "<<j+1<<" nearest neighbor index is "<<indices[j]<<endl; } } /**Compare the KD-Tree with the Brute-Force Method* for (int i = 0; i<indices.size(); i++) { if(indices[i]==brute_force_htable[brute_force_vec[i]]) { cout<<"Comparing with the Brute-force method, the Exact K-Nearest Neighbour search by KD-Tree program is correct"<<endl; } } */ return 0; }