我必须设计一种O(n)复杂度算法,该算法确定数组中最频繁出现的元素,但是我还必须考虑浮点数或双精度元素。如何确定它们的出现频率?
答案 0 :(得分:0)
您需要确定浮点比较中可能出现的错误。
最简单的方法是建立直方图。使用直方图,两个值(高值和低值)之间考虑的任何内容都在该范围的计数存储区中。
例如,如果我的直方图的数字为0到1,分辨率为0.2,那么我的直方图可能会分解为
[0.0 - 0.2) (5 items)
[0.2 - 0.4) (8 items)
[0.4 - 0.6) (3 items)
[0.6 - 0.8) (1 item)
[0.8 - 1.0) (0 items)
在足够好的范围内,您可以找到一个值范围内最常出现的项目。
也可以找到最常见的浮动元素;但是,它可能不会为您提供所需的结果,因为浮点数固有地包含错误,这意味着即使在概念上相同,许多浮点数也不会相同。
由于浮点值存在错误(计算机可以存储的值与实际值之间存在错误),任何不处理某个错误范围的方法都不太可能给出正确的值,并且任何方法确实能够处理一定的误差范围,将给出答案的近似值。您可以自行决定将方法调整为适合您的数据集和手头问题的适当近似值。