介绍
在豪斯多夫距离测量度量空间的两个子集之间的差异。直观地来说,度量空间只是带有内置距离函数的某个集合。在这个挑战中,我们将使用具有普通距离的自然数d(a, b) := abs(a - b)
。两个非空有限集之间的Hausdorff距离A
和B
由下式给出
max(max(min(d(a, b) for b in B) for a in A),
max(min(d(a, b) for a in A) for b in B))
以类似Python的符号表示。Hausdorff距离的计算方法是:找到与A
的最近元素的B
距离最大的元素B
,与到的最近元素的A
距离最大的元素,然后取这些距离中的最大值。换句话说,如果Hausdorff距离为d
,则的每个元素A
都在d
的某个元素的距离内B
,反之亦然。
输入项
您的输入是一个整数列表。它仅包含元素0,1,2,3
,这意味着该列表的给定索引是否是的元件既不A
也不B
,仅A
仅B
或两者A
和B
。例如,输入[0,1,1,0,2,3]
表示A = {1,2,5}
和B = {4,5}
,如果我们使用基于0的索引(这没有区别,因为我们的度量标准是转换不变的)。
输出量
您的输出是A
和之间的Hausdorff距离B
。在上面的示例中,它是3
。如果任何一组为空,则距离没有定义,您应返回-1
。
规则
您可以编写完整的程序或函数。最低字节数获胜,并且不允许出现标准漏洞。
测试用例
[] -> -1
[0] -> -1
[0,1,0] -> -1
[2,0,0,2] -> -1
[0,1,2,3] -> 1
[0,3,3,0,0,0,0,3] -> 0
[1,0,0,1,0,0,1,3,1] -> 7
[1,0,0,0,0,3,0,0,0,0,2] -> 5
[0,1,1,3,1,3,2,1,1,3,0,3] -> 2
[2,2,2,1,2,0,3,1,3,1,0,3] -> 3
[1,3,0,2,0,2,2,1,0,3,2,1,1,2,2] -> 2
[1,0,1,1,2,0,1,2,3,1,0,0,0,1,2,0] -> 4
A
都非常接近之一B
,但是有些元素B
距离却很远A
(例如,如果A
是的子集B
)。在这种情况下,简短公式不正确。
max(max(min(d(a, b) for b in B) for a in A))
应该足够了。这是因为d(a,b)
返回绝对值,因此两个max函数每次都将返回相同的数字。