首页 > 编程语言 >C++ Rect And Point Search Algorithm

C++ Rect And Point Search Algorithm

时间:2024-08-08 21:59:10浏览次数:12  
标签:Category std Search emplace Algorithm tree back data Rect

测试 
//
// Created by www on 2024/8/8.
//
#include "include/cxstructs.h"
#include "include/cxml/k-NN.h"

// 可扩展Rect内搜索子Rect或Point
void testRectSearch() {
  using namespace cxstructs;

    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_real_distribution<float> distr(0, 200);
    std::cout << "TESTING QUAD TREE" << std::endl;

    std::cout << "   Testing insert..." << std::endl;
    QuadTree<Point> tree({0, 0, 200, 200});
    for (uint_fast32_t i = 0; i < 1000; i++) {
      tree.insert({distr(gen), distr(gen)});
    }

    CX_ASSERT(tree.depth() == 3, "");
    CX_ASSERT(tree.size() == 1000, "");

    std::cout << "   Testing count subrect..." << std::endl;
    CX_ASSERT(tree.count_subrect({0, 0, 200, 200}) == 1000, "");
    CX_ASSERT(tree.count_subrect({10, 10, 50, 50}) > 10, "");
    tree.insert({2, 2});
    CX_ASSERT(tree.size() == 1001, "");
    tree.erase({2, 2});
    CX_ASSERT(tree.size() == 1000, "");

    std::cout << "   Testing max capacity..." << std::endl;
    QuadTree<Point> tree1({0, 0, 200, 200}, 2, 10);
    for (uint_fast32_t i = 0; i < 100000; i++) {
      tree.insert({distr(gen), distr(gen)});
    }

    std::cout << "   Testing object retrieval..." << std::endl;
    tree1.clear();
    tree1.insert({2, 2});
    for (auto ptr : tree1.get_subrect({0, 0, 2, 2})) {
      CX_ASSERT(*ptr == Point(2, 2), "");
    }
}

// 点集处理,可分类
void testKNN() {

  using namespace cxstructs;

  enum Category { A, B, C };
  struct DataPoint : public DataPoint_<Category> {
    Category category;
    float x_;
    float y_;
    float weight = 1;
    DataPoint() {}
    DataPoint(float x, float y, Category category) : x_(x), y_(y), category(category) {}
    float x() const final { return x_; }
    float y() const final { return y_; }
    Category getCategory() final { return category; }
    float getWeight() const final { return weight; }
  };

  std::cout << "TESTING k-NN" << std::endl;

  std::vector<DataPoint> data{};
  data.emplace_back(1, 2, Category::A);
  data.emplace_back(2, 3, Category::A);
  data.emplace_back(3, 4, Category::A);
  data.emplace_back(4, 5, Category::B);
  data.emplace_back(5, 6, Category::B);
  data.emplace_back(6, 7, Category::B);
  data.emplace_back(7, 8, Category::C);
  data.emplace_back(8, 9, Category::C);
  data.emplace_back(9, 10, Category::C);
  Category cat1;
  kNN_2D<DataPoint> knn(data, DISTANCE_FUNCTION_2D::EUCLIDEAN);

  std::cout << "   Testing absolute classification" << std::endl;
  cat1 = knn.classify_by_category_count(0, 0, 4);
  CX_ASSERT((int)cat1 == 0, "");
  cat1 = knn.classify_by_category_count(5, 5, 4);
  CX_ASSERT((int)cat1 == 1, "");

  std::cout << "   Testing distance weighted classification" << std::endl;
  cat1 = knn.classify_by_sum_distance(0, 0, 4);
  CX_ASSERT((int)cat1 == 0, "");
  cat1 = knn.classify_by_sum_distance(5, 5, 4);
  CX_ASSERT((int)cat1 == 1, "");

  std::cout << "   Testing weight classification" << std::endl;
  cat1 = knn.classify_by_sum_weight(0, 0, 4);
  CX_ASSERT((int)cat1 == 0, "");
  cat1 = knn.classify_by_sum_weight(5, 5, 4);
  CX_ASSERT((int)cat1 == 1, "");

  std::cout << "   Testing weighted * dist classification" << std::endl;
  cat1 = knn.classify_by_sum_weighted_distance(0, 0, 4);
  CX_ASSERT((int)cat1 == 0, "");
  cat1 = knn.classify_by_sum_weighted_distance(5, 5, 4);
  CX_ASSERT((int)cat1 == 1, "");
}

