我有一个家庭作业,不知道从哪里开始或做什么。基本上,我需要使用“空间散列”来组织大约一百万个点,并使用散列表来查找彼此最接近的两个点,然后返回距离。
分配细节是: 要快速找到最接近的一对点,请将包含这些点的单位正方形划分为正方形“单元”的b×b网格,每个网格代表大小为1 / b×1 / b的2D正方形。每个点都应“散列”到包含它的单元格中。例如,如果要将点的x坐标存储在名为x的“双精度”变量中,则(int)(x * b)将按比例将坐标放大b并向下舍入到最接近的整数;结果(范围为0 ... b-1)可用作2D单元格数组的索引之一。仅使用它们的坐标,其他索引的计算方法相同。散列后,只需将每个点与其单元格中的其他点进行比较,并且将其单元格周围的8个单元格进行比较–与仅将每个点与其他点进行比较相比,这将导致更少的比较。您将需要选择一个适当的值1 此实验练习的基础。您可能需要考虑将b设置得太低或太高的危险。在内部,单元格的网格应存储为指向链接列表的二维指针数组,每个链接列表都包含属于单个单元格的点集。必须动态分配单元格数组(使用new命令),然后在程序末尾(使用delete命令)将其取消分配。这意味着,由于表的每个单元格本身都是指向链接列表节点的指针,因此代表2D指针数组的顶级变量将为“ Node ***”类型(带有三个*! ),并假设“节点”是表示链表中一个节点的结构的名称。
您的程序应包括以下主要步骤: