当前位置: 首页 > news >正文

西安地区专业做网站公司能建网站的app

西安地区专业做网站公司,能建网站的app,网站建设+廊坊,自助建立网站KD树(K-Dimensional Tree)是一种用于多维空间的二叉树数据结构,旨在提供高效的数据检索。KD树在空间搜索和最近邻搜索等问题中特别有用,允许在高维空间中有效地搜索数据点。 重要性质 1.分割K维数据空间的数据结构 2.是一颗二叉树…

KD树(K-Dimensional Tree)是一种用于多维空间的二叉树数据结构,旨在提供高效的数据检索。KD树在空间搜索和最近邻搜索等问题中特别有用,允许在高维空间中有效地搜索数据点。
重要性质
1.分割K维数据空间的数据结构
2.是一颗二叉树
3.切分维度上,左子树值小于右子树值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>// 定义二维点的结构体
struct Point2D {double x;double y;Point2D(double _x, double _y) : x(_x), y(_y) {}
};// 定义KD树节点
struct KDTreeNode {Point2D point;KDTreeNode* left;KDTreeNode* right;KDTreeNode(Point2D _point) : point(_point), left(nullptr), right(nullptr) {}
};class KDTree {
private:KDTreeNode* root;// 构建KD树的递归函数KDTreeNode* buildKDTree(std::vector<Point2D>& points, int depth) {if (points.empty()) {return nullptr;}// 选择轴线,交替选择x和y坐标int axis = depth % 2;// 按轴线排序点if (axis == 0) {std::sort(points.begin(), points.end(), [](const Point2D& a, const Point2D& b) {return a.x < b.x;});} else {std::sort(points.begin(), points.end(), [](const Point2D& a, const Point2D& b) {return a.y < b.y;});}// 选择中间点作为节点int median = points.size() / 2;KDTreeNode* node = new KDTreeNode(points[median]);// 递归构建左子树和右子树std::vector<Point2D> leftPoints(points.begin(), points.begin() + median);std::vector<Point2D> rightPoints(points.begin() + median + 1, points.end());node->left = buildKDTree(leftPoints, depth + 1);node->right = buildKDTree(rightPoints, depth + 1);return node;}// 在KD树中查找最近邻点的递归函数KDTreeNode* findNearestNeighbor(KDTreeNode* node, Point2D target, int depth, KDTreeNode* best, double& bestDistance) {if (node == nullptr) {return best;}// 计算当前节点到目标点的距离double currentDistance = distance(node->point, target);// 更新最近邻点和距离if (currentDistance < bestDistance) {best = node;bestDistance = currentDistance;}// 选择子树int axis = depth % 2;KDTreeNode* nearSubtree;KDTreeNode* farSubtree;if (axis == 0) {if (target.x < node->point.x) {nearSubtree = node->left;farSubtree = node->right;} else {nearSubtree = node->right;farSubtree = node->left;}} else {if (target.y < node->point.y) {nearSubtree = node->left;farSubtree = node->right;} else {nearSubtree = node->right;farSubtree = node->left;}}// 递归搜索更近的子树best = findNearestNeighbor(nearSubtree, target, depth + 1, best, bestDistance);// 如果可能,搜索更远的子树if (shouldSearchFarSubtree(node, target, bestDistance)) {best = findNearestNeighbor(farSubtree, target, depth + 1, best, bestDistance);}return best;}// 计算两点之间的欧几里得距离double distance(Point2D a, Point2D b) {double dx = a.x - b.x;double dy = a.y - b.y;return std::sqrt(dx * dx + dy * dy);}// 检查是否需要搜索更远的子树bool shouldSearchFarSubtree(KDTreeNode* node, Point2D target, double bestDistance) {int axis = node->point.x > target.x ? 0 : 1; // 如果轴线是x,则比较x坐标;如果轴线是y,则比较y坐标double nodeDistance = axis == 0 ? node->point.x - target.x : node->point.y - target.y;return nodeDistance * nodeDistance < bestDistance;}public:KDTree(std::vector<Point2D>& points) {root = buildKDTree(points, 0);}// 查找最近邻点Point2D findNearestNeighbor(Point2D target) {double bestDistance = std::numeric_limits<double>::max();KDTreeNode* bestNode = findNearestNeighbor(root, target, 0, nullptr, bestDistance);return bestNode->point;}
};int main() {// 创建一些二维点std::vector<Point2D> points = {{2.0, 3.0},{5.0, 4.0},{9.0, 6.0},{4.0, 7.0},{8.0, 1.0},{7.0, 2.0}};// 构建KD树KDTree kdTree(points);// 查找最近邻点Point2D target(9.0, 2.0);Point2D nearestNeighbor = kdTree.findNearestNeighbor(target);std::cout << "The nearest neighbor to (" << target.x << ", " << target.y << ") is (" << nearestNeighbor.x << ", " << nearestNeighbor.y << ")" << std::endl;return 0;
}
http://www.hyszgw.com/news/79217/

相关文章:

  • 濮阳 网站建设莱芜金点子招聘网
  • 域名连接网站巴中市城乡和住房建设局网站
  • 建设仿优酷视频网站北京seo优化外包
  • .net 导航网站模板怎么建设课程网站
  • 做网站语言在家帮别人做网站赚钱
  • 网站广审怎么做信息管理系统网站开发教程
  • 网站页面制作建议利于优化的网站
  • 动易网站 青春wordpress密钥生成服务
  • excel 表格 做的网站wordpress网站流量统计插件
  • 凡科建站容易吗wordpress获取文章简介
  • 外贸seo建站网站搭建原理
  • 做网站是什么样的工作云平台网站开发
  • 松江做网站的公司制作网页的软件免费
  • 微商城网站建设公司注册公司网站需要什么资料
  • 驻马店北京网站建设陕西网站制
  • 网站线框wordpress edit.php
  • aje网站润色app网站建设思路
  • 中国制造网 做网站费用网展企业网站系统 免费
  • 凡客诚品官方网站查询静态网页的制作
  • 深圳企业网站建设多少钱wordpress很多英文文章
  • 网站没有备案做竞价吗wordpress底下固定
  • 连连跨境电商网站开发公司电子商务网站建设策划书
  • 重庆模板建站代理torrent种子搜索引擎
  • 北京海淀区网站开发沧州企业网站制作的
  • 西昌网站建设公司百度装修网站
  • 网站规划有什么意义绿色门业宽屏网站模板 破解
  • 番禺定制型网站建设如何给wordpress导航添加图标
  • 做网站需要公司怎么创建域名
  • 网站开发月薪多少钱东莞seo快速排名
  • 高端网站建设优化wordpress主机中文网