// 字典
void testTrie() {
  using namespace cxstructs;
  std::cout << "TESTING TRIE" << std::endl;

  std::cout << "   Testing insertion..." << std::endl;

  Trie trie;
  trie.insert("hello");

  std::cout << "   Testing contained..." << std::endl;
  CX_ASSERT(trie.contains("hello") == true, "");
  CX_ASSERT(trie.contains("helloh") == false, "");
  std::cout << "   Testing startsWith..." << std::endl;
  CX_ASSERT(trie.startsWith("he")[0] == "hello", "");
}

int main() {
//  testKNN();
  testRectSearch();
  testTrie();
  return 0;
}
输出
TESTING QUAD TREE
Testing insert...
Testing count subrect...
Testing max capacity...
Testing object retrieval...
TESTING TRIE
Testing insertion...
Testing contained...
Testing startsWith...
参考

https://github.com/gk646/cxstructs

标签:Category,std,Search,emplace,Algorithm,tree,back,data,Rect
From: https://blog.csdn.net/qq_30220519/article/details/141036995

相关文章

  • php: 操作elasticsearch的别名
    一,添加别名1,代码://初始化es的client$client=$this->_init_es();//确定参数$params=['index'=>'gs_second',//索引名字'name'=>'gs_second_idx',//索引的别名......
  • elasticsearch: 指定索引数据的保存目录
    一,查看节点的fs得到索引数据的保存目录说明:修改索引数据的保存目录,通常是因为要把数据单独保存到服务器专用的数据盘,方便扩展\管理\备份等访问:http://localhost:9200/_nodes/stats/fs 也可以从命令行访问:[root@lhdpcelasticsearch]#curl-XGET"localhost:9200/_no......
  • ImportError:无法从“jwt.algorithms”导入名称“RSAAlgorithm”
    RSAAlgorithmPyJWT算法方法无法导入,但我确实安装了PyJWT错误:ImportError:cannotimportname'RSAAlgorithm'from'jwt.algorithms'我通过运行以下命令检查了该包是否可用:poetryshow|grep-ipyjwtpyjwt2.9.0J......
  • [EC Final 2022] Rectangle
    link。数据结构好题,写死我了QwQ……这个题是可以用segbeats做到\(O(n\logn)\)的。先离散化。我们只用考虑三条竖线和两竖一横的情况。三条竖线线性DP一下就行了。两竖一横的情况可以考虑枚举更靠后的那条竖线,首先这条竖线后面还没有被覆盖的区间就只能用横线覆盖了,于......
  • ELK Elasticsearch 集群部署
    ELKElasticsearch集群部署数据流向:1、后台服务器产生的日志由filebeat收集通过logstasg进行标准化处理,传输给es1、es2(两个是一个主备的关系,数据都是一致的),然后传输给可视化设备。有了flebeat可以节省资源,可以通过filebeat和logstash实现远程数据收集。filereat不能......
  • Elasticsearch:用例、架构和 6 个最佳实践
    1.什么是Elasticsearch?Elasticsearch是一个开源分布式搜索和分析引擎,专为处理大量数据而设计。它建立在ApacheLucene之上,并由Elastic支持。Elasticsearch用于近乎实时地存储、搜索和分析结构化和非结构化数据。Elasticsearch的一个主要特性是其可扩展性,这使得......
  • Gym102788,B - Rectangles题解
    水水水~题目链接戳我分析首先根据题目条件可得式子=>\((x-2)(y-2)=n(2x+2y-4)\)化简式子可得\[\begin{align}(x-2)(y-2)=&n(2x+2y-4)\\xy-2x-2y+4=&2nx+2ny-4n\\x(y-2n-2)=&2ny-4n-4+2y\\x=&\frac{2ny-4n-4......
  • 您知道Jmeter中Redirect Automatically 和 Follow Redirects的使用场景吗?
    相信很多使用过jmeter的同学都没有关注过请求中的RedirectAutomatically 和 FollowRedirects选项,如下图:在JMeter中,RedirectAutomatically 和 FollowRedirects 是与HTTP请求重定向相关的两个选项,它们之间是有很大区别的,本文就详细的说明二者的区别!RedirectAuto......
  • SolidJS-forceDirectedGraph(2)
    使用solidJS实现力导向图力导向图参考:https://segmentfault.com/a/1190000016384506力算法代码:/***@desc力算法*/functionforce(data,ctx,size){const{nodes,links}=data;//需要参数constmaxInterval=300;//平衡位置间距cons......
  • elasticsearch教程
    1.单点部署(rpm):#提前关闭firewalld,否则无法组建集群#1.下载ESrpm包]#https://www.elastic.co/cn/downloads#2.安装es]#rpm-ivhelasticsearch-7.17.5-x86_64.rpm#3.调整内核参数(太低的话es会启动报错)echo"vm.max_map_count=655360fs.file-max=655350......