Я работаю над проблемой из трещин. Кодирование Интервью, в котором спрашивается: учитывая двумерный граф с точками на нем, найдите линию, которая пропускает наибольшее количество точек.Представление чисел с плавающей запятой в двоичном формате
Решение: провести бесконечную линию между каждыми двумя точками и, используя хеш-таблицу, отслеживать, какая линия наиболее распространена. Чтобы найти наиболее распространенную строку, мы перебираем все сегменты линии, используя хеш-таблицу, чтобы подсчитать количество раз, когда мы видели каждую строку.
Автор далее говорит, что есть осложнение: «мы определяем две линии равными, если линии имеют один и тот же наклон и y-перехват. Затем мы также используем линии на основе этих значений (в частности, на основе наклона). Проблема с числами с плавающей запятой не всегда может быть точно представлена в двоичном формате. Мы разрешаем это, проверяя, находятся ли два числа с плавающей запятой в пределах значения epsilon друг от друга ».
Вот где я в замешательстве. Даже если наклон является плавающей точкой, мы не можем использовать это как хэш-ключ? Если да, почему бы не просто набросить наклон как строку? Почему нам нужно вводить в хэширование кода на основе ключей, которые находятся внутри epsilon друг от друга?
Поскольку числа с плавающей точкой в компьютерах (в целом) приближение так что в зависимости от метода, который вы используете, чтобы прийти к ряду могут существовать незначительные различия между числами, которые математически должны быть одинаковыми. Посмотрите на https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – ccpgh