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

网络平台诈骗怎么报案关键词优化公司如何选择

网络平台诈骗怎么报案,关键词优化公司如何选择,动态网页制作的工具有哪些,基于python的网站开发项目三维点云数据的哈希快速查找方法 对于三维空间中的浮点坐标点云数据,实现快速查找需要考虑浮点数的精度问题以及空间分布特性。以下是几种有效的哈希查找方法: 1. 网格哈希 (Grid Hashing) 原理:将三维空间划分为均匀的网格,每…

三维点云数据的哈希快速查找方法

对于三维空间中的浮点坐标点云数据,实现快速查找需要考虑浮点数的精度问题以及空间分布特性。以下是几种有效的哈希查找方法:

1. 网格哈希 (Grid Hashing)

原理:将三维空间划分为均匀的网格,每个点根据坐标分配到对应的网格单元。

import mathclass GridHash:def __init__(self, cell_size=0.1):self.cell_size = cell_sizeself.hash_table = {}def _get_cell_key(self, point):x, y, z = pointreturn (math.floor(x / self.cell_size),math.floor(y / self.cell_size),math.floor(z / self.cell_size))def insert(self, point):key = self._get_cell_key(point)if key not in self.hash_table:self.hash_table[key] = []self.hash_table[key].append(point)def query(self, point):key = self._get_cell_key(point)return self.hash_table.get(key, [])

2. 空间填充曲线哈希 (Z-order/Morton Code)

原理:使用空间填充曲线将三维坐标映射为一维哈希值。

def interleave_bits(x, y, z):# 将三个坐标的二进制位交错排列def spread_bits(n):n = (n | (n << 16)) & 0x030000FFn = (n | (n << 8)) & 0x0300F00Fn = (n | (n << 4)) & 0x030C30C3n = (n | (n << 2)) & 0x09249249return nreturn spread_bits(x) | (spread_bits(y) << 1) | (spread_bits(z) << 2)class MortonHash:def __init__(self, precision=1e-6):self.precision = precisionself.hash_table = {}def _quantize(self, coord):return int(coord / self.precision)def insert(self, point):x, y, z = [self._quantize(c) for c in point]key = interleave_bits(x, y, z)if key not in self.hash_table:self.hash_table[key] = []self.hash_table[key].append(point)def query(self, point):x, y, z = [self._quantize(c) for c in point]key = interleave_bits(x, y, z)return self.hash_table.get(key, [])

3. 近似最近邻哈希 (Locality Sensitive Hashing, LSH)

原理:使用随机投影将相近的点映射到相同哈希桶的概率更高。

import numpy as npclass LSHHash:def __init__(self, dim=3, num_tables=5, hash_size=10, w=4.0):self.num_tables = num_tablesself.hash_size = hash_sizeself.w = w# 生成随机投影向量self.hash_tables = []for _ in range(num_tables):table = {'projection': np.random.randn(dim, hash_size),'bias': np.random.uniform(0, w, size=hash_size),'table': {}}self.hash_tables.append(table)def _hash(self, point, table):projections = np.dot(point, table['projection']) + table['bias']hash_key = tuple(np.floor(projections / self.w).astype(int))return hash_keydef insert(self, point):point = np.array(point)for table in self.hash_tables:key = self._hash(point, table)if key not in table['table']:table['table'][key] = []table['table'][key].append(point)def query(self, point):point = np.array(point)results = set()for table in self.hash_tables:key = self._hash(point, table)if key in table['table']:for p in table['table'][key]:results.add(tuple(p))return list(results)

4. 八叉树 (Octree) 索引

虽然不是严格的哈希表,但八叉树也能提供快速的空间查找:

class OctreeNode:def __init__(self, center, size, capacity=10, max_depth=5):self.center = centerself.size = sizeself.capacity = capacityself.max_depth = max_depthself.points = []self.children = Nonedef insert(self, point, depth=0):if self.children is not None:index = self._get_child_index(point)self.children[index].insert(point, depth+1)else:self.points.append(point)if len(self.points) > self.capacity and depth < self.max_depth:self._split()def _get_child_index(self, point):x, y, z = pointcx, cy, cz = self.centerindex = 0if x > cx: index |= 1if y > cy: index |= 2if z > cz: index |= 4return indexdef _split(self):child_size = self.size / 2self.children = []for i in range(8):offset = [child_size if (i & 1) else -child_size,child_size if (i & 2) else -child_size,child_size if (i & 4) else -child_size]child_center = [self.center[j] + offset[j] for j in range(3)]self.children.append(OctreeNode(child_center, child_size, self.capacity, self.max_depth))for point in self.points:index = self._get_child_index(point)self.children[index].insert(point)self.points = []def query(self, point, radius):results = []if self.children is not None:index = self._get_child_index(point)results.extend(self.children[index].query(point, radius))# 检查相邻节点for i in range(8):if i != index and self._check_overlap(i, point, radius):results.extend(self.children[i].query(point, radius))else:for p in self.points:if np.linalg.norm(np.array(p) - np.array(point)) <= radius:results.append(p)return results

选择建议

  1. 网格哈希:最简单直接,适合均匀分布的点云
  2. Morton哈希:对空间局部性有更好保留,适合范围查询
  3. LSH:适合高维数据和近似最近邻搜索
  4. 八叉树:适合非均匀分布的点云,动态更新效率高

对于浮点坐标,关键是要处理好精度问题,通常需要将浮点数量化到适当的精度后再进行哈希。

http://www.dtcms.com/wzjs/530733.html

相关文章:

  • 网站策划报告书怎么做广告营销推广
  • 贵阳58同城做网站公司体验营销
  • 电商平台链接怎么填写关键词优化公司前十排名
  • 如何做网络营销推广员厦门seo大佬
  • 免费外贸网站制作天津提升专业关键词排名
  • 企业网站排名要怎么做百度搜索引擎排行榜
  • 用织梦做的网站好还是cms网络推广营销方案免费
  • 专注律师微网站建设与律师微信营销优化关键词有哪些方法
  • 哪些网站上可以做seo推广的简述网络营销的主要方法
  • 杭州 专业网站建设 网络服务有效获客的六大渠道
  • 大兴做网站免费seo优化
  • 建站教程的优点最有效的推广方法
  • 从客户—管理者为某一公司做一份电子商务网站管理与维护的方案百度竞价点击软件奔奔
  • 怎样入门网站开发seo基础培训
  • 做网站需服务器吗韩国seocaso
  • 电商网站开发平台需要多少手机app免费制作平台
  • 惠州哪家做网站好得物app的网络营销分析论文
  • 网站设计纠纷营销策划方案ppt模板
  • 触屏手机网站设计网址搜索引擎
  • 松江新城投资建设发展有限公司网站邯郸网站优化公司
  • 青岛市住房城乡建设局网站网站建设方案书范文
  • 金华网站建设价格搜索关键词分析
  • 延安城乡建设规划局网站怎么做互联网推广
  • 网站的内容有哪些内容吗搜索关键词是什么意思
  • 简述网站建设的过程成都seo网站qq
  • 大型网站css网站域名费一年多少钱
  • 南通市建设工程网站广东seo教程
  • 中国建设银行网站忘记密码怎么办许昌seo公司
  • 网站备案关闭网站网址大全浏览器app
  • 网站的布局百度最怕哪个部门去投诉