- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实现一些具有数值鲁棒性的几何算法。
为此,使用系统范围的delta
来实现几何相等。点的 equals()
是通过使用 delta
近似相等的距离计算来实现的。
我希望能够使用常规的 java 集合,例如 Set
。但我无法想出一个合理的 hashCode()
实现。
我的猜测是,有效使用 HashSet
的实现将导致具有“软”边界的空间分区。与分区边界距离小于 delta
的点应该能够同时分类到最多八个(对于 3D)相邻区域。距离足够近以被视为相等但位于分区不同侧的点将被“错误分类”。
这是我无法理解的。 hashCode()
就像将项目放入桶中,其中单个项目最终放入单个桶中,而我需要将其放入最多八个。
什么是合理的解决方案?我是否滥用了 hashCode() 的用途?仍然使用 hashCode()
的最合理解决方案是什么:)
编辑:谢谢,我有一种直觉,这个想法有问题,但无法指出。你把事情说得很清楚了
请让我扩展我的问题:如果我可以接受较慢的 HashSet
操作(这不是一个阻碍),我可以让 hashCode()
返回 1
因为在我的例子中没有正确的实现,如果我确实实现了 equals()
并放弃了传递性要求,会产生什么可怕的后果(就几何计算而言)?
最佳答案
对于非equals()
对象,
hashCode()
可以相等。所以,事实上,桶装可能就很好。例如,如果您只使用最近“网格”点的某个哈希函数,您可以在其中任意定义该网格,只要您一致且正确地定义舍入,它就可以作为哈希函数使用。
但是,您不会从第一个定义中得到 equals()
的正确概念。如果 A 和 B、B 和 C 彼此在 delta 范围内,这并不意味着 A 和 C 也在范围内。传递性不成立。
您可以根据分桶定义equals()
。当点接近但线的另一侧不相等时,它可能会给出稍微令人惊讶的结果。
关于java - 如何使用 equals() 和 hashCode() 实现近似几何相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8028592/
所以我必须用以下方法来近似 Pi:4*(1-1/3+1/5-1/7+1/9-...)。它也应该基于迭代次数。所以函数应该是这样的: >>> piApprox(1) 4.0 >>> piApprox(1
输入:图 G 输出:多个独立集,使得一个节点对所有独立集的成员资格是唯一的。因此,节点与它自己的集合中的任何节点都没有连接。这是一个示例路径。 由于这里需要澄清,因此再次改写: 将给定的图划分为多个集
我已经使用查找表和低阶多项式近似实现了定点 log2 函数,但对整个 32 位定点范围 [-1,+1) 的准确度不太满意。输入格式为 s0.31,输出格式为 s15.16。 我在这里发布这个问题,以便
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
我的目标是近似二项式变量总和的分布。我使用以下纸张The Distribution of a Sum of Binomial Random Variables作者:肯·巴特勒和迈克尔·斯蒂芬斯。 我想
我知道有方法 approximate cubic Bezier curves ( this page 也是一个很好的引用),但是有没有更快的方法来逼近 N 次贝塞尔曲线?还是只能使用下面的概括? 来自
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它有助于我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注意
我是 C++ 和编码本身的初学者,所以请原谅任何词汇错误。我找不到这个具体问题,但在互联网上找到了类似的问题,但我仍然很难获得我需要的结果。 所以我使用莱布尼茨公式来近似 pi,即: pi = 4 ·
有多种方法可以通过显示名称查找联系人。例如这个答案Android - Find a contact by display name 但是我需要找到模糊匹配的联系人。例如如果找不到“Kim”,我需要返回
我一直在尝试使用以下代码使用级数表示来近似 e 以获得尽可能多的精度数字,但无论我计算多少项,精度数字的数量似乎都保持不变。即: 2.718281984329223632812500000000000
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
大多数拥有计算机科学学位的人肯定知道什么是Big O stands for。 它有助于我们衡量一个算法的实际效率,如果您知道在what category the problem you are try
大多数拥有计算机科学学位的人肯定知道什么是Big O stands for。 它有助于我们衡量一个算法的实际效率,如果您知道在what category the problem you are try
我做了很多随机的数学程序来帮助我完成作业(合成除法是最有趣的),现在我想反转一个激进的表达式。 例如,在我方便的 TI 计算器中我得到 .2360679775 好吧,我想将该数字转换为等效的无理数表达
我可以通过 CPU 分析器看到,compute_variances() 是我项目的瓶颈。 % cumulative self self total
大多数拥有 CS 学位的人肯定知道什么 Big O stands for . 它帮助我们衡量算法的可扩展性。 但我很好奇,你如何计算或近似算法的复杂性? 最佳答案 我会尽我所能用简单的术语在这里解释它
这是迄今为止我的代码, from math import * def main(): sides = eval(input("Enter the number of sides:"))
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
大多数拥有 CS 学位的人肯定知道什么 Big O stands for . 它帮助我们衡量算法的扩展性。 但我很好奇,你如何计算或近似算法的复杂性? 最佳答案 我会尽我所能用简单的术语在这里解释它,
我是一名优秀的程序员,十分优秀!